Le stampanti seriali sono piuttosto difficili da usare sotto lpd.
Lpd fornisce cinque attributi da configurare in /etc/printcap per controllare le impostazioni della porta seriale a cui è collegata la stampante. Si legga la pagina di manuale di printcap e si prenda nota del significato degli attributi br#, fc#, xc#, fs# e xs#. Gli ultimi quattro sono mappe di bit che indicano le impostazioni della porta. L'attributo br# è semplicemente il baud rate, ad esempio " br#9600".
È molto semplice tradurre le impostazioni stty in attributi per printcap. Se ce n'è bisogno, si guardi ora la pagina di manuale di stty.
stty può essere usato per configurare la porta della stampante, in modo da poter 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 |
In realtà l'uso di stty è un po' strano. Dato che stty opera sul terminale collegato al suo standard input, lo si usa per manipolare una data porta seriale utilizzando il carattere "<" come sopra.
Dopo aver configurato correttamente le impostazioni di stty, in modo che «cat file > /dev/ttyS2» (nel mio caso) invii il file alla stampante, si guardi il file /usr/src/linux/include/asm-i386/termbits.h. Questo file contiene molti #defines ed alcune strutture (si potrebbe farne il cat sulla stampante (che ormai funziona) e usarlo come punto di partenza). Si veda la sezione che comincia con
/* c_cflag bit meaning */ #define CBAUD 0000017 |
Annotare quali di questi settaggi sono preceduti da un - nell'output di stty e sommare tutti questi numeri (sono in ottale). Questo rappresenta i bit che vanno azzerati, così il risultato è la capacità di fc# . Naturalmente ci si ricordi che poi i vari bit verranno impostati direttamente dopo essere stati azzerati, pertanto si potrà semplicemente usare "fc#0177777" (io lo faccio).
Ora fare lo stesso per quei settaggi (elencati in questa sezione) che non hanno un - davanti nell'output di stty. Nell'esempio i più importanti sono CS8 (0000060), HUPCL (0002000), e CREAD (0000200). Controllare anche il flag relativo al baud rate (il mio è 0000015). Sommare tutti questi numeri, ottenendo nell'esempio 0002275. Questo numero viene messo nelle capacità di fs# ("fs#02275" funziona correttamente nell'esempio).
Ripetere il procedimento di azzeramento e impostazione dei bit nella successiva sezione del file di include, "c_lflag bits". Nell'esempio non c'è niente da impostare, quindi vengono usati " xc#0157777" e "xs#0".
Jon Luckey ha evidenziato come alcune stampanti seriali con interfacce da due lire e buffer molto piccoli intendono veramente fermarsi quando lo indicano attraverso il controllo di flusso. Jon ha scoperto che disabilitando il buffer FIFO della porta seriale 16550 tramite setserial si risolve il problema della perdita dei caratteri (in pratica specificando il tipo UART della porta seriale come 8250).