Avanti Indietro Indice

7. Le stampanti seriali e lpd

7.1 Configurazione di printcap.

Lpd prevede cinque attributi da configurare in /etc/printcap/ per controllare il funzionamento della porta seriale a cui e' collegata la stampante. Leggete la man page di printcap e notate il significato degli attributi br#, fc#, xc#, fs# e xs#. Gli ultimi quattro sono mappe di bit che indicano i settaggi della porta. L'attributo br# e' semplicemente il baud rate, ad esempio `br#9600'.

E' molto semplice tradurre i settaggi da stty in attributi per printcap. Se ne avete bisogno date un'occhiata alla man page di stty adesso.

Usate stty per configurare la porta della stampante, in modo che possiate fare il cat di un file sulla porta ed ottenere una stampa corretta. Nel mio caso `stty -a' fornisce le seguenti informazioni:

       dina:/usr/users/andy/work/lpd/lpd# stty -a < /dev/ttyS2
       speed 9600 baud; rows 0; columns 0; line = 0;
       intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
       eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W;
       lnext = ^V; min = 1; time = 0;
       -parenb -parodd cs8 hupcl -cstopb cread -clocal -crtscts
       -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr
       -igncr -icrnl ixon -ixoff -iuclc -ixany -imaxbel
       -opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0
       bs0 vt0 ff0
       -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase
       -tostop -echoprt -echoctl -echoke
       

L'unica differenza tra questo ed il modo in cui la porta e' inizializzata al boot e' data da -clocal, -crtscts, e ixon. Per voi potrebbe essere anche differente, a seconda del modo in cui la vostra stampante fa il controllo di flusso.

In realta' l'uso di stty e' un po' strano. Infatti stty opera sul terminale collegato al suo standard input, lo si usa per manipolare una data porta seriale utilizzaando il carattere '<' come sopra.

Dopo aver configurato correttamente i settaggi di stty, in modo che `cat file > /dev/ttyS2' (nel mio caso) invia il file alla stampante, guardate il file /usr/src/linux/include/linux/termios.h. Contiene molti #defines ed alcune strutture (potreste farne il cat sulla stampante (ormai funziona, no?)). Andate alla sezione che comincia con

      /* c_cflag bit meaning */
       #define CBAUD   0000017

Questa sezione elenca i significati dei bit fc# ed fs#. Noterete che i nomi (dopo il baud rate) coincidono con una delle linee dell'output di stty. Non e' forse facile?

Annotate quali di questi settaggi sono preceduti da un - nell'output di stty. Sommate tutti questi numeri (sono in ottale). Questo rappresenta i bit che dovete azzerare, quindi il risultato e' la vostra capacita' di fc#. Naturalmente ricordate che poi setterete i vari bit direttamente dopo averli azzerati, pertanto potete semplicemente usare `fc#0177777' (io lo faccio).

Ora fate lo stesso per quei settaggi (elencati in questa sezione) che non hanno un - davanti nell'output di stty. Nel mio esempio i piu' importanti sono CS8 (0000060), HUPCL (0002000), e CREAD (0000200). Controllate anche la flag relativa al baud rate (la mia e' 0000015). Sommate tutti questi numeri, nel mio esempio ottenendo 0002275. Questo numero viene messo nelle vostre capacita' di fs# (`fs#02275' funziona correttamente per me).

Fata la stessa cosa di azzeramento e settaggio dei bit nella successiva sezione del file di include, "c_lflag bits". Nel mio caso io non devo settare niente, quindi uso `xc#0157777' e `xs#0'.

7.2 Stampanti seriali antiquate che perdono caratteri.

Jon Luckey ha evidenziato come alcune stampanti seriali con interfacce da due lire e buffer molto piccoli, intendono veramente stop quando indicano cio' attraverso i meccanismi di controllo di flusso. Jon ha scoperto che disabilitando il buffer FIFO della porta seriale 16550 con setserial ha risolto il problema (in pratica e' come se si indicasse a Linux che la porta seriale e' una 8250).


Avanti Indietro Indice