11.7. Řešení problémů

Následující odstavce se zabývají řešením nejčastějších hardwarových i softwarových problémů s tiskem.

11.7.1. Tiskárny bez podpory standardního tiskového jazyka

Tiskárny, které nepodporují žádný standardní tiskový jazyk, ale je s nimi možno komunikovat pouze pomocí speciálních kontrolních sekvencí, se nazývají GDI tiskárny. Takové tiskárny jsou funkční pouze s operačním systémem, ke kterému výrobce dodává ovladač. GDI je programovací rozhraní vyvinuté firmou Microsoft pro grafická zařízení. Problémem není programovací rozhraní jako takové, ale skutečnost, že pro komunikaci s GDI tiskárnami lze použít pouze proprietární jazyk specifický pro daný typ tiskárny.

Některé tiskárny lze používat v režimu GDI i v režimu standardního tiskového jazyka. Někteří výrobci dodávají ke GDI tiskárnám proprietární ovladače. Nevýhoda takových ovladačů ale spočívá v tom, že nemusí být vhodné pro všechny tiskové systémy či hardwarové platformy. Tiskárny podporující standardní tiskový jazyk jsou naopak na tiskovém systému či hardwarové platformě nezávislé.

Často může být výhodnější zakoupit podporovanou tiskárnu se standardním tiskovým jazykem, než trávit čas snahou zprovoznit proprietární linuxový ovladač. Problém s ovladači se tak vyřeší jednou pro vždy a odstraní se nutnost instalovat a konfigurovat speciální ovládací software a shánět jeho nové verze v případě změn v tiskovém systému.

11.7.2. Pro postscriptovou tiskárnu není k dispozici vhodný PPD soubor

Pokud balíček manufacturer-PPDs neobsahuje pro vaši postscriptovou tiskárnu žádný vhodný PPD soubor, zkuste použít PPD soubor z CD s ovladači dodaného s tiskárnou nebo stáhněte soubor z webových stránek výrobce.

Pokud je PPD soubor k dispozici ve formě zip archívu (.zip) nebo samorozbalovacího zip archívu (.exe), rozbalte ho programem unzip. Přečtěte si licenční podmínky souboru a pomocí programu cupstestppd ověřte, zda odpovídá specifikaci Adobe PostScript Printer Description File Format Specification, version 4.3. Pokud program vrátí FAIL, jsou v PPD souboru závažné chyby, které mohou způsobit problémy. Proto by objevené chyby měly být odstraněny. Pokud je to nutné, požádejte výrobce tiskárny o vhodný PPD soubor.

11.7.3. Paralelní porty

Nejspolehlivější je připojit tiskárnu přímo k prvnímu paralelnímu portu a v BIOSu zvolit následující nastavení:

  • I/O address: 378 (hexadecimal)

  • Interrupt: irrelevant

  • Mode: Normal, SPP nebo Output Only

  • DMA: disabled

Pokud tiskárna na paralelním portu s tímto nastavením BIOSu nefunguje, explicitně vložte I/O adresu nastavenou v BIOSu do souboru /etc/modprobe.conf ve tvaru 0x378. Pokud jsou paralelní porty dva a jejich I/O adresy jsou 378 a 278 (hexadecimálně), vložte je do souboru ve tvaru 0x378,0x278.

Pokud je volné přerušení 7, lze ho aktivovat zápisem nastavení uvedeným v příkladu 11.1 – „ /etc/modprobe.conf: Režim přerušení pro první paralelní port “. Před aktivací přerušení zkontrolujte v souboru /proc/interrupts, jaká přerušení se již používají. Jsou tam zobrazena jen právě používaná přerušení, což závisí na právě aktivních hardwarových komponentách. Přerušení pro paralelní port nesmí být používáno žádným jiným zařízením. Pokud si nejste jisti, použijte irq=none.

Příklad 11.1. /etc/modprobe.conf: Režim přerušení pro první paralelní port

alias parport_lowlevel parport_pc
options parport_pc io=0x378 irq=7

11.7.4. Připojení síťových tiskáren

Identifikace síťových problémů

Připojte tiskárnu přímo k počítači. Nakonfigurujte ji pro účely testování jako lokální. Pokud funguje, problém je spojený se sítí.

Kontrola TCP/IP sítě

TCP/IP síť a převod jmen musí být funkční.

Kontrola vzdáleného lpd

Následujícím příkazem otestujte, zda je možné navázat TCP spojení s lpd (port 515) na vzdáleném počítači host:

netcat -z host; 515 && echo ok || echo selhalo

Pokud spojení s lpd nelze navázat, je možné, že lpd není aktivní, nebo, že jsou vážné problémy se sítí.

Jako uživatel root použijte následující příkaz k získání (možná velmi dlouhé) zprávy o stavu fronty queue na vzdáleném počítači host, za předpokladu, že je lpd aktivní a vzdálený počítač odpovídá na dotazy:

echo -e "\004queue" \
  | netcat -w 2 -p 722 host 515

Pokud lpd neodpovídá, může být neaktivní nebo může být problém se sítí. Pokud lpd odpoví, měla by odpověď ozřejmit, proč nelze na frontě queue na počítači host tisknout. Pokud dostanete odpověď jako v příkladu 11.2 – „Chybové hlášení programu lpd, je problém způsobený vzdáleným lpd:

Příklad 11.2. Chybové hlášení programu lpd

lpd: your host does not have line printer access
lpd: queue does not exist
printer: spooling disabled
printer: printing disabled
Kontrola vzdáleného cupsd

Ve výchozím nastavení by měl CUPS server oznamovat své fronty každých třicet sekund na UDP portu 631. Následující příkaz testuje, zda je na síti přítomný CUPS síťový server.

netcat -u -l -p 631 & PID=$! ; sleep 40 ; kill $PID

Pokud síťový CUPS server skutečně existuje, vrátí se za čtyřicet sekund zpráva zobrazená v příkladu 11.3 – „Oznámení síťového CUPS serveru“.

Příklad 11.3. Oznámení síťového CUPS serveru

ipp://pocitac.domena:631/printers/fronta

Následující příkaz lze použít k otestování možnosti navázání TCP spojení s cupsd (port 631) na vzdáleném počítači host:

netcat -z host 631 && echo ok || echo selhalo

Pokud nelze spojení navázat, je cupsd neaktivní nebo jsou závažné problémy se sítí. Příkaz lpstat -h host -l -t vrátí (možná velmi dlouhou) zprávu o stavu všech front na vzdáleném počítači host, pokud je cupsd aktivní a počítač odpovídá na dotazy.

Následující příkaz lze použít k otestování, zda fronta queue na počítači host přijme tiskovou úlohu sestávající z jednoho znaku carriage return (nový řádek). Vytištěno by nemělo být nic, jen možná vysunut jeden prázdný list papíru.

echo -en "\r" \
  | lp -d queue -h host
Řešení problémů se síťovou tiskárnou nebo zařízením print server box.

Při velkém množství tiskových úloh se občas objeví problémy se spoolery bežícími v zařízení print server box. Problém nelze řešit přímo, ale můžete spooler obejít adresováním tiskárny přímo přes TCP soket (viz 11.4.2 – „Síťové tiskárny“).

Abyste mohli tuto metodu použít, musíte znát příslušný port na zařízení print server box. Když je tiskárna zapnuta a připojena k tomuto zařízení, lze TCP port určit krátce po zapnutí zařízení pomocí programu nmap. Příkaz nmap IP_adresa může mít pro zařízení print server box následující výstup:

Port       State       Service
23/tcp     open        telnet
80/tcp     open        http
515/tcp    open        printer
631/tcp    open        cups
9100/tcp   open        jetdirect

Tento výstup značí, že tiskárnu připojenou k zařízení lze adresovat přes TCP soket na portu 9100. Ve výchozím nastavení kontroluje nmap jen běžně používané porty uvedené v /usr/share/nmap/nmap-services. Chcete-li zkontrolovat všechny možné porty, použijte příkaz nmap -p od_portu-do_portu IP_adresa. Může to ale trvat poměrně dlouho. Další informace naleznete v manuálové stránce nmap.

K otestování, zda lze tiskárnu na určitém portu adresovat, zašlete na příslušný port následujícím příkazem řetězce nebo soubory k tisku:

echo -en "\rAhoj\r\f" | netcat -w 1 IP_adresa port
cat soubor | netcat -w 1 IP_adresa port

11.7.5. Problém s tiskem bez chybového hlášení

Tiskový systém považuje úlohu za hotovou v okamžiku, kdy dokončí přenos dat příjemci (tiskárně). Pokud zpracování na tiskárně z nějakého důvodu selže (pokud například tiskárna nedokáže zpracovat data specifická pro určitou tiskárnu), tiskový systém se o tom nedozví. Pokud není tiskárna schopna vytisknout data specifická pro tiskárnu, použijte jiný, pro vaši tiskárnu vhodnější, PPD soubor.

11.7.6. Nepřístupné fronty

Pokud datový přenos k příjemci z nějakého důvodu i po několika pokusech selže, oznámí CUPS backend (např. usb nebo socket) tiskovému systému (přesněji cupsd) chybu. Backend rozhoduje o tom, kolik pokusů o přenos dat má smysl, a kdy prohlásí spojení za nemožné. Protože v takovém případě by další pokusy byly zbytečné, zablokuje cupsd na příslušné frontě tisk. Jakmile odstraníte zdroj problémů, musí systémový administrátor reaktivovat tisk na frontě příkazem /usr/bin/enable.

11.7.7. Rušení tiskových úloh

Pokud síťový CUPS server oznamuje fronty klientským počítačům přes prohlížení sítě a na klientovi je vhodně nastaven cupsd, přijímá od aplikací tiskové úlohy klientský cupsd a přeposílá je programu cupsd na serveru. Když cupsd tiskovou úlohu přijme, je jí přiřazeno nové číslo. Proto je číslo úlohy jiné na klientovi a jiné na serveru. Protože je tisková úloha obvykle přeposlána ihned, nelze ji zrušit pomocí čísla na klientovi. Klientský cupsd považuje tiskovou úlohu za dokončenou v okamžiku jejího přeposlání na server.

Chcete-li úlohu na serveru zrušit, použijte příkaz lpstat -h tiskovyserver -o ke zjištění čísla úlohy na serveru (za předpokladu, že server úlohu dosud nedokončil, tj. neposlal ji na tiskárnu). Pomocí takto získaného čísla můžete úlohu na serveru zrušit:

cancel -h tiskovyserver fronta-cisloulohy

11.7.8. Vadné tiskové úlohy a chyby v přenosu dat

Tiskové úlohy ve frontách zůstávají i když vypnete a zapnete tiskárnu nebo restartujete počítač během tisku. Vadné tiskové úlohy je nutno odstranit z fronty pomocí příkazu cancel.

Pokud je tisková úloha vadná nebo se objeví chyba v komunikaci mezi počítačem a tiskárnou, vytiskne tiskárna mnoho listů papíru s nečitelnými znaky, neboť není schopná data správně zpracovat. Vypořádat se s ní můžete následujícím způsobem:

  1. Chcete-li tisk zastavit, vyjměte z inkoustových tiskáren papír nebo, u tiskáren laserových, otevřete zásobníky papíru. Kvalitní tiskárny mají pro zastavení tisku zvláštní tlačítko.

  2. Tisková úloha může ve frontě přetrvat, neboť úlohy jsou odstraňovány, až když jsou odeslány celé. Příkazem lpstat -o (nebo lpstat -h tiskovy-server -o) zjistíte, která fronta se právě tiskne. Úlohu pak odstraníte příkazem cancel fronta-cislo-ulohy (nebo cancel -h tiskovy-server fronta-cislo-ulohy).

  3. Někdy je část dat tiskárně odesílána i v případě, že tisková úloha byla z fronty odstraněna. Ověřte si, zda pro frontu stále běží CUPS backend proces, a pokud ano, ukončete ho. Například (v případě tiskárny na paralelním portu) lze použít příkaz fuser -k /dev/lp0, který ukončí všechny procesy přistupující k tiskárně (či přesněji k paralelnímu portu).

  4. Tiskárnu resetujte jejím vypnutím. Po chvilce do ní vložte papír a zapněte ji.

11.7.9. Hledání problémů v tiskovém systému CUPS

Chcete-li identifikovat problém v tiskovém systému CUPS, použijte následující postup:

  1. Nastavte LogLevel debug v souboru /etc/cups/cupsd.conf.

  2. Zastavte cupsd.

  3. Odstraňte /var/log/cups/error_log*, vyhnete se tak prohledávání příliš velkého protokolového souboru.

  4. Spusťte cupsd.

  5. Zopakujte činnost, která vedla k problému.

  6. Zkontrolujte záznamy v souboru /var/log/cups/error_log*. Měly by vést k odhalení problému.

11.7.10. Další informace

Řešení mnoha specifických problémů najdete v Databázi podpory (http://en.opensuse.org/SDB:SDB) a v návodech na stánkách projektu openSUSE (http://www.opensuse.org.