Lpd voorziet in vijf attributen die je in /etc/printcap in kunt
stellen om alle instellingen van de seriële poort waarop de printer
is aangesloten, te beheren.
Lees de
printcap man
page en let op de betekenissen van br#, fc#,
xc#, fs# en xs#. De laatste vier van deze
attributen zijn bitmaps die de instellingen voor de poorten aangeven. Het
br# attribuut is gewoon de baud rate, bv `br#9600
'.
Het is erg makkelijk te vertalen van stty instellingen naar printcap flag instellingen. Als je dit moet doen, kijk dan nu in de man page van stty.
Gebruik stty om de printerpoort in te stellen zodanig dat je er met cat een bestand naar kunt sturen en het correct af kunt drukken. Zo ziet mijn `stty -a' voor mijn printerpoort eruit:
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 enige wijzigingen hiertussen en de wijze waarop de poort
tijdens het opstarten wordt geïnitialiseerd
zijn -clocal
, -crtscts
, en ixon
. Je poort kan echter heel
goed anders zijn, afhankelijk van hoe je printer flow control afhandelt.
Je gebruikt stty eigenlijk op een wat vreemde manier. Aangezien stty
op de terminal opereert naar zijn standaardinvoer, gebruik je het om
een gegeven seriële poort te manipuleren door gebruik te maken van het
`<
' teken als hierboven.
Zodra je stty-instellingen goed staan, zodanig dat `cat file > /dev/ttyS2' (in mijn geval) het bestand naar de printer stuurt, kijk dan naar het bestand /usr/src/linux/include/asm-i386/termbits.h. Hierin staan een heleboel #defines en een paar structs. Je wilt dit bestand met cat misschien wel naar de printer sturen, (je hebt dat nu werkend, toch?) en het als kladpapier gebruiken. Ga naar de sectie die begint met
/* c_cflag bit meaning */
#define CBAUD 0000017
Deze sectie geeft een opsomming van de betekenis van de fc# en
fs# bits. Je
zult merken dat de namen daar (na de baud rates) overeenkomen met
één van de regels van de uitvoer van stty.
Zei ik niet dat dit makkelijk zou zijn?
Let op welke van die instellingen door een - in je stty uitvoer worden
voorafgegaan. Tel al die nummers bijelkaar op (ze staan in het octale stelsel).
Hiermee worden de bits die je wilt schonen voorgesteld, dus het resultaat
is je fc# capaciteit. Denk er uiteraard aan dat je
direct na het schonen de bits in zal gaan stellen,
dus je kan gewoon gebruiken `fc#0177777
' (zo doe ik het).
Doe nu hetzelfde voor die instellingen (opgesomd in deze sectie)
die in je stty uitvoer geen - ervoor hebben.
In mijn voorbeeld zijn de belangrijkste CS8 (0000060), HUPCL (0002000),
en CREAD (0000200). Let ook op de flags voor je baud rate (de mijne is
0000015). Tel deze allemaal bijelkaar op, en in mijn voorbeeld krijg je
0002275. Dit gaat in je fs# capaciteit (`fs#02275
' werkt
in mijn voorbeeld prima).
Doe hetzelfde met set en clear voor de volgende sectie van het include
bestand, "c_lflag bits". In mijn geval hoefde ik niets in te stellen, dus ik
gebruik gewoon `xc#0157777
' en `xs#0
'.
Jon Luckey wijst erop dat een aantal oudere seriële printers met ten-cent
seriële interfaces en kleine buffers echt stop bedoelen als ze dit
zeggen met flow control. Hij kwam erachter dat het de-activeren van de FIFO
in zijn 16550 seriële poort van zijn Linux box met
setserial
het probleem met de weggevallen tekens corrigeerde (je specificeert het
uart-type kennelijk als een 8250 om dit te doen).