]> gapil.gnulinux.it Git - gapil.git/blobdiff - session.tex
Note di copyright 2025
[gapil.git] / session.tex
index 77510fec40bf0456b38100987a691128130bf0ee..54bd915118c68e305c8d7ddb5bffe9a7690590af 100644 (file)
@@ -1,6 +1,6 @@
 %% session.tex
 %%
-%% Copyright (C) 2000-2023 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2025 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -44,9 +44,9 @@ Originariamente si trattava di dispositivi specifici (i terminali seriali, se
 non addirittura le telescriventi). Oggi questa interfaccia viene in genere
 emulata o tramite programmi o con le cosiddette console virtuali associate a
 monitor e tastiera, ma esiste sempre la possibilità di associarla direttamente
-ad alcuni dispositivi, come eventuali linee seriali, ed in certi casi, come
-buona parte dei dispositivi embedded su cui gira Linux (come router, access
-point, ecc.) questa resta anche l'unica opzione per una \textit{console} di
+a dispositivi specifici come le linee seriali, che in certi casi, come avviene
+per buona parte dei dispositivi embedded su cui gira Linux, come router,
+access point, ecc. sono l'unica opzione per una avere una \textit{console} di
 sistema.
 
 
@@ -64,7 +64,7 @@ molti terminali in contemporanea da una singola postazione di lavoro, ma il
 sistema è nato prima dell'esistenza di tutto ciò.
 
 Il \textit{job control} è una caratteristica opzionale, introdotta in BSD
-negli anni '80, e successivamente standardizzata da POSIX.1. La sua
+negli anni '80, e successivamente standardizzata da POSIX.1; la sua
 disponibilità nel sistema è verificabile attraverso il controllo della macro
 \macro{\_POSIX\_JOB\_CONTROL}. In generale il \textit{job control} richiede il
 supporto sia da parte della shell (quasi tutte ormai lo hanno), che da parte
@@ -560,15 +560,15 @@ terminati.
 \label{sec:sess_login}
 
 L'organizzazione del sistema del job control è strettamente connessa alle
-modalità con cui un utente accede al sistema per dare comandi, collegandosi ad
+modalità con cui un utente accede al sistema per dare comandi collegandosi ad
 esso con un terminale, che sia questo realmente tale, come un VT100 collegato
-ad una seriale o virtuale, come quelli associati a schermo e tastiera o ad una
-connessione di rete. Dato che i concetti base sono gli stessi, e dato che alla
-fine le differenze sono nel dispositivo cui il kernel associa i file standard
-(vedi tab.~\ref{tab:file_std_files}) per l'I/O, tratteremo solo il caso
-classico del terminale, in generale nel caso di login via rete o di terminali
-lanciati dall'interfaccia grafica cambia anche il processo da cui ha origine
-l'esecuzione della shell.
+ad una seriale, o virtuale, come quelli associati a schermo e tastiera o ad
+una connessione di rete. Dato che i concetti base sono gli stessi, e dato che
+alla fine le differenze sono nel dispositivo cui il kernel associa i file
+standard (vedi tab.~\ref{tab:file_std_files}) per l'I/O, tratteremo solo il
+caso classico del terminale, in generale nel caso di login via rete o di
+terminali lanciati dall'interfaccia grafica cambia anche il processo da cui ha
+origine l'esecuzione della shell.
 
 Abbiamo già brevemente illustrato in sez.~\ref{sec:intro_kern_and_sys} le
 modalità con cui il sistema si avvia, e di come, a partire da \cmd{init},
@@ -589,7 +589,7 @@ definito nello stesso file.
 
 Tralasciando la descrizione del sistema dei \textit{run level}, (per il quale
 si rimanda alla lettura delle pagine di manuale di \cmd{init} e di
-\file{inittab} o alla trattazione in sez.~5.3 di \cite{AGL}) quello che
+\file{inittab} o alla trattazione in sez.~5.4.5 di \cite{AGL}) quello che
 comunque viene sempre fatto è di eseguire almeno una istanza di un programma
 che permetta l'accesso ad un terminale. Uno schema di massima della procedura
 è riportato in fig.~\ref{fig:sess_term_login}.
@@ -695,12 +695,12 @@ Questi programmi, che devono essere eseguiti in modalità non interattiva e
 senza nessun intervento dell'utente, sono normalmente chiamati
 \textsl{demoni}, (o \textit{daemons}), nome ispirato dagli omonimi spiritelli
 della mitologia greca che svolgevano compiti che gli dei trovavano noiosi, di
-cui parla anche Socrate (che sosteneva di averne uno al suo servizio).
+cui parla anche Socrate, che sosteneva di averne uno al suo servizio.
 
 %TODO ricontrollare, i miei ricordi di filosofia sono piuttosto datati.
 
 Se però si lancia un programma demone dalla riga di comando in un sistema che
-supporta, come Linux, il \textit{job control} esso verrà comunque associato ad
+supporta il \textit{job control} come Linux, esso verrà comunque associato ad
 un terminale di controllo e mantenuto all'interno di una sessione, e anche se
 può essere mandato in background e non eseguire più nessun I/O su terminale,
 si avranno comunque tutte le conseguenze che abbiamo trattato in
@@ -823,7 +823,7 @@ differenti meccanismi come:
 le modalità con cui queste azioni vengono realizzate dipendono ovviamente dal
 demone che si usa, per la gestione del quale si rimanda ad un testo di
 amministrazione di sistema.\footnote{l'argomento è ad esempio coperto dal
-  capitolo 3.2.3 si \cite{AGL}.}
+  capitolo 3.2.3 di \cite{AGL}.}
 
 La \acr{glibc} definisce una serie di funzioni standard con cui un processo
 può accedere in maniera generica al servizio di \textit{syslog}, che però
@@ -1270,9 +1270,9 @@ al di fuori di questo.
 \label{sec:sess_terminal_io}
 
 Benché come ogni altro dispositivo i terminali siano accessibili come file,
-essi hanno assunto storicamente, essendo stati a lungo l'unico modo di
-accedere al sistema, una loro rilevanza specifica, che abbiamo già avuto modo
-di incontrare nella precedente sezione.
+essendo stati a lungo l'unico modo di accedere al sistema essi hanno assunto
+storicamente una loro rilevanza specifica, che abbiamo già avuto modo di
+incontrare nella precedente sezione.
 
 Esamineremo qui le peculiarità dell'I/O eseguito sui terminali, che per la
 loro particolare natura presenta delle differenze rispetto ai normali file su
@@ -1352,8 +1352,8 @@ ricevuti impiegandoli opportunamente come comandi o come dati.
 Per capire le caratteristiche dell'I/O sui terminali occorre esaminare le
 modalità con cui esso viene effettuato. L'accesso, come per tutti i
 dispositivi, viene gestito dal kernel, ma per tutti i terminali viene
-utilizzata una architettura generica che si è schematizzata in
-fig.~\ref{fig:term_struct}.  
+utilizzata una architettura generica che si è schematizzata in maniera
+semplificata in fig.~\ref{fig:term_struct}.
 
 Ad ogni terminale sono sempre associate due code
 per gestire l'input e l'output, che ne implementano una bufferizzazione
@@ -1406,8 +1406,9 @@ descriptor che corrispondono ad un terminale, in caso contrario lo standard
 richiede che venga restituito un errore di \errcode{ENOTTY}.
 
 Per evitare l'errore, ed anche semplicemente per verificare se un file
-descriptor corrisponde ad un terminale, è disponibile la funzione
-\funcd{isatty}, il cui prototipo è:
+descriptor corrisponde ad un terminale (cosa che viene fatta da alcuni
+programmi quando richiedono l'immissione di una password), è disponibile la
+funzione \funcd{isatty}, il cui prototipo è:
 
 \begin{funcproto}{
 \fhead{unistd.h}
@@ -1419,13 +1420,14 @@ descriptor corrisponde ad un terminale, è disponibile la funzione
   altrimenti, nel qual caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
   \item[\errcode{EBADF}] \param{fd} non è un file descriptor valido.
-  \item[\errcode{EINVAL}] \param{fd} non è associato a un terminale (non
-    ottempera a POSIX.1-2001 che richiederebbe \errcode{ENOTTY}).
+  \item[\errcode{ENOTTY}] \param{fd} non è associato a un terminale (alcune
+    vecchie versioni del kernel restituiscono \errcode{EINVAL} che non
+    ottempera a POSIX.1-2001).
   \end{errlist}
 }
 \end{funcproto}
 
-Un'altra funzione per avere informazioni su un terminale è \funcd{ttyname},
+Una seconda funzione per avere informazioni su un terminale è \funcd{ttyname},
 che permette di ottenere il nome del file di dispositivo del terminale
 associato ad un file descriptor; il suo prototipo è:
 
@@ -1508,14 +1510,14 @@ essere in grado di aprire il terminale.
 I vari attributi associati ad un terminale vengono mantenuti per ciascuno di
 essi in una struttura \struct{termios} che viene usata dalle varie funzioni
 dell'interfaccia. In fig.~\ref{fig:term_termios} si sono riportati tutti i
-campi della definizione di questa struttura usata in Linux; di questi solo i
-primi cinque sono previsti dallo standard POSIX.1, ma le varie implementazioni
-ne aggiungono degli altri per mantenere ulteriori informazioni.\footnote{la
-  definizione della struttura si trova in \file{bits/termios.h}, da non
+campi della definizione di questa struttura usata in Linux;\footnote{la
+  definizione della struttura si trova in \file{bits/termios-struct.h}, da non
   includere mai direttamente; Linux, seguendo l'esempio di BSD, aggiunge i due
   campi \var{c\_ispeed} e \var{c\_ospeed} per mantenere le velocità delle
   linee seriali, ed un campo ulteriore, \var{c\_line} per indicare la
-  disciplina di linea.}
+  disciplina di linea.} di questi solo i primi quattro flag ed il successivo
+\texttt{c\_cc} sono previsti dallo standard POSIX.1, ma le varie
+implementazioni ne aggiungono degli altri per mantenere ulteriori informazioni.
 
 \begin{figure}[!htb] 
   \footnotesize \centering
@@ -1621,26 +1623,28 @@ modificare i bit su cui non si interviene.
 \end{table}
 
 Il primo flag, mantenuto nel campo \var{c\_iflag}, è detto \textsl{flag di
-  input} e controlla le modalità di funzionamento dell'input dei caratteri sul
-terminale, come il controllo di parità, il controllo di flusso, la gestione
-dei caratteri speciali; un elenco dei vari bit, del loro significato e delle
-costanti utilizzate per identificarli è riportato in
-tab.~\ref{tab:sess_termios_iflag}.
-
-Si noti come alcuni di questi flag (come quelli per la gestione del flusso)
-fanno riferimento a delle caratteristiche che ormai sono completamente
-obsolete; la maggior parte inoltre è tipica di terminali seriali, e non ha
-alcun effetto su dispositivi diversi come le console virtuali o gli
-pseudo-terminali usati nelle connessioni di rete.
+  input} e controlla le modalità con cui viene gestita l'immissione dei
+caratteri sul terminale, per funzionalità come il controllo di parità, il
+controllo di flusso, la gestione dei caratteri speciali; un elenco dei vari
+bit che compongono il flag, del loro significato e delle costanti utilizzate
+per identificarli è riportato in tab.~\ref{tab:sess_termios_iflag}.
+
+Si noti come alcuni di questi flag (come quelli relativi al controllo di
+gestione del flusso) fanno riferimento a delle caratteristiche dei terminali
+che ormai sono completamente obsolete; la maggior parte inoltre è tipica dei
+terminali seriali, e non ha alcun effetto su dispositivi diversi come le
+console virtuali sullo schermo o gli pseudo-terminali usati nelle connessioni
+di rete.
 
 Il secondo flag, mantenuto nel campo \var{c\_oflag}, è detto \textsl{flag di
-  output} e controlla le modalità di funzionamento dell'output dei caratteri,
-come l'impacchettamento dei caratteri sullo schermo, la traslazione degli a
-capo, la conversione dei caratteri speciali; un elenco dei vari bit, del loro
-significato e delle costanti utilizzate per identificarli è riportato in
-tab.~\ref{tab:sess_termios_oflag}, di questi solo \const{OPOST} era previsto
-da POSIX.1, buona parte degli altri sono stati aggiunti in POSIX.1-2001,
-quelli ancora assenti sono stati indicati esplicitamente.
+  output} e controlla le modalità con cui viene gestito il funzionamento dei
+caratteri scritti sul terminale, come l'impacchettamento dei caratteri sullo
+schermo, la traslazione degli a capo, la conversione dei caratteri speciali.
+Un elenco dei vari bit, del loro significato e delle costanti utilizzate per
+identificarli è stato riportato in tab.~\ref{tab:sess_termios_oflag}, di
+questi soltanto \const{OPOST} era previsto da POSIX.1, buona parte degli altri
+flag sono stati aggiunti in POSIX.1-2001, quelli ancora assenti sono stati
+indicati esplicitamente.
 
 \begin{table}[!htb]
   \footnotesize
@@ -1698,17 +1702,19 @@ quelli ancora assenti sono stati indicati esplicitamente.
 \end{table}
 
 Si noti come alcuni dei valori riportati in tab.~\ref{tab:sess_termios_oflag}
-fanno riferimento a delle maschere di bit; essi infatti vengono utilizzati per
-impostare alcuni valori numerici relativi ai ritardi nell'output di alcuni
-caratteri: una caratteristica originaria dei primi terminali su telescrivente,
-che avevano bisogno di tempistiche diverse per spostare il carrello in
-risposta ai caratteri speciali, e che oggi sono completamente in disuso.
-
-Si tenga presente inoltre che nel caso delle maschere il valore da inserire in
-\var{c\_oflag} deve essere fornito avendo cura di cancellare prima tutti i bit
-della maschera, i valori da immettere infatti (quelli riportati nella
-spiegazione corrispondente) sono numerici e non per bit, per cui possono
-sovrapporsi fra di loro. Occorrerà perciò utilizzare un codice del tipo:
+fanno riferimento non a bit singoli, ma a delle maschere di bit; essi infatti
+vengono utilizzati per impostare alcuni valori numerici relativi ai ritardi da
+applicare alla scrittura sul terminale di alcuni caratteri: si tratta di una
+caratteristica originaria dei primi terminali su telescrivente, che avevano
+bisogno di tempistiche diverse per spostare il carrello in risposta ai
+caratteri speciali, e che oggi sono completamente in disuso.
+
+Si tenga presente inoltre che nel caso si utilizzi una di queste maschere di
+bit il valore da inserire in \var{c\_oflag} deve essere fornito avendo cura di
+cancellare prima tutti i bit della maschera; i valori da immettere infatti
+(quelli riportati nella spiegazione corrispondente) sono numerici e non per
+bit, per cui possono sovrapporsi fra di loro. Occorrerà perciò utilizzare un
+codice del tipo:
 
 \includecodesnip{listati/oflag.c}
 
@@ -1911,8 +1917,8 @@ Oltre ai vari flag per gestire le varie caratteristiche dei terminali,
 impostare i caratteri speciali associati alle varie funzioni di controllo. Il
 numero di questi caratteri speciali è indicato dalla costante \constd{NCCS},
 POSIX ne specifica almeno 11, ma molte implementazioni ne definiscono molti
-altri.\footnote{in Linux il valore della costante è 32, anche se i caratteri
-  effettivamente definiti sono solo 17.}
+altriin Linux il valore della costante è 32, anche se i caratteri
+effettivamente definiti sono solo 17.
 
 \begin{table}[!htb]
   \footnotesize
@@ -2187,7 +2193,8 @@ velocità tipiche delle linee seriali:
 \begin{verbatim}
      B0       B50      B75      B110     B134     B150     B200     
      B300     B600     B1200    B1800    B2400    B4800    B9600    
-     B19200   B38400   B57600   B115200  B230400  B460800
+     B19200   B38400   B57600   B115200  B230400  B460800  B460800
+     B500000  B576000  B921600  B1000000 B1152000 B1500000 B2000000
 \end{verbatim}
 
 Un terminale può utilizzare solo alcune delle velocità possibili, le funzioni
@@ -2489,7 +2496,6 @@ Da fare.
 
 Qui vanno spiegati i terminali virtuali, \file{/dev/pty} e compagnia.
 % vedi man pts
-% vedi 
 
 
 \subsection{Allocazione dei terminali virtuali}
@@ -2503,13 +2509,18 @@ Qui vanno le cose su \func{openpty} e compagnia.
 % vedi http://lwn.net/Articles/688809/,
 % http://man7.org/linux/man-pages/man3/ptsname.3.html
 
+% vedi
+% https://stackoverflow.com/questions/77231881/how-to-turn-a-pty-shell-into-a-remote-shell
+% https://gist.github.com/zmwangx/2bac2af9195cad47069419ccd9ee98d8
+% https://www.uninformativ.de/blog/postings/2018-02-24/0/POSTING-en.html 
+% https://cpp.hotexamples.com/it/examples/-/-/openpty/cpp-openpty-function-examples.html
 
 % TODO materiale sulle seriali
 % vedi http://www.easysw.com/~mike/serial/serial.html
 % TODO materiale generico sul layer TTY
 % vedi http://www.linusakesson.net/programming/tty/index.php
 
-% LocalWords:  kernel multitasking job control BSD POSIX shell sez group
+% LocalWords:  kernel multitasking job control BSD POSIX shell sez group SysV
 % LocalWords:  foreground process bg fg waitpid WUNTRACED pgrp session sched
 % LocalWords:  struct pgid sid pid ps getpgid getpgrp unistd void errno int
 % LocalWords:  ESRCH getsid glibc system call XOPEN SOURCE EPERM setpgrp EACCES
@@ -2547,7 +2558,7 @@ Qui vanno le cose su \func{openpty} e compagnia.
 % LocalWords:  closelog dmesg sysctl klogctl sys ERESTARTSYS ConsoleKit to CoPy
 % LocalWords:  loglevel message libc klog mydmesg CAP ADMIN LXC pipelining UID
 % LocalWords:  TIOCSPGRP GID IUTF UTF LOBLK NONBLOCK CMSPAR MARK VDSUSP VSTATUS
-% LocalWords:  cfsetspeed raw cfmakeraw
+% LocalWords:  cfsetspeed raw cfmakeraw dell'I SVr l'I
 
 %%% Local Variables: 
 %%% mode: latex