[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]


36. 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 36.1 elenca i programmi e i file a cui si accenna in questo capitolo.

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.

Tabella 36.1: Riepilogo dei programmi e dei file per l'attivazione dei terminali a caratteri.

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

36.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. 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, e 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.

36.2 Getty_ps

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

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

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

36.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', e a uno dei suoi record fa riferimento l'argomento indicato con il nome «velocità». 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 prevalentemente riferimento 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, e quindi si utilizza in modo predefinito il primo record, che dovrebbe corrispondere alla voce `VC'. Anche il terminale non viene definito, e probabilmente viene utilizzato 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 19200 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'.

36.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, e serve a questi per determinare se una linea (il dispositivo corrispondente) è libera prima di impegnarla. *1*

In pratica `uugetty' viene usato tutte le volte che entra in gioco il modem.

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

36.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 36.2 è adatto sia a `agetty' che a `mingetty', quello della tabella 36.3 è adatto solo ai programmi di Getty_ps, e quello della tabella 36.4 è adatto solo a Mgetty+Sendfax.

Codice Descrizione
\b Inserisce la velocità in baud 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 36.2: Elenco dei codici che `agetty' e `mingetty' riconoscono nel 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 codice decimale n.
\0m Inserisce il carattere corrispondente al codice ottale m.
\0xh Inserisce il carattere corrispondente al codice esadecimale h.
\ Alla fine di una riga rappresenta la continuazione su quella successiva.
\@ Inserisce un simbolo `@'.
@@ Inserisce un simbolo `@'.
@b Inserisce la velocità in baud 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 36.3: Elenco dei codici che Getty_ps riconosce all'interno del file `/etc/issue'.

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 codice decimale n.
\0m Inserisce il carattere corrispondente al codice ottale m.
\0xh Inserisce il carattere corrispondente al codice esadecimale h.

Tabella 36.4: Elenco dei codici di escape e dei parametri utilizzabili all'interno del file `/etc/issue' quando si utilizza Mgetty+Sendfax.

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.

36.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, e poi 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), e 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, e 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-di-login> #<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:

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

---------

B<velocità>

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 quest'ultima è 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 `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, e per questo il riferimento finale è fatto alla stessa voce.

DT38400# B38400 CS8 CLOCAL CRTSCTS # B38400 SANE -ISTRIP CLOCAL 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 
#@S login: #F38400

Questa voce (suddivisa su due righe per motivi tipografici) 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 
#@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.

36.4 Mgetty+Sendfax

Mgetty+Sendfax è 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, e 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 (appendice, tabella B.4) 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.tty...' per impedire che possa essere utilizzato il terminale `/dev/tty...' corrispondente. Il contenuto del file non conta.

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.

36.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, e dovrebbe trattarsi precisamente di `/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 da inviare all'utente che tenta di connettersi, e questo in alternativa al consueto `login:'. Si possono usare le stesse sequenze di escape che sono ammissibili nel file `/etc/issue', descritte nella tabella 36.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 19200, 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'.

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

36.4.3 /etc/nologin.ttyS*

Se è presente il file `/etc/nologin.tty...' Mgetty+Sendfax impedisce l'accesso attraverso il terminale corrispondente al dispositivo `/dev/tty...' In pratica, trattandosi di dispositivi seriali, si tratterà di `/dev/ttyS0', `ttyS1',...

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, e creare o rimuovere il file `/etc/nologin.tty...' corrispondente.

36.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, e 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, e 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 38400 bps.

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

36.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, e 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 diverso comportamento. 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 (`-'), che sta 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 password. 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à.

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

36.5.1 # mingetty

mingetty [<opzioni>] <console-virtuale>

`mingetty' è un programma Getty minimo, per l'accesso esclusivo attraverso console virtuali di GNU/Linux. Per questo, è particolarmente indicato 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.

36.5.2 # agetty

agetty [<opzioni>] <velocità>[,...] <porta> [<variabile-term>]

`agetty' è 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', e tutte le eventuali impostazioni 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 bps. 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'.

36.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 bps), e questa 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 9600 in giù). *2*

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.

36.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 38400 bps. 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 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 112, 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'.

36.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 34, 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.

36.7 Riferimenti

---------------------------

Appunti Linux 2000.04.12 --- Copyright © 1997-2000 Daniele Giacomini --  daniele @ pluto.linux.it


1.) Per comprendere il problema, basta immaginare ciò che accade quando si utilizza lo stesso modem, sia per una connessione attraverso terminale remoto (attraverso linea commutata) che come fax: prima di trasmettere un fax occorre almeno verificare che il modem sia libero (in pratica si deve controllare la porta seriale corrispondente).

2.) È il caso di ricordare che `mgetty' è quasi sempre predisposto per operare esclusivamente con un controllo di flusso hardware.


[inizio] [indice generale] [precedente] [successivo] [indice analitico] [contributi]