Miután az lptest(1) programmal elvégeztünk néhány egyszerű próbát, a várt helyett a következők egyikét kaphatuk eredményül:
A nyomtató nyomtatott egy keveset, aztán egy ideig csendben maradt és nem csinált semmit. Ilyenkor a nyomtatnivalók megjelenéséhez minden bizonnyal meg kell nyomnunk a nyomtatón levő “PRINT REMAINING” vagy “FORM FEED” feliratú gombokat.
Ebben az esetben a nyomtató valószínűleg még arra várt, hogy még a nyomtatás megkezdése előtt érkezik valamilyen további adat. Ettől a gondtól úgy szabadulhatunk meg, ha beállítunk egy szövegszűrőt, amely minden (szükséges) esetben küld egy “FORM FEED” (lapdobás) jelzést is a nyomtatónak. Ez kell általában ahhoz, hogy a szöveg a nyomtató belső pufferében megmaradt része azonnal kinyomtatódjon. Akkor is a javunkra válhat ez, ha minden egyes munkát külön lapon akarunk kezdeni, mivel így a következő munka sosem közvetlenül ott kezdődik, ahol az előző munka befejezte a nyomtatást.
A /usr/local/libexec/if-simple szűrő helyett a következő szkript használhatával tudunk minden munka után elküldeni egy lapdobást:
#!/bin/sh # # if-simple - Egyszerű lpd szövegszűrő # Helye: /usr/local/libexec/if-simple # # Egyszerűen átmásolja a szabvány bemenetet a szabvány kimenetre, # és figyelmen kívül hagyja az összes többi paramétert. # Minden nyomtatási munka után küld egy lapdobást (\f). /bin/cat && printf "\f" && exit 0 exit 2
Ekkor a következőt látjuk a lapon:
!"#$%&'()*+,-./01234 "#$%&'()*+,-./012345 #$%&'()*+,-./0123456
Az ún. lépcsőhatás áldozatává váltunk, amelyet a sortörést jelző karakter eltérő értelmezései okoznak. A UNIX® stílusú operációs rendszerek erre mindössze egyetlen karaktert használnak: ez a 10-es kódú ASCII karakter (sordobás, Line Feed, LF). Az MS-DOS®, OS/2® és mások pedig két karakterrel oldják meg ezt a feladatot: a 10-es és 13-as kódú (kocsivissza, Carriage Return, CR) ASCII karakterekkel. A sortöréseknél sok nyomtató az MS-DOS szokásait követi.
Amikor a FreeBSD-vel nyomtatunk, akkor csak egyetlen karaktert használunk sortörésre. Ennek láttán a nyomtató lépteti a sort, azonban a fej vízszintes pozícióját nem változtatja meg a következő sor nyomtatásának megkezdésekor. Erre lenne a kocsivissza karakter, vagyis ennek hatására fogja a nyomtató a papír bal oldalára visszaállítani a következő nyomtatandó karakter pozícióját.
A FreeBSD így szeretné utasítani a nyomtatót:
A nyomtató kocsivisszát kap | A nyomtató visszalépteti a pozíciót |
A nyomtató sordobást kap | A nyomtató új sort kezd |
Néhány módszer ennek kiváltására:
A nyomtatón található kapcsolók vagy vezérlőpanel segítségével próbáljuk meg átállítani a vezérlőkarakterek nyomtató szerinti értelmezését. Keressük meg a nyomtató kézikönyvében, hogyan tudjuk ezt megcsinálni.
Megjegyzés: Ha a FreeBSD mellett más operációs rendszerekkel is használni akarjuk a nyomtatót, akkor azok indítása előtt mindig át kell állítani a nyomtatót a megfelelő értelmezés alkalmazására. Ilyenkor valószínűleg a lentebb szereplő megoldásokat részesítjük majd inkább előnyben.
Állítsuk be úgy a FreeBSD soros vonali meghajtóját, hogy magától alakítsa át az LF karaktereket CR+LF párokká. Természetesen ez a megoldás csak a soros portra csatlakozó nyomtatók esetében működhet. Ehhez az /etc/printcap állományban a nyomtató leírásánál az ms# tulajdonságnál adjuk meg az onlcr módot.
Küldjünk olyan kódot a nyomtatónak, amelynek hatására ideiglenesen máshogy fogja kezelni az LF karaktereket. Nézzük meg a nyomtatóhoz mellékelt útmutatóban, hogy milyen kódokat tudunk ilyen célra használni. Ha találtunk ilyen kódot, akkor írjuk át úgy a hozzátartozó szövegszűrőt, hogy a munkák előtt mindig elküldjük azt.
Most bemutatjuk egy olyan szövegszűrő kódját, amely a Hewlett-Packard PCL kódjait ismerő nyomtatókhoz készült. Ebben a szűrőben először kiadjuk, hogy az LF karaktereket LF és CR karakterek kombinációjának tekintse a nyomtató, majd elküldjük magát a munkát, és a munka utolsó lapja után pedig elküldünk egy lapdobást. Szinte az összes Hewlett Packard nyomtatóval működnie kell.
#!/bin/sh # # hpif - Egyszerű lpd bemeneti szűrő a HP-PCL alapú nyomtatókhoz # Helye: /usr/local/libexec/hpif # # Egyszerűen átmásolja a szabvány kimenetet a szabvány bemenetre, és # figyelmen kívül hagyja a paramétereket. Elküldi a nyomtatónak, hogy # az LF karaktereket CR+LF-ként kezelje, majd a feladat befejeztével # lapot dobat. printf "\033&k2G" && cat && printf "\033&l0H" && exit 0 exit 2
Példaként megadjuk még az orchid nevű számítógép /etc/printcap állományát is. Ebben egyetlen nyomtató csatlakozik a párhuzamos portra, amelynek a típusa LaserJet 3Si és a neve teak. Az előbb bemutatott szövegszűrőt használja:
# # /etc/printcap (orchid) # teak|hp|laserjet|Hewlett Packard LaserJet 3Si:\ :lp=/dev/lpt0:sh:sd=/var/spool/lpd/teak:mx#0:\ :if=/usr/local/libexec/hpif:
A nyomtató nem lépteti a sorokat, ezért az összes sor egymáson jelenik meg.
Ez pontosan a ritka “ellentéte” a fentebb leírt lépcsőhatásnak. A FreeBSD által sortörésre használt LF karakterek valamiért CR karakterekként viselkednek, ezért a nyomtató nem sort vált, hanem a lap bal szélére állítja a fejet.
A nyomtatón található kapcsolókkal vagy vezérlőpanellel így állítsuk be az sordobás és kocsivissza karakterek értelmezését:
Miközben nyomtatunk, a nyomtató bizonyos karaktereket nem hajlandó megjeleníteni. A probléma ennél nagyobb, ha a nyomtató működése közben egyre több és több karaktert hagy ki.
Itt az a gond, hogy a nyomtató nem képes tartani az iramot a számítógép által a soros vonalon átküldött adatok sebességével (ez a probléma nem jelentkezhet a párhuzamos nyomtatók esetén). Két módon kerekedhetünk felül ezen:
Ha a nyomtató ismeri a XON/XOFF típusú forgalomirányítást, akkor az ms# tulajdonságnál adjuk meg a FreeBSD számára az ixon beállítást.
Ha a nyomtató ismeri a “Request to Send / Clear to Send” alapú hardveres kézfogást (más néven RTS/CTS forgalomirányítást), akkor az ms# tulajdonságnál a crtscts beállítást adjuk meg. Gondoskodjunk róla, hogy a számítógépet és a nyomtató összekötő kábel meg tudjon majd bírkózni ezzel a típusú forgalomirányítással.
A nyomtató nem a nyomtatni kívánt szöveget hozza létre, hanem össze-vissza nyomtat.
Ez a soros nyomtatók helytelen kommunikációs beállításának egy másik jellemző tünete. Ellenőrizzük a br tulajdonságnál megadott adatátviteli sebességet és az ms# tulajdonságnál megadott paritási beállításokat. Egyeztessük a nyomtató saját és az /etc/printcap állományban tárolt beállításait.
Ha semmi sem történt, akkor a gond magával a FreeBSD-vel lehet, nem pedig a hardverrel. Az /etc/printcap állományba a vizsgálni kívánt nyomtató leírásához (az lf tulajdonsággal) illesszünk be naplózást. Például így fog kinézni a rattan nevű nyomtató bejegyzése az lf tulajdonság megadásával kibővítve:
rattan|line|diablo|lp|Diablo 630 Line Printer:\ :sh:sd=/var/spool/lpd/rattan:\ :lp=/dev/lpt0:\ :if=/usr/local/libexec/if-simple:\ :lf=/var/log/rattan.log
Miután ezt megcsináltuk, próbálkozzunk újra. Nézzük meg a naplóállományban (ami a példánkban a /var/log/rattan.log nevén érhető el), hogy látunk-e valamilyen hibaüzenetet. Az itt tapasztalt hibaüzenetek nyomán elindulva igyekezzünk megszüntetni a probléma forrását.
Ha nem adjuk meg az lf tulajdonságot, akkor az LPD erre a célra alapértelmezés szerint a /dev/console állományt használja.
Ha kérdése van a FreeBSD-vel kapcsolatban, a következő
címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése,
kérjük erre a címre írjon: <gabor@FreeBSD.org>.