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 kaphatjuk 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övegnek a nyomtató belső pufferében megmaradt része azonnal kinyomtatódjon. Akkor is a javunkra válhat ez, ha minden egyes nyomtatási feladatot külön lapon akarunk kezdeni, mivel így a következő nyomtatási feladat sosem közvetlenül ott kezdődik, ahol az előző feladat befejezte a nyomtatást.
A /usr/local/libexec/if-simple
szűrő helyett a következő szkript
használhatával tudunk minden nyomtatási
feladat elvégzése 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 # nyomtatási feladat elvégzése 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(R) 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(R), OS/2(R) é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(R) 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.
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 nyomtatási feladatok 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 nyomtatási feladatot, és a nyomtatási feladat eredményének utolsó lapja után 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 a sordobás és kocsivissza karakterek értelmezését:
Amit a nyomtató kap | Arra a nyomtató nyomtat |
---|---|
CR | CR |
LF | CR + LF |
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ót összekötő kábel
meg tudjon majd birkózni ezzel a
típusú
forgalomirányítással.
A nyomtató nem a nyomtatni kívánt szöveget hozza létre, hanem összevissza 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):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.