Inhalt

16. Serielle Drucker unter lpd

16.1 Einstellungen in der printcap

lpd besitzt 5 Attribute, die in der /etc/printcap eingestellt werden können, um die Einstellungen einer seriellen Schnittstelle zu kontrollieren, an die der Drucker angeschlossen ist. Die Beschreibung der Attribute ist in der printcap Manual Page zu finden, wobei man vor allem die Bedeutung von br#, fc#, xc#, fs# und xs# beachten sollte. Die letzten vier dieser Attribute sind Bitmaps, die für die Einstellungen dieser Schnittstelle 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, studieren Sie nun bitte die Manual Page von stty.

Benutzen Sie stty, um die Schnittstelle zum Drucker so einzustellen, daß man eine Datei über sie mit cat an den Drucker schicken kann, und diese dann korrekt ausgegeben wird. So könnte die Ausgabe von `stty -a' für eine Schnittstelle z.B. aussehen.

# 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 diesen Einstellungen und der Initialisierung beim Booten sind -clocal, -crtscts und ixon. Die Ausgabe bei ihrer Schnittstelle kann durchaus anders aussehen, da dieses von der Flußkontrolle Ihres Druckers abhängt.

Wirklich verwendet wird stty auf eine etwas ungewöhnliche Weise. Ursprünglich war stty dafür gedacht, die Einstellungen eines Terminals anzupassen. Deswegen gibt stty die Steuerzeichen auf der Standardausgabe aus. Um mit dem Programm die Einstellungen einer beliebigen seriellen Schnittstelle zu manipulieren, muß deshalb wie oben das <-Zeichen verwendet werden.

Sobald die stty-Einstellungen richtig sind, man also mit

cat datei > /dev/ttyS2
eine Datei an der Drucker, hier an /dev/ttyS2, schicken kann, sollte man die Datei /usr/src/linux/include/asm-i386/termbits.h betrachten. Diese Datei enthält viele #define- und einige struct-Zeilen. Man betrachte den Abschnitt, der mit

/* c_cflag bit meaning */
#define CBAUD   0000017

anfängt. Dieser Abschnitt listet die Bedeutungen der fc#- und fs#-Teile auf. Ihnen wird auffallen, daß die Namen (nach den Baudraten) mit einer der stty-Ausgabeleitungen übereinstimmen. Habe ich nicht gesagt, daß es leicht sein würde?

Achten Sie auf die Einstellungen, die mit einem »-« in der stty-Ausgabe anfangen. 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. Erinnern Sie sich daran, daß Sie diese Bits direkt nach dem Löschen setzen werden, also können Sie einfach fc#0177777 verwenden.

Jetzt macht man das gleiche für die Einstellungen, die kein »-« vor sich haben. In dem Beispiel sind die wichtigsten CS8 (0000060), HUPCL (0002000) und CREAD (0000200). Beachten Sie auch die Flags für die Baudrate. Zählen Sie alle zusammen und Sie bekommen in diesem Beispiel 0002275 heraus. Dieses ist der Wert für die fs#-Option.

Machen Sie das gleiche mit set und clear für den nächsten Abschnitt der Includedatei, "c_lflag bits".

16.2 Ältere serielle Drucker, die Zeichen verschlucken

Jon Luckey hat festgestellt, daß einige ältere serielle Drucker mit sehr schlechten seriellen Interfaces und kleinen Buffern wirklich Stop meinen, wenn sie das mit ihrer Flußkontrolle sagen. Er fand heraus, daß sich das Problem lösen läßt, wenn der FIFO-Buffer des 16550-UARTs mit setserial ausgeschaltet wird. Hierfür gibt man einfach den UART-Typ 8250 an.


Inhalt