Verder Terug Inhoud

16. Seriële printers onder lpd

16.1 Instelling in printcap

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

16.2 Oudere seriële printers die tekens weglaten

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


Verder Terug Inhoud