Lpd udostepnia pięć atrybutów, które możesz ustawić w pliku
/etc/printcap, aby kontrolować wszystkie ustawienia portu
szeregowego, do którego dołączona jest drukarka. Przeczytaj stronę
podręcznika systemowego na temat
printcap i
zapamiętaj znaczenia: br#, fc#, xc#,
fs# i xs#. Ostatnie cztery z tych atrybutów to
mapy bitowe oznaczające ustawienia portu. Atrybut br# jest
prędkością: np. br#9600.
Tłumaczenie z postaci stty na printcap jest bardzo proste. Jeśli musisz, to zobacz stronę podręcznika systemowego na temat stty.
Użyj stty, aby ustawić port drukarki, tak żebyś mógł wysłać plik do tego portu (poleceniem cat) i otrzymał poprawny wydruk. Oto co wyświetla polecenie stty -a dla mojego portu drukarki:
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
Jedynymi zmianami między tym, i stanem w jakim port jest
inicjowany podczas startu są -clocal, -crtscts i
ixon. Twój port może mieć inne ustawienia w zaleźności od tego
jak twoja drukarka kontroluje przepływ (flow control).
stty używa się właściwie w dziwny sposób. Ponieważ polecenie
stty operuje na terminalu podłączonym do jego standardowego
wejścia, ty używasz je, aby manipulować danym portem szeregowym
przez użycie znaku < jak powyżej.
Jak już masz dobre ustawienia, tak że cat plik >
/dev/ttyS2 (w moim przypadku) działa, zajrzyj do pliku
/usr/src/linux/include/linux/termios.h. Zawiera on wiele
#define (definicji) i kilka struktur - możesz go sobie
wydrukować (przecież drukarka działa, nie ?) i używać jako
pomocy. Idź do sekcji, która zaczyna się tak:
/* c_cflag bit meaning */ #define CBAUD 0000017
Sekcja ta zawiera znaczenia bitów fc# i fs#. Zauważysz, że nazwy (po ilości bodów) są identyczne z tymi z polecenie stty. A nie mówiłem, że to będzie proste ?
Zobacz, które z tych ustawień mają znak "-" na początku przy poleceniu stty. Zsumuj te wszystkie liczby (są one zapisane w systemie ósemkowym). To będą te bity, które będziesz chciał wyzerować, tak więc wynik jest tym, co masz wpisać do fc#. Pamiętaj oczywiście, że będziesz ustawiał bity zaraz po tym jak je wyzerujesz, tak więc możesz użyć "fc#0177777" (ja tak robię).
Teraz zrób to samo dla tych ustawień, które nie mają znaku "-" na początku w poleceniu stty. W moim przykładzie ważne są CS8 (0000060), HUPCL (0002000) i CREAD (0000200). Zapamiętaj też ustawienie dla swojej prędkości (u mnie jest to 0000015). Zsumuj to wszystko - w moim przykładzie będzie to 0002275. To będzie to, co masz wpisać do fs#. ("fs#02275 działa u mnie.)
Zrób to samo z ustawieniem i zerowaniem dla następnej sekcji pliku nagłówkowego. "c_lflag bits". W moim przypadku nie musiałem niczego ustawiać, tak więc użyłem tylko "xc#0157777" i "xs#0".
Jon Luckey pisze, że u niektórych starszych szeregowych drukarek z interfejsem za 10 centów i małym buforem, stop w kontroli przepływu oznacza rzeczywiste stop dla drukowania. Potem odkrył, że żeby naprawić tę niedogodność wystarczy wyłączyć FIFO w układzie 16550 poleceniem setserial (żeby to zrobić po prostu podajesz typ ukladu uart jako 8250).