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"
.
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.