Previous Next Contents

7. Serielle Drucker unter lpd

7.1 Einstellungen der printcap

Lpd besitzt 5 Attribute, die in der /etc/printcap eingestellt werden können, um die Einstellungen des seriellen Ports zu kontrollieren. Man lese dazu die printcap man page und beachte die Bedeutungen von br#, fc#, xc#, fs# und xs#. Die letzten vier dieser Attribute sind Bitmaps, die für die Einstellungen dieses Ports stehen. Das br#-Attribut ist einfach die Baudrate, z.B. `br#9600'.

Es ist sehr einfach, die stty-Einstellungen in printcap Flags zu übersetzen. Wenn nötig, möge man nun die man page für stty betrachten.

Man benutzt stty um den Druckerport einzustellen, so daß man ein File an ihn `catten' kann. So kann `stty -a' aussehen:

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

Die einzigen Unterschiede zwischen diesem und der Initialisierung beim Booten sind -clocal, -crtscts und ixon. Die benötigten Einstellungen können auch anders sein, abhängig von der Flußkontrolle des Druckers.

Man kann stty auf eine etwas ungewöhnliche Weise verwenden. Weil stty auf dem Terminal, das mit seinen Standardinput verbunden ist, arbeitet, kann man damit einen seriellen Port manipulieren, indem man `<' wie oben verwendet.

Sobald die stty-Einstellungen richtig sind, wenn also `cat file > /dev/ttyS2' (in meinem Fall) die Datei an den Drucker schickt, sollte man die Datei /usr/src/linux/include/linux/termios.h betrachten. Diese Datei enthält viele #defines und einige structs (man sollte diese Datei auf den Drucker catten (das funktioniert ja jetzt) und als Notizpapier verwenden). Man betrachte den Abschnitt, der mit

/* c_cflag bit meaning */
#define CBAUD   0000017

anfängt. Dieses Abschnitt listet die Bedeutungen der fc#- und fs#- Teile auf. Es fällt auf, daß die Namen (nach den Baudraten) mit einer der stty-Ausgabeleitungen übereinstimmen. Es wird wirklich leicht...

Einige dieser Einstellungen fangen mit einem - in der stty-Ausgabe an. Wenn man alle diese Nummern aufsummiert (sie sind oktal), erhält man die Bits, die man löschen will. Also ist das die fc#-Einstellung. Natürlich setzt man diese Bits direkt nach dem Löschen, also kann man einfach `fc#0177777' verwenden.

Jetzt macht man das gleiche für die Einstellungen, die kein - vor sich haben. In dem Beispiel sind die wichtigen CS8 (0000060), HUPCL (0002000), und CREAD (0000200). Man beachte auch die Flags für die Baudrate (z.B. 0000015). Man addiert alle zusammen und bekommt im Beispiel 0002275 heraus. Das kommt in die fs#- Einstellung (`fs#02275' funktioniert gut beim Autor).

Man macht das gleiche mit "set" und "clear" für den nächsten Anschnitt der Includedatei, "c_lflag bits". Der Autor mußte nichts einstellen und verwendet deshalb `xc#0157777' und `xs#0'.

7.2 Ältere serielle Drucker die Zeichen verschlucken

Jon Luckey hat festgestellt, daß einige ältere serielle Drucker mit 10-cent seriellen Interfaces und kleinen Buffern wirklich Stopp meinen, wenn sie das mit ihrer Flußkontrolle sagen. Er fand heraus, daß man das abstellen kann, indem man an einer 16550er seriellen Schnittstelle mit setserial den FIFO ausschalten (man muß scheinbar nur den UART-Typ als 8250 einstellen).


Previous Next Contents