FreeBSD kézikönyv
Előző | Fejezet 9. Nyomtatás | Következő

# 9.7. Hibakeresés

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:

Egy kis idő után minden remekül működött, vagy nem dobta ki az egész lapot.

  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

“Lépcsősen” jelentek meg a sorok.

  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 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:

Egymásra írja a sorokat.

  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

A nyomtató elhagy karaktereket.

  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.

Mindenféle szemetet nyomtat.

  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.

Semmi sem történik.

  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.

Előző | Tartalom | Következő
Más nyomtatási rendszerek | Fel | Bináris Linux kompatibilitás

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