[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
Il programma di gestione del terminale è quello che consente di collegarsi con il sistema operativo e di poter interagire con questo. Quello utilizzato originariamente per questo scopo è getty (del pacchetto Getty_ps), ma quasi tutte le distribuzioni GNU/Linux preferiscono utilizzare programmi alternativi, come agetty, mingetty e mgetty.
In questo capitolo viene descritto l'uso generale di alcuni di questi programmi, fino alla connessione di un terminale attraverso la porta seriale, senza affrontare il problema della connessione remota attraverso una linea commutata.
La tabella 51.1 elenca i programmi e i file a cui si accenna in questo capitolo.
Tabella 51.1. Riepilogo dei programmi e dei file per l'attivazione dei terminali a caratteri.
Nella procedura di inizializzazione del sistema, Getty è quel programma che si occupa di attivare il terminale e iniziare la procedura di accesso. Come dice la pagina di manuale getty(1): «Getty è il secondo dei tre programmi (init(1), getty(1) e login(1)) utilizzati dal sistema per permettere all'utente di accedere». In pratica, il programma Getty si occupa di:
aprire la linea di terminale e impostare le modalità necessarie;
ricevere il nominativo usato dall'utente per identificarsi;
attivare il programma per la procedura di accesso (convenzionalmente si tratta di /bin/login
), fornendogli già il nominativo-utente (sarà poi compito di login di richiedere l'inserimento della parola d'ordine).
Il programma Getty tipico fa uso di alcuni file:
/etc/gettydefs
per la definizione delle caratteristiche delle linee dei terminali;
/etc/issue
per definire un testo di «benvenuto» da inviare all'utente che tenta di connettersi.
Un programma Getty non è fatto per l'utilizzo manuale diretto, ma per essere inserito nel file /etc/inittab
, in modo da essere attivato direttamente da Init durante la fase si inizializzazione del sistema. In un sistema GNU/Linux, l'attivazione delle sei console virtuali consuete avviene con record simili a quelli seguenti.
1:12345:respawn:/sbin/getty tty1 2:2345:respawn:/sbin/getty tty2 3:2345:respawn:/sbin/getty tty3 4:2345:respawn:/sbin/getty tty4 5:2345:respawn:/sbin/getty tty5 6:2345:respawn:/sbin/getty tty6
Come si vede dall'esempio, viene usato un argomento per specificare il terminale da utilizzare, ovvero il nome del file di dispositivo corrispondente contenuto nella directory /dev/
. Questo elemento, viene definito normalmente come «linea», alludendo al tipo di terminale in base al tipo di connessione utilizzata.
Quando il programma Getty viene utilizzato per attivare una connessione attraverso un terminale seriale, si pone il problema di configurare opportunamente la porta seriale stessa. In tal caso si utilizzano altri argomenti, oppure la configurazione del file /etc/gettydefs
.
Se oltre alla linea seriale si utilizzano dei modem, si aggiunge anche il problema della loro inizializzazione. Il programma Getty può solo occuparsi di quello connesso dalla sua parte, ma anche in tal caso si pone il problema di definire la stringa di inizializzazione adatta.
Quando si vuole ottenere una connessione attraverso modem, utilizzando una linea telefonica commutata, Getty deve essere in grado di controllare il modem anche in questo modo, rispondendo e distinguendo eventualmente se la chiamata proviene da un altro modem o se si tratta di un segnale sonoro normale.
Getty_ps (1) è un pacchetto composto da due parti: getty per la connessione attraverso la console e i terminali seriali e uugetty per la connessione attraverso modem.
I due programmi Getty di Getty_ps utilizzano sia il file di configurazione /etc/gettydefs
che il file di introduzione /etc/issue
. Eventualmente, vengono utilizzati anche altri file, la cui posizione cambia a seconda del modo con cui vengono compilati i sorgenti.
I due programmi eseguibili, getty e uugetty, possono essere compilati in modo da utilizzare il registro del sistema per annotare gli eventi importanti, oppure in modo da utilizzare un file apposito, generalmente /var/log/getty.log
. Ciò serve a chiarire che dipende dalle scelte fatte da chi organizza la distribuzione GNU/Linux l'esistenza o meno di tale file e la sua collocazione.
Oltre alla configurazione standard dei programmi Getty, definita attraverso il file /etc/gettydefs
, si possono utilizzare diversi file di configurazione, uno per ogni linea (o terminale), definiti da nomi nella forma seguente, dove questi si riferiscono rispettivamente a getty e a uugetty.
/etc/conf.getty.linea
/etc/conf.uugetty.linea
Oppure, in alternativa:
/etc/default/getty.linea
/etc/default/uugetty.linea
La «linea» è in pratica il nome del dispositivo che fa riferimento al terminale corrispondente, senza il prefisso della directory (per esempio: tty1, tty2,... ttyS0, ecc.).
La distinzione della collocazione e dei nomi utilizzati, dipende sempre dalle scelte fatte in fase di compilazione dei sorgenti.
Se il file previsto per una linea particolare non risulta presente, getty, oppure uugetty, utilizzano un file di configurazione generale, rispettivamente:
/etc/conf.getty
/etc/conf.uugetty
oppure
/etc/default/getty
/etc/default/uugetty
Le direttive dei file di configurazione di «linea» sono espresse semplicemente da assegnamenti, nella solita forma:
nome=valore
Di seguito sono elencate solo alcune direttive che possono essere utilizzate in questi file.
LOGIN=nome
Con questa direttiva si può definire un nome e un percorso differente per il programma che si vuole utilizzare per la procedura di accesso. In modo predefinito dovrebbe trattarsi di /bin/login
.
ISSUE=stringa
ISSUE=file_issue
Questa direttiva permette di specificare un messaggio introduttivo diverso da quello contenuto nel solito file /etc/issue
. Si può specificare una stringa, senza delimitatori, contenente il messaggio stesso, oppure si può indicare il file da utilizzare, con il suo percorso assoluto (deve iniziare con la barra obliqua, /). Il testo che definisce questo messaggio introduttivo ammette l'uso degli stessi caratteri di escape mostrati nella tabella 51.3.
CLEAR=YES
CLEAR=NO
Se viene assegnato il valore NO, getty non tenta di ripulire lo schermo prima di emettere il messaggio introduttivo e la richiesta di identificazione della procedura di accesso.
WAITCHAR=YES
WAITCHAR=NO
Se viene assegnato il valore YES, getty attende un carattere dalla linea prima di iniziare a emettere l'invito alla connessione.
DELAY=n_secondi
Questa direttiva viene usata normalmente in congiunzione all'attivazione di WAITCHAR, in modo da stabilire un ritardo in secondi dopo la ricezione del carattere dalla linea.
WAITFOR=stringa
Stabilisce una stringa da attendere prima di iniziare a mostrare l'invito della procedura di accesso. In pratica, al contrario di WAITCHAR, si vuole attendere una stringa particolare e non solo un carattere qualunque. Se viene usato in congiunzione a DELAY, allora getty attende il numero di secondi stabilito a partire dal momento in cui la stringa è stata inserita completamente.
TIMEOUT=n_secondi
Fa in modo che il programma attenda per un numero massimo di secondi che l'utente completi la procedura di accesso; trascorso tale limite, getty termina l'esecuzione e con lui la possibilità di accedere da quella linea.
getty [opzioni] linea [velocità [tipo] ]
getty -c file_gettydefs
La sintassi indicata rappresenta una semplificazione di quella effettiva. Il primo dei due casi mostra la situazione più comune, in cui getty viene avviato in modo da controllare una linea di terminale; il secondo caso rappresenta la sintassi utilizzabile per verificare la validità formale del file /etc/gettydefs
.
getty è strettamente dipendente dal file di configurazione /etc/gettydefs
, dove l'argomento indicato come «velocità» fa riferimento a uno dei suoi record. Quindi, con questo termine, non si fa tanto riferimento a un numero che esprime la velocità della linea, ma alla sigla corrispondente utilizzata nel file di configurazione, dal quale si ottengono anche altre informazioni.
L'argomento indicato come «tipo» si riferisce al nome del terminale, secondo quanto definito da Termcap e Terminfo. Questa informazione è utile a getty per conoscere la stringa necessaria a ripulire lo schermo e per impostare la variabile di ambiente TERM.
-d file_di_configurazione
Permette di indicare esplicitamente il file di configurazione di linea. Questa opzione è particolarmente utile quando non si sa precisamente quale sia il file di configurazione giusto per la versione di Getty_ps che si sta utilizzando.
-r ritardo
Utilizzando questa opzione si attiva implicitamente la funzione WAITCHAR e si definisce un tempo di ritardo, espresso in secondi, alla visualizzazione del messaggio di richiesta di identificazione, che introduce la procedura di accesso. In pratica, corrisponde anche all'uso della funzione DELAY.
-w stringa
Stabilisce una stringa da attendere prima di iniziare a mostrare l'invito della procedura di accesso e corrisponde all'uso della funzione WAITFOR. Se viene usato in congiunzione all'opzione -r o alla funzione DELAY, allora getty attende il numero di secondi stabilito a partire dal momento in cui la stringa è stata inserita completamente.
-t tempo_massimo
Corrisponde alla funzione TIMEOUT, con cui si può stabilire un tempo massimo, espresso in secondi, per consentire di completare la procedura di accesso, scaduto il quale getty termina di funzionare.
-c file_gettydefs
Questa opzione, usata da sola, permette di fare in modo che getty verifichi la correttezza formale del file /etc/gettydefs
o di altro analogo costruito per lo stesso scopo.
Negli esempi seguenti si fa riferimento prevalentemente a record del file /etc/inittab
, dove getty viene usato senza la presenza di un file di configurazione di linea corrispondente (tutto si vede dalla riga di comando). A questo fa eccezione l'ultimo esempio, che richiama espressamente il file di configurazione di linea.
1:12345:respawn:/sbin/getty tty1
Avvia getty per controllare la linea di terminale /dev/tty1
, cioè la prima console virtuale. La voce del file /etc/gettydefs
non viene definita, utilizzando in modo predefinito il primo record, che dovrebbe corrispondere alla voce VC. Anche il terminale non viene definito e probabilmente si utilizza il nome unknown.
1:12345:respawn:/sbin/getty tty1 VC linux
Come nell'esempio precedente, con la differenza che viene indicata esplicitamente la voce del file /etc/gettydefs
e il nome del terminale (linux).
s1:2345:respawn:/sbin/getty ttyS1 DT19200 vt100
Avvia getty per controllare la seconda linea seriale, /dev/ttyS1
, a cui così si può connettere un terminale seriale normale (senza modem). All'interno del file /etc/gettydefs
viene selezionata la voce DT19200, che indica una velocità di 19 200 bit/s per un Dumb terminal (la sigla «DT» sta appunto per questo). Il tipo di terminale utilizzato è stato vt100 corrispondente al più semplice e comune.
s1:2345:respawn:/sbin/getty -d /etc/default/getty.ttyS1 ttyS1 DT19200 vt100
Come nell'esempio precedente, definendo esplicitamente un file di configurazione di linea: /etc/default/getty.ttyS1
.
uugetty [opzioni] linea [velocità [tipo] ]
uugetty si comporta in modo analogo a getty (con la stessa sintassi e le stesse opzioni), con la differenza fondamentale che utilizza lo stesso sistema per la condivisione e il blocco delle porte seriali, usato dai programmi UUCP. Ciò costituisce uno standard importante, usato anche da altri programmi, consentendo di determinare se una linea (il dispositivo corrispondente) è libera prima di impegnarla. (2)
In pratica uugetty viene usato tutte le volte che entra in gioco il modem.
Si è accennato al fatto che, in generale, i programmi Getty utilizzano un paio di file comuni per la configurazione delle linee e per definire il messaggio introduttivo di invito della procedura di accesso.
Inoltre, generalmente è a carico di questi programmi l'aggiornamento del file /var/run/utmp
, che viene descritto nella sezione 53.2.5.
Il file /etc/issue
viene usato per emettere un messaggio introduttivo prima dell'avvio della procedura di accesso da parte dei programmi Getty. Può utilizzare alcuni codici di escape per ottenere effetti particolari. Questi codici dipendono dall'interpretazione del programma Getty che li utilizza. In particolare, l'elenco della tabella 51.2 è adatto sia a agetty che a mingetty, quello della tabella 51.3 è adatto solo ai programmi di Getty_ps, mentre quello della tabella 51.4 è adatto solo a Mgetty+Sendfax.
Tabella 51.2. Elenco dei codici che agetty e mingetty riconoscono nel file /etc/issue
.
Codice | Descrizione |
\b | Inserisce la velocità della linea utilizzata. |
\d | Inserisce la data. |
\s | Inserisce il nome del sistema operativo. |
\l | Inserisce il nome della linea di terminale utilizzata. |
\m | Inserisce il nome dell'architettura della macchina. |
\n | Inserisce il nome dell'elaboratore: hostname. |
\o | Inserisce il nome di dominio dell'elaboratore. |
\r | Inserisce il numero di rilascio del sistema operativo. |
\t | Inserisce l'orario. |
\u | Inserisce il numero di utenti connessi. |
\U | Come \u, ma aggiunge la parola user o users. |
\v | Inserisce la versione del sistema operativo. |
Tabella 51.3. Elenco dei codici che Getty_ps riconosce all'interno del file /etc/issue
.
Codice | Descrizione |
\\ | Inserisce la barra obliqua inversa (\). |
\b | Inserisce il codice <BS> (backspace). |
\c | Alla fine di una stringa previene l'inserimento di una nuova riga. |
\f | Inserisce il codice <FF> (formfeed). |
\n | Inserisce il codice <LF> (linefeed). |
\r | Inserisce il codice <CR> (carriage return). |
\s | Inserisce uno spazio singolo (<SP>). |
\t | Inserisce una tabulazione (<HT>). |
\n | Inserisce il carattere corrispondente al numero decimale n. |
\0m | Inserisce il carattere corrispondente al numero ottale m. |
\0xh | Inserisce il carattere corrispondente al numero esadecimale h. |
\ | Alla fine di una riga rappresenta la continuazione su quella successiva. |
\@ | Inserisce un simbolo @. |
@@ | Inserisce un simbolo @. |
@b | Inserisce la velocità della linea utilizzata. |
@d | Inserisce la data. |
@l | Inserisce il nome della linea di terminale utilizzata. |
@s | Inserisce il nome di sistema. |
@t | Inserisce l'orario. |
@u | Inserisce il numero di utenti connessi. |
@v | Inserisce la versione. |
Tabella 51.4. Elenco dei codici di escape e dei parametri utilizzabili all'interno del file /etc/issue
quando si utilizza Mgetty+Sendfax.
Codice | Descrizione |
@ | Il nome del sistema. |
\n | Inserisce il codice <LF> (linefeed). |
\r | Inserisce il codice <CR> (carriage return). |
\g | Inserisce il codice <BEL> (bell). |
\v | Inserisce una tabulazione verticale (<VT>). |
\t | Inserisce una tabulazione orizzontale (<HT>). |
\f | Inserisce il codice <FF> (formfeed). |
\P | Inserisce il nome del dispositivo del terminale (ttySn). |
\L | Inserisce il nome del dispositivo del terminale (ttySn). |
\I | Inserisce la stringa CONNECT... restituita dal modem. |
\S | Inserisce la velocità della porta seriale. |
\N | Inserisce il numero di utenti connessi. |
\U | Inserisce il numero di utenti connessi. |
\C | Inserisce la data completa del sistema. |
\D | Inserisce la data del sistema. |
\T | Inserisce l'ora del sistema. |
\n | Inserisce il carattere corrispondente al numero decimale n. |
\0m | Inserisce il carattere corrispondente al numero ottale m. |
\0xh | Inserisce il carattere corrispondente al numero esadecimale h. |
Dal momento che esistono differenze così grandi tra i vari programmi Getty per i codici di escape utilizzabili nel file /etc/issue
, l'unico modo per predisporne una versione standard unificata, è quello di fare a meno di questi. Alcune distribuzioni GNU/Linux, a questo proposito, predispongono il file /etc/issue
attraverso la procedura di inizializzazione del sistema.
Il file /etc/gettydefs
contiene informazioni utilizzate dai programmi Getty per definire la velocità e altre impostazioni per una linea particolare. Le voci contenute in questo file servono anche per definire l'aspetto dell'invito della procedura di accesso (il prompt del login), in aggiunta al messaggio di pubblicazione (/etc/issue
, o ciò che ne fa la funzione), e la voce da utilizzare come successiva, nel caso di ricezione di un carattere break.
La definizione dell'impostazione della linea avviene in due fasi: inizialmente, prima di fare apparire l'invito della procedura di accesso, quindi subito prima di avviare /bin/login
. Questa configurazione è la parte più difficile, ma spesso è sufficiente utilizzare il file /etc/gettydefs
già esistente, al massimo ritoccando qualcosa che non riguarda questa fase di definizione della linea. In ogni caso, la descrizione completa dei valori che possono essere utilizzati è ottenibile da termios(3).
Il file /etc/gettydefs
ha una struttura particolare: è composto da voci rappresentate da righe necessariamente seguite da una riga vuota (soltanto una); inoltre le righe che iniziano con il carattere # sono ignorate e trattate come commenti. È importante chiarire che le righe vuote non sono trattate come commenti: dopo una riga contenente una voce, si deve trovare esattamente una riga vuota; se dovessero essercene di più, la lettura del file verrebbe interrotta, ignorando di fatto le voci successive.
Le righe che descrivono una voce particolare sono suddivise in campi, secondo la sintassi seguente:
etichetta# opzioni_iniziali # opzioni_finali # prompt #etichetta_successiva
Come si può osservare, i vari campi sono riconoscibili per la presenza del simbolo # come elemento di separazione. I campi vengono usati nel modo seguente:
etichetta
Si tratta di un nome che identifica la voce, che viene usato nella riga di comando del programma Getty per farvi riferimento. Tradizionalmente, il nome usato contiene un qualche riferimento alla velocità da utilizzare per la comunicazione. Questo nome è seguito immediatamente dal simbolo # in modo da non includere spazi superflui nel nome stesso.
opzioni_iniziali
Si tratta di una stringa contenente una serie di opzioni rappresentate da nomi particolari, spaziati liberamente. Ciò serve a definire l'impostazione della linea prima che questa venga utilizzata, a meno che il programma Getty abbia ricevuto l'indicazione di un tipo di terminale, solitamente attraverso la riga di comando, dalle cui caratteristiche estrapolare tale informazione.
opzioni_finali
Si tratta di una stringa contenente una serie di opzioni rappresentate da nomi particolari, spaziati liberamente. Ciò serve a definire l'impostazione della linea subito prima che venga avviato il programma /bin/login
.
prompt
Definisce la stringa da utilizzare come invito della procedura di accesso. Questa stringa non sostituisce il messaggio di pubblicazione (issue), ma si aggiunge a questo, alla fine. Generalmente si tratta semplicemente della stringa login:.
La stringa in questione preserva gli spazi e può contenere sequenze di controllo che poi devono essere interpretate dal programma Getty particolare. Generalmente, i programmi Getty che fanno uso di questo file di configurazione, ammettono l'uso degli stessi codici che possono essere inseriti nel file /etc/issue
.
etichetta_successiva
L'ultimo campo è un riferimento a una voce alternativa. Generalmente, quando il programma Getty riceve un carattere break, cerca di gestire la linea nel modo definito dalla voce successiva, indicata da questo nome. Per evitare problemi con gli spazi, questo nome inizia immediatamente dopo il simbolo #.
È importante ricordare che l'eseguibile getty standard (quello del pacchetto Getty_ps), permette di verificare la correttezza formale di questo file, attraverso l'opzione -c. |
Come si è accennato, la configurazione della linea attraverso le opzioni relative è un'operazione piuttosto delicata, tanto che generalmente conviene usare le impostazioni già presenti nel file /etc/gettydefs
. Tuttavia, la conoscenza delle opzioni più comuni può aiutare a leggere tale file.
È importante tenere a mente che, nella maggior parte dei casi, tali opzioni possono essere usate come sono, oppure precedute da un trattino (-). Nel primo caso si intende l'attivazione della funzione a cui l'opzione fa riferimento, nel secondo la sua disattivazione.
Bvelocità
Sta a indicare la velocità da utilizzare. I valori utilizzabili sono prestabiliti e corrispondono a: B0, B50, B75, B110, B134, B150, B200, B300, B600, B1200, B1800, B2400, B4800, B9600, B19200, B38400, B57600, B115200, B230400. Come si vede esiste anche la velocità nulla, B0, che però acquista un significato speciale: serve a terminare una comunicazione.
SANE
Non si tratta di una modalità particolare, ma di un gruppo di modalità definite simultaneamente. È un modo per definire una serie di caratteristiche nella maniera ritenuta più opportuna dalla consuetudine. Generalmente, SANE appare come seconda opzione, subito dopo l'indicazione della velocità, in modo da permettere la modifica di queste definizioni implicite. Se si desidera approfondire il problema, si tenga presente che SANE dovrebbe coincidere con l'insieme di: BRKINT, IGNPAR, ISTRIP, ICRNL, IXON, OPOST, CS8, CREAD, ISIG, ICANON, ECHO, ECHOK.
CS8
Definisce la comunicazione a 8 bit. Questa opzione è già parte di SANE e viene utilizzata esplicitamente proprio quando SANE mancante.
[-]ISTRIP
Elimina l'ottavo bit. Generalmente questa opzione viene disattivata esplicitamente dopo SANE, che invece la attiva.
[-]CLOCAL
Ignora le linee di controllo del modem. Questa opzione viene usata (attivandola) ogni volta che la linea non viene gestita attraverso un modem.
[-]HUPCL
Abbassa le linee di controllo del modem quando l'ultimo processo chiude il dispositivo corrispondente. In pratica si esegue un aggancio (hung up). Questa opzione viene usata generalmente (attivandola) ogni volta che la linea viene gestita attraverso un modem.
CRTSCTS
Attiva il controllo di flusso hardware, ovvero RTS/CTS. L'assenza di questa opzione fa in modo che venga utilizzato il controllo di flusso software, che richiede un cavo seriale composto da meno fili. Tuttavia, velocità superiori a 9 600 bit/s, pari all'opzione B9600, richiedono generalmente il controllo di flusso hardware.
VC# B9600 SANE CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S login: #VC
Si riferisce alla linea di una console virtuale. Trattandosi di un collegamento che non fa uso né di porta seriale, né di modem, mancano le opzioni HUPCL e CRTSCTS. Si può osservare che il nome del riferimento finale è fatto alla stessa voce, dal momento che non esistono modalità differenti ammissibili.
DT9600# B9600 CS8 CLOCAL # B9600 SANE -ISTRIP CLOCAL #@S login: #DT9600
Si tratta della voce adatta a un terminale connesso direttamente attraverso la porta seriale, senza modem. In questo caso, la bassa velocità, B9600, ammette l'uso di un controllo di flusso software e per questo è assente l'opzione CRTSCTS.
Nei terminali connessi in questo modo, non ha senso la possibilità di modificare automaticamente la velocità della linea, pertanto il riferimento finale è fatto alla stessa voce.
DT38400# B38400 CS8 CLOCAL CRTSCTS # B38400 SANE -ISTRIP CLOCAL (segue)
CRTSCTS #@S login: #DT38400
Questa voce (suddivisa su due righe per motivi tipografici) è analoga a quella dell'esempio precedente, con la differenza fondamentale che la velocità della linea è più elevata. Questo costringe anche all'utilizzo del controllo di flusso hardware.
F38400# B38400 CS8 CRTSCTS # B38400 SANE -ISTRIP HUPCL CRTSCTS <pnewline>#@S login: #F38400
Questa voce si distingue dall'esempio precedente per l'utilizzo di un modem. Per questo è scomparso l'uso dell'opzione CLOCAL e al suo posto è apparsa HUPCL.
38400# B38400 CS8 CRTSCTS # B38400 SANE -ISTRIP HUPCL CRTSCTS <pnewline>#@S login: #19200
Rispetto all'esempio precedente, questa voce ha un riferimento finale a un'altra voce che utilizza una velocità inferiore. Ciò permette di adattare la velocità in modo automatico in funzione dell'invio del carattere break.
Mgetty+Sendfax (3) è un programma Getty tra i più sofisticati, adatto esclusivamente per le connessioni attraverso porte seriali, modem incluso. Qui si intende introdurne il suo funzionamento, in particolare per ciò che riguarda i terminali seriali, senza modem.
Il sistema di condivisione e blocco delle porte seriali adottato da Mgetty+Sendfax è compatibile con lo stile UUCP, quindi può convivere anche con uugetty.
Il problema più importante di Mgetty+Sendfax sta nel fatto che alcuni dettagli sulla sua configurazione possono essere definiti solo in fase di compilazione. Per questo motivo, quando si connette un terminale attraverso una porta seriale (senza l'uso di modem), è necessario utilizzare un cavo Null-modem a sette fili (tabella 538.2) in modo da permettere un controllo di flusso hardware. |
Con GNU/Linux i dispositivi seriali utilizzabili con Mgetty+Sendfax sono esclusivamente quelli che corrispondono al modello |
Teoricamente, Mgetty+Sendfax dovrebbe essere in grado di utilizzare la configurazione definita dal file /etc/gettydefs
. In pratica, ciò potrebbe risultare piuttosto difficile, o inopportuno. Generalmente, il file /etc/mgetty+sendfax/mgetty.config
svolge il ruolo di file di configurazione più importante di Mgetty+Sendfax.
mgetty [opzioni] linea_tty
L'eseguibile mgetty è ciò che rappresenta in pratica Mgetty+Sendfax. Si tratta di un programma di connessione molto complesso. La sua configurazione avviene fondamentalmente attraverso il file /etc/mgetty+sendfax/mgetty.config
, ma alcune caratteristiche possono essere ridefinite anche attraverso le opzioni della riga di comando.
-x n
Permette di definire il livello diagnostico attraverso l'indicazione di un numero, da zero a nove. Zero significa che non si vuole alcuna informazione, mentre il numero nove genera la maggiore quantità di notizie. Tali indicazioni vengono inserite in un file di registrazioni, che dovrebbe corrispondere precisamente a /var/log/log_mg.linea
(per esempio, la connessione con la prima porta seriale dovrebbe generare il file /var/log/log_mg.ttyS0
).
-s velocità
Imposta la velocità della porta.
-r
Definisce in modo esplicito che si utilizza una linea seriale diretta (sette fili) senza la presenza di alcun modem. In pratica, si evita che mgetty inizializzi il modem e si attenda un qualche responso dallo stesso.
-p prompt
Permette di definire una stringa di invito, alternativa al consueto login:, da inviare all'utente che tenta di connettersi. Si possono usare le stesse sequenze di escape che sono ammissibili nel file /etc/issue
, descritte nella tabella 51.4.
-i file_issue
Permette di definire un file per il messaggio di pubblicazione alternativo al solito /etc/issue
.
Gli esempi seguenti si riferiscono a record del file /etc/inittab
, in cui la riga di comando di mgetty definisce il suo funzionamento, supponendo che il file di configurazione /etc/mgetty+sendfax/mgetty.config
non sia stato predisposto.
s1:2345:respawn:/sbin/mgetty -r -s 19200 ttyS1
Attiva mgetty per una connessione diretta, senza modem, a una velocità di 19 200 bit/s, con la seconda porta seriale (/dev/ttyS1
).
s1:2345:respawn:/sbin/mgetty -r -x 9 -s 19200 ttyS1
Come nell'esempio precedente, con la differenza che viene attivato il controllo diagnostico nel file /var/log/log_mg.ttyS1
.
A meno che Mgetty+Sendfax sia stato compilato con una configurazione particolare, può essere gestito un file di registrazioni per ogni porta seriale utilizzata. Il nome di questi file dovrebbe risultare conforme al modello seguente,
/var/log/log_mg.linea
dove la parte finale risulta corrispondere al dispositivo della linea seriale utilizzata (ttyS0, ttyS1, ecc.).
La registrazione non è automatica e dipende dalla richiesta esplicita attraverso l'opzione -x oppure dalla direttiva debug del file /etc/mgetty+sendfax/mgetty.config
.
Come già accennato, Mgetty+Sendfax potrebbe essere predisposto in fase di compilazione per l'utilizzo del registro del sistema per lo scarico di queste informazioni.
Se è presente il file /etc/nologin.tty...
Mgetty+Sendfax impedisce l'accesso attraverso il terminale corrispondente al dispositivo /dev/ttyx
. Nel caso di GNU/Linux, si tratterà dei file di dispositivo seriale /dev/ttyS0
, /dev/ttyS1
, ecc.
Per esempio, se è presente il file /etc/nologin.ttyS1
, non viene consentito l'accesso attraverso un terminale connesso alla seconda porta seriale.
Questo meccanismo permette anche di impedire e di consentire l'accesso in modo dinamico, in dipendenza di altri fattori. Un programma potrebbe verificare periodicamente l'esistenza di condizioni determinate, creando o eliminando il file /etc/nologin.ttyx
corrispondente.
Il file /etc/mgetty+sendfax/mgetty.config
rappresenta la forma di configurazione principale di Mgetty+Sendfax. Le direttive di questo file sono molto semplici; si esprimono indicando una parola chiave seguita da uno spazio bianco e quindi, eventualmente, dal valore che le si vuole abbinare, nella forma seguente:
parola_chiave [valore]
Le righe vuote e quelle che iniziano con il simbolo #, cioè i commenti, sono ignorate. Il contenuto del file è divisibile in sezioni contenenti ognuna la configurazione riferita a ogni porta seriale utilizzata. In pratica, quando si incontra la direttiva port, tutto quello che segue fino alla prossima direttiva port, riguarda solo quella porta seriale particolare. Inoltre, tutto ciò che precede la prima direttiva port, viene inteso come riferito a tutte le porte seriali nel loro insieme.
L'esempio seguente dovrebbe chiarire il meccanismo.
# Direttive globali per tutte le porte. debug 4 # Prima porta seriale port ttyS0 speed 38400
Il valore abbinabile alle varie parole chiave può essere di tipo diverso:
una stringa senza delimitatori;
una sequenza di attesa e invio per il modem, dove le varie stringhe di attesa e invio, a cominciare da quella di attesa iniziale, sono separate tra loro da uno spazio bianco;
un numero intero che può essere interpretato in modo decimale, ottale o esadecimale, a seconda che questo inizi con un numero diverso da zero, con uno zero o con il prefisso 0x;
un valore booleano, esprimibile con le sigle y, yes, t e true, per il valore Vero, n, no, f e false, per il valore Falso.
Una parola chiave può anche non essere seguita da alcun valore; in tal caso si intende che questa non è stata definita, quando possibile, oppure viene inteso come un errore se un assegnamento è obbligatorio, come nel caso dei dati booleani.
Le opzioni della riga di comando di mgetty prendono la precedenza sulla configurazione di questo file.
Le direttive descritte di seguito sono limitate a quelle che possono essere utili nel caso di connessione diretta senza modem.
port dispositivo
Definisce l'inizio di una sezione specifica per una porta seriale particolare, identificata attraverso il nome del dispositivo.
speed velocità
Specifica la velocità della porta seriale attraverso l'indicazione di un numero intero. È importante che il numero indicato esprima una velocità valida. Corrisponde all'uso dell'opzione -s.
direct {yes|no}
Se attivato (yes) fa in modo che Mgetty+Sendfax tratti la linea come un collegamento diretto, senza la presenza di un modem. Corrisponde all'uso dell'opzione -r.
debug livello_diagnostico
Definisce il livello di dettaglio dei messaggi diagnostici inseriti nel file delle registrazioni, solitamente /var/log/log_mg.ttyS*
. Il livello si esprime con un numero da zero (nessuna indicazione) a nove (massimo dettaglio). Corrisponde all'uso dell'opzione -x.
term tipo_di_terminale
Definisce il nome del terminale da utilizzare per inizializzare la variabile di ambiente TERM.
port ttyS1
Definisce l'inizio di una sezione specifica per la seconda porta seriale (/dev/ttyS1
).
speed 38400
Definisce la velocità della porta seriale a 38 400 bit/s.
direct yes
Specifica che si tratta di una connessione diretta senza modem.
debug 4
Fissa un livello diagnostico intermedio.
term vt100
Indica il tipo del terminale come vt100.
L'esempio seguente mostra il file mgetty.config
e il record di /etc/inittab
necessario ad attivare la prima porta seriale per una connessione diretta senza modem.
# /etc/mgetty+sendfax/mgetty.config # Configura la seconda porta seriale port ttyS0 direct yes debug 9 speed 57600 term vt100
# /etc/inittab #... 7:2345:respawn:/sbin/mgetty ttyS0
Il file /etc/mgetty+sendfax/login.config
permette di distinguere la modalità di accesso a seconda del nominativo-utente utilizzato. La documentazione standard di questo file è contenuta semplicemente nei commenti dell'esempio che viene distribuito assieme a Mgetty+Sendfax. In generale, il file è composto da record corrispondenti a righe contenenti dei campi distinti in base alla presenza di uno o più caratteri di spaziatura orizzontale (spazi e tabulazioni), secondo la sintassi seguente:
nominativo_utente identità_utente voce_utmp programma_login [argomenti_del_programma_login...]
Inoltre, come consuetudine diffusa, le righe bianche, o vuote, assieme a quelle che iniziano con il simbolo #, sono ignorate. I campi hanno il significato seguente:
nominativo_utente
rappresenta il nome utilizzato per accedere, o un gruppo di nomi se inizia o termina con un asterisco (*), indicando in questo modo, rispettivamente, i nomi che terminano o iniziano con la stringa indicata;
identità_utente
rappresenta il nominativo-utente del sistema (secondo quanto contenuto nel file /etc/passwd
) che si vuole sia utilizzato per avviare il programma della procedura di accesso;
voce_utmp
rappresenta la voce da inserire nel file /var/run/utmp
, in pratica ciò che appare quando si utilizza il comando who;
programma_login
rappresenta il programma da utilizzare per la procedura di accesso e può essere seguito da un numero indefinito di argomenti.
Per iniziare a comprendere il senso di queste informazioni, basti pensare che è mgetty a ricevere il nome inserito dall'utente che vuole accedere e, in base a questo, può selezionare un comportamento differente. Precisamente:
inserisce una voce nel file /var/run/utmp
, utilizzando per questo il nominativo indicato nel terzo campo (voce_utmp);
cambia l'utente attivo facendo in modo che coincida con quello specificato nel secondo campo (identità_utente);
esegue il programma indicato nel quarto campo, con gli argomenti indicati eventualmente nei campi successivi.
Il secondo e il terzo campo, ovvero identità_utente e voce_utmp, possono contenere un trattino (-) a indicare che per questi dati non viene fissato alcun valore; il terzo campo, voce_utmp, può contenere il simbolo @ che sta a rappresentare lo stesso nome utilizzato per l'identificazione attraverso la procedura di accesso. Nello stesso modo, se appare il simbolo @ tra gli argomenti del programma della procedura di accesso, questo viene sostituito con il nominativo utilizzato effettivamente per accedere.
* - - /bin/login @
Questa è la direttiva predefinita, con cui, per ogni nominativo usato per accedere viene utilizzato il programma /bin/login
seguito dallo stesso nominativo-utente, rappresentato dal simbolo @. In generale, questo record va posto alla fine del file.
marameo-maramao - - /bin/login daniele
Questa direttiva rappresenta una variante dell'esempio precedente, in cui si fa in modo che un utente acceda utilizzando uno pseudonimo. In questo caso si deve accedere utilizzando il nome marameo-maramao per essere riconosciuti come l'utente daniele.
marameo nobody - /bin/sh
Questa direttiva permette di accedere con il nome marameo, senza la richiesta di una parola d'ordine. Chi accede in questo modo ottiene i privilegi dell'utente nobody.
marameo - - /bin/false
In questo modo, chi accede con il nome marameo non può fare nulla, perché invece di /bin/login
viene avviato /bin/false
che blocca di fatto ogni attività.
A fianco dei programmi Getty visti fino a questo punto, ne esistono altri meno complessi e realizzati per esigenze specifiche. In particolare, mingetty e agetty non richiedono file di configurazione, a parte /etc/issue
.
mingetty [opzioni] console_virtuale
mingetty (4) è un programma Getty minimo, per l'accesso esclusivo attraverso console virtuali di GNU/Linux. Per questo, è indicato particolarmente per risparmiare memoria nei sistemi minimi e non richiede file di configurazione, a parte il messaggio di pubblicazione nel file /etc/issue
.
--noclear
Non ripulisce lo schermo prima di avviare la procedura di accesso.
--long-hostname
Visualizza il nome completo dell'elaboratore all'atto dell'attivazione della procedura di accesso.
Gli esempi seguenti si riferiscono a record del file /etc/inittab
.
1:12345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6
Questi record attivano le prime sei console virtuali in corrispondenza dei livelli di esecuzione da due a cinque. In particolare, la prima console virtuale viene attivata anche con il livello uno.
agetty [opzioni] velocità[,...] porta [variabile_term]
agetty (5) è un programma Getty ridotto, per l'accesso attraverso console virtuali di GNU/Linux e le porte seriali. Non richiede file di configurazione, a parte il messaggio di pubblicazione nel file /etc/issue
, mentre le impostazioni eventuali vanno date attraverso la riga di comando.
porta
Si tratta del nome del file di dispositivo che identifica il terminale da utilizzare. È riferito alla directory /dev/
, quindi, per esempio, tty1 si riferisce al file di dispositivo /dev/tty1
.
velocità
È un elenco, separato da virgole, di una o più velocità di trasmissione espresse in bit al secondo (simbolo: bit/s). Ogni volta che agetty riceve un carattere break, seleziona la velocità successiva nell'elenco. Dopo l'ultima, riprende dalla prima.
Di solito, si preferisce indicare le velocità in ordine decrescente.
variabile_term
L'ultimo argomento può essere il valore da assegnare alla variabile TERM che poi viene ereditata da login e dalla shell.
-h
Abilita il controllo di flusso hardware (RTS/CTS).
-i
Non visualizza il contenuto del file /etc/issue
(e di nessun altro equivalente) prima di emettere l'invito della procedura di accesso. Ciò può essere utile nel caso in cui, per motivi tecnici, sia preferibile evitare di inviare troppi dati prima della richiesta di identificazione che introduce la procedura di accesso.
-f file
Permette di indicare un nome diverso da quello predefinito per il file contenente il messaggio di pubblicazione (quello che di solito è /etc/issue
).
-I stringa_di_inizializzazione
Permette di inviare al terminale, o al modem, una stringa di inizializzazione, prima di qualunque altro dato. Per indicare caratteri speciali non stampabili, si può usare la forma ottale di tre cifre numeriche precedute da una barra obliqua inversa (\).
-l programma_di_login
Permette di indicare un programma per la procedura di accesso diverso da quello predefinito: /bin/login
.
-m
Fa in modo che agetty tenti di determinare la velocità da utilizzare dal messaggio di stato CONNECT dei modem compatibili Hayes.
-n
Fa in modo che non venga richiesta l'identificazione attraverso la procedura di accesso. Può avere senso questa modalità se si utilizza anche l'opzione -l per accedere al sistema in modo diverso.
-t tempo_massimo
Permette di definire un tempo massimo di attesa, espresso in secondi. Se l'accesso non viene effettuato entro il tempo previsto, si interrompe la comunicazione. Di solito si utilizza questa opzione solo per le connessioni remote attraverso l'uso del modem.
-L
Specifica in modo esplicito che si tratta di una linea locale, senza che ci sia la necessità di individuare la presenza di una portante. Può essere utile, se si utilizza una linea seriale locale che non dispone del segnale di portante.
-w
Attende di ricevere dall'utente o dal modem un segnale di <CR> o <LF>, prima di inviare il messaggio di pubblicazione (di solito si tratta del contenuto del file /etc/issue
) e la richiesta di identificazione per la procedura di accesso. L'uso di questa opzione è molto importante se si utilizza anche l'opzione -I.
Un terminale seriale può essere predisposto semplicemente utilizzando un elaboratore con un sistema operativo qualunque, purché provvisto di software necessario a emulare un terminale seriale. Per fare un esempio con lo stesso GNU/Linux, si può utilizzare il programma Minicom.
Il parametro più importante che può essere modificato è la velocità espressa in bit al secondo, che deve essere stabilita precisamente e in modo identico tra Getty e il programma di emulazione di terminale all'altro capo del filo.
Il controllo di flusso dovrebbe essere sempre di tipo hardware, cioè RTS/CTS. Eccezionalmente si può usare un controllo di flusso software, cioè XON/XOFF, per esempio quando si è costretti a utilizzare un cavo seriale a tre fili; ciò purché Getty sia in grado di operare in questo modo e che la velocità di comunicazione sia sufficientemente bassa da permetterlo (da 9 600 bit/s in giù).(6)
Come ultimo problema, occorre verificare per quali tipi di terminali standard può essere configurato il programma di emulazione. Generalmente, tutti i programmi di questo tipo dovrebbero essere in grado di operare come terminali vt100; se però il programma a disposizione offre di meglio, è sempre il caso di sfruttare tali caratteristiche.
Per fare un esempio semplice e comune, si immagini di volere predisporre un terminale seriale utilizzando Getty_ps da una parte e Minicom dall'altra, collegando i due elaboratori con un cavo seriale adatto per il controllo di flusso hardware (sette fili). Nell'elaboratore in cui è in funzione Getty si utilizza la prima porta seriale, mentre in quello che funge da terminale si vuole utilizzare la seconda porta seriale. La velocità di trasmissione sia di 38 400 bit/s. Infine, per evitare problemi di compatibilità, si decide di utilizzare l'emulazione per il tipo di terminale vt100.
La prima cosa da fare è predisporre il file /etc/gettydefs
nell'elaboratore da usare per ricevere il collegamento attraverso il programma Getty. Normalmente dovrebbe essere già presente la direttiva seguente (qui appare divisa su due righe per motivi tipografici).
DT38400# B38400 CS8 CLOCAL CRTSCTS # B38400 SANE -ISTRIP CLOCAL (segue)
CRTSCTS #@S login: #DT38400
Quindi occorre modificare il file /etc/inittab
in modo da avviare il programma getty di Getty_ps utilizzando questa voce del file di configurazione per la prima porta seriale, specificando l'utilizzo di un terminale vt100.
s1:2345:respawn:/sbin/getty ttyS0 DT38400 vt100
Dall'altro capo, nell'elaboratore che funge da terminale, occorre configurare Minicom (l'eseguibile corrispondente è minicom) almeno per ciò che riguarda la connessione seriale (in particolare, è stato stabilito l'uso della seconda porta seriale). Sotto questo punto di vista, Minicom è descritto meglio nel capitolo 128, in ogni caso, alla fine, la maschera della configurazione della porta seriale dovrebbe apparire nel modo seguente:
A - Serial Device : /dev/ttyS1 B - Lockfile Location : /var/lock C - Callin Program : D - Callout Program : E - Baud/Par/Bits : 38400 8N1 F - Hardware Flow Control : Yes G - Software Flow Control : No
Si osservi la scelta della seconda porta seriale, /dev/ttyS1
; si osservi la velocità, la dimensione dei caratteri (data bit), la parità e la durata dello stop (8N1); infine si osservi l'attivazione del controllo di flusso hardware.
Minicom opera normalmente emulando il terminale vt102, compatibile con il tipo vt100.
L'uso di un terminale rispetto a una console comporta delle conseguenze operative non trascurabili, legate al comportamento della tastiera e alla visualizzazione dei caratteri sul video.
Questo problema era già stato presentato nel capitolo 49, nelle sezioni dedicate ai sistemi Termcap e Terminfo.
In pratica, la visualizzazione di certi simboli può variare, specialmente le bordature vengono sostituite con caratteri normali; inoltre, alcuni tasti funzionali e alcune combinazioni di tasti diventano inutilizzabili.
Davi S. Lauer, Greg Hankins, Serial HOWTO
<http://www.linux.org/docs/ldp/howto/HOWTO-INDEX/howtos.html>
daniele @ swlibero.org
1) Getty_ps software non libero: non è consentita la commercializzazione a scopo di lucro e in generale non è consentito alcun profitto economico derivante dall'uso o dalla riproduzione dello stesso
2) Per comprendere il problema, basta immaginare ciò che accade quando si utilizza lo stesso modem, sia per una connessione attraverso terminale remoto (da linea commutata), sia come fax: prima di trasmettere un fax occorre almeno verificare che il modem sia libero (in pratica si deve controllare la porta seriale corrispondente).
3) Mgetty+Sendfax software libero con licenza speciale che scade: dopo due anni dalla data di un'edizione particolare, si ricade nella licenza GNU GPL
5) Agetty non specifica alcuna condizione, tuttavia viene indicato come «distribuibile liberamente»
6) È il caso di ricordare che mgetty è quasi sempre predisposto per operare esclusivamente con un controllo di flusso hardware.
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome getty.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]