Následující odstavce se zabývají řešením nejčastějších hardwarových i softwarových problémů s tiskem.
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.
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.
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ř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í.
TCP/IP síť a převod jmen musí být funkční.
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:
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“.
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
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
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.
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.
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
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:
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.
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).
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).
Tiskárnu resetujte jejím vypnutím. Po chvilce do ní vložte papír a zapněte ji.
Chcete-li identifikovat problém v tiskovém systému CUPS, použijte následující postup:
Nastavte LogLevel debug v souboru
/etc/cups/cupsd.conf.
Zastavte cupsd.
Odstraňte /var/log/cups/error_log*,
vyhnete se tak prohledávání příliš velkého protokolového
souboru.
Spusťte cupsd.
Zopakujte činnost, která vedla k problému.
Zkontrolujte záznamy v souboru
/var/log/cups/error_log*.
Měly by vést k odhalení problému.
Ř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.