[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]


Capitolo 51.   Getty

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.

Nome Descrizione
getty Attiva la gestione della console o del terminale.
uugetty Programma Getty specializzato per le porte seriali.
/etc/issue Messaggio introduttivo precedente alla procedura di accesso.
/etc/gettydefs Configurazione della linea.
mgetty Programma Getty specializzato per l'uso del modem.
/etc/mgetty+sendfax/mgetty.config Configurazione principale di Mgetty+Sendfax.
/etc/mgetty+sendfax/login.config Configurazione dell'accesso per quanto riguarda Mgetty+Sendfax.
mingetty Programma Getty minimo per le console virtuali di GNU/Linux.
agetty Programma Getty ridotto.

51.1   Principio di funzionamento

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:

Il programma Getty tipico fa uso di alcuni file:

51.1.1   Utilizzo di un programma Getty

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.

51.2   Getty_ps

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.

51.2.1   File delle registrazioni

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.

51.2.2   Configurazione di linea

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

Alcune direttive

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.

51.2.3   # getty

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.

Alcune opzioni

-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.

Esempi

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.

51.2.4   # uugetty

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.

51.3   File comuni

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.

51.3.1   /etc/issue

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.

51.3.2   /etc/gettydefs

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:

etichettaopzioni_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:

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

Quando il programma Getty non trova la voce richiesta nel file /etc/gettydefs, utilizza la prima voce esistente. Per questo è importante che tale voce sia scelta con cura. Generalmente si tratta di quella adatta alle console virtuali: VC.

Alcune impostazioni di linea

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.

Esempi
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.

51.4   Mgetty+Sendfax

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.

Mgetty+Sendfax utilizza un metodo particolare per impedire gli accessi attraverso porte determinate. È sufficiente che sia presente il file /etc/nologin.ttyx per impedire che possa essere utilizzato il terminale /dev/ttyx corrispondente. Il contenuto del file non conta.

Con GNU/Linux i dispositivi seriali utilizzabili con Mgetty+Sendfax sono esclusivamente quelli che corrispondono al modello /dev/ttyS* (ttyS0, ttyS1, ecc.).

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.

51.4.1   # mgetty

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.

Alcune opzioni

-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.

Esempi

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.

51.4.2   /var/log/log_mg.ttyS*

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.

51.4.3   /etc/nologin.ttyS*

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.

51.4.4   /etc/mgetty+sendfax/mgetty.config

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 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.

Alcune direttive

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.

Esempi
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

51.4.5   /etc/mgetty+sendfax/login.config

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:

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:

  1. inserisce una voce nel file /var/run/utmp, utilizzando per questo il nominativo indicato nel terzo campo (voce_utmp);

  2. cambia l'utente attivo facendo in modo che coincida con quello specificato nel secondo campo (identità_utente);

  3. 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.

Esempi
*       -       -       /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à.

51.5   Altri programmi Getty

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.

51.5.1   # mingetty

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.

Opzioni

--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.

Esempi

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.

51.5.2   # agetty

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.

Argomenti

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.

Alcune opzioni

-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.

51.6   Predisposizione di un terminale seriale.

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.

In linea di massima, i vari programmi Getty sono predisposti per la consuetudine diffusa di usare una codifica 8N1, ovvero: 8 bit dati senza alcuna parità e un bit di stop. Questa impostazione va mantenuta sempre, a meno di sapere esattamente quello che si sta facendo.

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.

51.6.1   Descrizione di un esempio

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.

51.6.2   Conseguenze

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.

51.7   Riferimenti

Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini -- 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

4) Mingetty   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]