Lpd tillhandahåller fem attribut vilka du kan sätta i
/etc/printcap för att styra inställningarna av den seriella
port som skrivaren sitter på. Läs
printcap
manualsidan och notera betydelsen av br#, fc#,
xc#, fs# och xs#. De siste fyra av dessa
attribut är bitmaps som indikerar inställningarna för att använda
porten. Till exempel br# atrributet är helt enkelt baudtalet
t.ex. `br#9600
'.
Det är väldigt enkelt att översätta från stty inställningar till printcap argumentinställningar. Om du behöver, titta i manualsidan för stty nu.
Använd stty för att konfigurera skrivarporten så att du kan `cat' en fil till den och den skrivs ut korrekt. Då här ser `stty -a' ut för min skrivarport:
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
De enda skillnaderna mellan denna och det sätt porten initieras vid
systemstarten är -clocal
, -crtscts
, och ixon
. Din port
kan vara annorlunda beroende på hur din skrivare gör flödeskontroll.
Du använder faktiskt stty på ett på någotvis udda sätt. Eftersom stty
kör mot terminalen som är kopplad till dess standard input, använder
du det till manipulera en given serieport genom att använda tecknet
`<
' enligt ovan.
När du väl fått stty inställningarna rätt, så att `cat fil > /dev/ttyS2' (i mitt fall) sänder filen till skrivaren, tittar du i filen /usr/src/linux/include/asm-i386/termbits.h. Denna innehåller en en hel del #defines och några structs. (Du kanske vill `cat'a denna fil till skrivaren (det funkar ju nu, eller hur?) och använda den som ett kladdpapper) Gå till sektionen som börjar med
/* c_cflag bit meaning */
#define CBAUD 0000017
Denna sektion listar betydelsen av fc# och fs#
bitarna. Du kommer att märka att namnen där (efter baudtalen) matchar
en av raderna av stty output. Sa jag inte att detta skulle bli enkelt?
Notera vilken av inställningarna som inleds med ett - i din stty
output. Summera ihop alla dessa siffror (de är oktala). Detta
representerar de bitar som du vill "clear"a, så resultatet är din
fc# möjlighet. Naturligvis, kom ihåg att du kommer att
sätta dessa bitar direkt efter du har "clear"at, så du kan använda
`fc#0177777
' (Det gör jag).
Nu gör du detsamma för inställningarna (listade i denna sektion) som
inte har ett - före dem i din stty output. I mitt exempel är de
viktiga CS8 (0000060), HUPCL (0002000), och CREAD (0000200). Notera
också argumenten för ditt baudtal (mitt är 0000015). Lägg ihop dessa,
och i mitt exempel får du 0002275. Det skall in i din fs#
möjlighet (`fs#02275
' funkar bra i mitt exempel).
Gör samma sak med set och clear för nästa sektion av include filen,
"c_lflag bits". I mitt fall behövde jag inte "set"a något så jag
använde bara `xc#0157777
' och `xs#0
'.
Jon Luckey pekar ut att några äldre seriella skrivare med billiga
seriella interface och små buffers verkligen menar stopp när de
säger så med flödeskontrollen. Han kom på att stänga av FIFO'n på hans
Linuxburks 16550 serieportar med
setserial
fixade problemet med tappade tecken (du till synes bara specificerar
uart typen till 8250 för åstadkomma detta).