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