In den folgenden Abschnitten werden einige der am häufigsten auftretenden Probleme mit der Druckerhardware und -software sowie deren Lösungen oder Umgehung beschrieben.
Drucker, die keine der geläufigen Druckersprachen unterstützen und nur mit speziellen Steuersequenzen adressiert werden können, werden als GDI-Drucker bezeichnet. Diese Drucker funktionieren nur mit den Betriebssystemversionen, für die der Hersteller einen Treiber zur Verfügung stellt. GDI ist eine von Microsoft für Grafikgeräte entwickelte Programmierschnittstelle. Das eigentliche Problem ist nicht die Programmierschnittstelle, sondern die Tatsache, dass GDI-Drucker nur mit der proprietären Druckersprache des jeweiligen Druckermodells adressiert werden können.
Der Betrieb einiger Drucker kann sowohl im GDI-Modus als auch in einer der Standard-Druckersprachen ausgeführt werden. Einige Hersteller stellen für ihre GDI-Drucker proprietäre Treiber zur Verfügung. Der Nachteil proprietärer Druckertreiber ist, dass es keine Garantie gibt, dass diese mit dem installierten Drucksystem funktionieren und für die unterschiedlichen Hardwareplattformen geeignet sind. Im Gegensatz dazu sind Drucker, die eine Standard-Druckersprache unterstützen, nicht abhängig von einer speziellen Drucksystemversion oder einer bestimmten Hardwareplattform.
Anstatt Zeit darauf zu verwenden, einen proprietären Linux-Treiber zum Funktionieren zu bringen, ist es möglicherweise kosteneffektiver, einen unterstützten Drucker zu kaufen. Dadurch wäre das Treiberproblem ein für alle Mal aus der Welt geschafft und es wäre nicht mehr erforderlich, spezielle Treibersoftware zu installieren und zu konfigurieren oder Treiber-Updates zu beschaffen, die aufgrund neuer Entwicklungen im Drucksystem benötigt würden.
Wenn das Paket manufacturer-PPDs
für einen PostScript-Drucker keine geeignete PPD-Datei enthält, sollte es möglich sein, die PPD-Datei von der Treiber-CD des Druckerherstellers zu verwenden, oder eine geeignete PPD-Datei von der Webseite des Druckerherstellers herunterzuladen.
Wenn die PPD-Datei als Zip-Archiv (.zip) oder als selbstextrahierendes Zip-Archiv (.exe
) zur Verfügung gestellt wird, entpacken Sie sie mit unzip. Lesen Sie zunächst die Lizenzvereinbarung für die PPD-Datei. Prüfen Sie anschließend mit dem Dienstprogramm cupstestppd, ob die PPD-Datei der „Adobe PostScript-PDF-Format-Spezifikation, Version 4.3, “ entspricht. Wenn das Dienstprogramm „FAIL“ zurückgibt, sind die Fehler in den PPD-Dateien schwerwiegend und verursachen wahrscheinlich größere Probleme. Die von cupstestppd protokollierten Problempunkte müssen behoben werden. Fordern Sie beim Druckerhersteller ggf. eine geeignete PPD-Datei an.
Die sicherste Methode ist, den Drucker direkt an den ersten Parallelanschluss anzuschließen und im BIOS die folgenden Einstellungen für Parallelanschlüsse auszuwählen:
I/O address: 378
(hexadezimal)
Interrupt: irrelevant
Mode: Normal
, SPP
oder Output Only
DMA: deaktiviert
Wenn der Drucker trotz dieser Einstellungen über den Parallelanschluss nicht angesprochen werden kann, geben Sie die E/A-Adresse explizit in Übereinstimmung mit der Einstellung im BIOS in Form von 0x378
in /etc/modprobe.conf
ein. Wenn zwei Parallelanschlüsse vorhanden sind, die auf die E/A-Adressen 378
und 278
(hexadezimal) gesetzt sind, geben Sie diese in Form von 0x378,0x278
ein.
Wenn Interrupt 7
frei ist, kann er mit dem in Beispiel 11.1, „/etc/modprobe.conf: Interrupt-Modus für den ersten Parallelanschluss“ dargestellten Eintrag aktiviert werden. Prüfen Sie vor dem Aktivieren des Interrupt-Modus die Datei /proc/interrupts
, um zu sehen, welche Interrupts bereits verwendet werden. Es werden nur die aktuell verwendeten Interrupts angezeigt. Dies kann sich je nachdem, welche Hardwarekomponenten aktiv sind, ändern. Der Interrupt für den Parallelanschluss darf von keinem anderen Gerät verwendet werden. Wenn Sie sich diesbezüglich nicht sicher sind, verwenden Sie den Polling-Modus mit irq=none
.
Schließen Sie den Drucker direkt an den Computer an. Konfigurieren Sie den Drucker zu Testzwecken als lokalen Drucker. Wenn dies funktioniert, werden die Probleme netzwerkseitig verursacht.
Das TCP/IP-Netzwerk und die Namensauflösung müssen funktionieren.
Geben Sie den folgenden Befehl ein, um zu testen, ob zu lpd (Port 515
) auf host
eine TCP-Verbindung hergestellt werden kann:
netcat -z host 515 && echo ok || echo failed
Wenn die Verbindung zu lpd nicht hergestellt werden kann, ist lpd entweder nicht aktiv oder es liegen grundlegende Netzwerkprobleme vor.
Geben Sie als root
den folgenden Befehl ein, um einen (möglicherweise sehr langen) Statusbericht für queue
auf dem entfernten host
abzufragen, vorausgesetzt, der entsprechende lpd ist aktiv und der Host akzeptiert Abfragen:
echo -e "\004queue" \ | netcat -w 2 -p 722 host 515
Wenn lpd nicht antwortet, ist er entweder nicht aktiv oder es liegen grundlegende Netzwerkprobleme vor. Wenn lpd reagiert, sollte die Antwort zeigen, warum das Drucken in der queue
auf host
nicht möglich ist. Wenn Sie eine Antwort wie die in Beispiel 11.2, „Fehlermeldung vom lpd“ erhalten, wird das Problem durch den entfernten lpd verursacht.
Der CUPS-Netzwerkserver sollte Informationen über seine Warteschlangen standardmäßig alle 30 Sekunden an UDP-Port 631
via Broadcast senden. Demzufolge kann mit dem folgenden Befehl getestet werden, ob im Netzwerk ein CUPS-Netzwerkserver vorhanden ist.
netcat -u -l -p 631 & PID=$! ; sleep 40 ; kill $PID
Wenn ein CUPS-Netzwerkserver vorhanden ist, der Informationen über Broadcasting sendet, erscheint die Ausgabe wie in Beispiel 11.3, „Broadcast vom CUPS-Netzwerkserver“ dargestellt.
Mit dem folgenden Befehl können Sie testen, ob mit cupsd (Port 631
) auf host
eine TCP-Verbindung hergestellt werden kann:
netcat -z host 631 && echo ok || echo failed
Wenn die Verbindung zu cupsd nicht hergestellt werden kann, ist cupsd entweder nicht aktiv oder es liegen grundlegende Netzwerkprobleme vor. lpstat -h host -l -t gibt einen (möglicherweise sehr langen) Statusbericht für alle Warteschlangen auf host
zurück, vorausgesetzt, dass der entsprechende cupsd aktiv ist und der Host Abfragen akzeptiert.
Mit dem nächsten Befehl können Sie testen, ob die Warteschlange
auf Host
einen Druckauftrag akzeptiert, der aus einem einzigen CR-Zeichen (Carriage-Return) besteht. In diesem Fall sollte nichts gedruckt werden. Möglicherweise wird eine leere Seite ausgegeben.
echo -en "\r" \ | lp -d queue -h host
Spooler, die in einer Print Server Box ausgeführt werden, verursachen gelegentlich Probleme, wenn sie viele Druckaufträge bearbeiten müssen. Da dies durch den Spooler in der Print Server Box verursacht wird, können Sie nichts dagegen tun. Sie haben aber die Möglichkeit, den Spooler in der Print Server Box zu umgehen, indem Sie den an die Print Server Box angeschlossenen Drucker über TCP-Socket direkt ansprechen. Siehe Abschnitt 11.4.2, „Netzwerkdrucker“.
Auf diese Weise wird die Print Server Box auf einen Konvertierer zwischen den unterschiedlichen Formen der Datenübertragung (TCP/IP-Netzwerk und lokale Druckerverbindung) reduziert. Um diese Methode verwenden zu können, müssen Sie den TCP-Port der Print Server Box kennen. Wenn der Drucker eingeschaltet und an die Print Server Box angeschlossen ist, kann dieser TCP-Port in der Regel mit dem Dienstprogramm nmap aus dem Paket nmap
ermittelt werden, wenn die Print Server Box einige Zeit eingeschaltet ist. Beispiel: nmap IP-Adresse
gibt die folgende Ausgabe für eine Print Server Box zurück:
Port State Service 23/tcp open telnet 80/tcp open http 515/tcp open printer 631/tcp open cups 9100/tcp open jetdirect
Diese Ausgabe gibt an, dass der an die Print Server Box angeschlossenen Drucker über TCP-Socket an Port 9100
angesprochen werden kann. nmap prüft standardmäßig nur eine bestimmte Anzahl der allgemein bekannten Ports, die in /usr/share/nmap/nmap-services
aufgeführt sind. Um alle möglichen Ports zu überprüfen, verwenden Sie den Befehl nmap -p Ausgangs-Port
-Ziel-Port
IP-Adresse
. Dies kann einige Zeit dauern. Weitere Informationen hierzu finden Sie auf der Manualpage für den Befehl nmap.
Geben Sie einen Befehl ein wie
echo -en "\rHello\r\f" | netcat -w 1 IP-address port cat file | netcat -w 1 IP-address port
um Zeichenketten oder Dateien direkt an den entsprechenden Port zu senden, um zu testen, ob der Drucker auf diesem Port angesprochen werden kann.
Für das Drucksystem ist der Druckauftrag abgeschlossen, wenn das CUPS-Backend die Datenübertragung an den Empfänger (Drucker) abgeschlossen hat. Wenn die weitere Verarbeitung auf dem Empfänger nicht erfolgt, z. B. wenn der Drucker die druckerspezifischen Daten nicht drucken kann, wird dies vom Drucksystem nicht erkannt. Wenn der Drucker die druckerspezifischen Daten nicht drucken kann, wählen Sie eine andere PPD-Datei, die für den Drucker besser geeignet ist.
Wenn die Datenübertragung zum Empfänger auch nach mehreren Versuchen nicht erfolgt, meldet das CUPS-Backend, z. B. usb
oder socket
, dem Drucksystem (an cupsd) einen Fehler. Das Backend entscheidet, ob und wie viele Versuche sinnvoll sind, bis die Datenübertragung als nicht möglich abgebrochen wird. Da weitere Versuche vergeblich wären, deaktiviert cupsd das Drucken für die entsprechende Warteschlange. Nachdem der Systemadministrator das Problem behoben hat, muss er das Drucken mit dem Befehl /usr/bin/enable wieder aktivieren.
Wenn ein CUPS-Netzwerkserver seine Warteschlangen den Client-Hosts via Brwosing bekannt macht und auf den Host-Clients ein geeigneter lokaler cupsd aktiv ist, akzeptiert der Client-cupsd Druckaufträge von Anwendungen und leitet sie an den cupsd auf dem Server weiter. Wenn cupsd einen Druckauftrag akzeptiert, wird diesem eine neue Auftragsnummer zugewiesen. Daher unterscheidet sich die Auftragsnummer auf dem Client-Host von der auf dem Server. Da ein Druckauftrag in der Regel sofort weitergeleitet wird, kann er mit der Auftragsnummer auf dem Client-Host nicht gelöscht werden, da der Client- cupsd den Druckauftrag als abgeschlossen betrachtet, sobald dieser an den Server-cupsd weitergeleitet wurde.
Um einen Druckauftrag auf dem Server zu löschen, geben Sie einen Befehl wie lpstat -h Print-Server -o ein, um die Auftragsnummer auf dem Server zu ermitteln, vorausgesetzt, der Server hat den Druckauftrag nicht bereits abgeschlossen (d. h. ihn an den Drucker gesendet). Mithilfe dieser Auftragsnummer kann der Druckauftrag auf dem Server gelöscht werden:
cancel -h print-server queue-jobnnumber
Druckaufträge verbleiben in den Warteschlangen und das Drucken wird fortgesetzt, wenn Sie den Drucker aus- und wieder einschalten oder den Computer während des Druckvorgangs herunterfahren und neu booten. Fehlerhafte Druckaufträge müssen mit cancel aus der Warteschlange entfernt werden.
Wenn ein Druckauftrag fehlerhaft ist oder während der Kommunikation zwischen dem Host und dem Drucker ein Fehler auftritt, druckt der Drucker mehrere Seiten Papier mit unleserlichen Zeichen, da er die Daten nicht ordnungsgemäß verarbeiten kann. Führen Sie die folgenden Schritte aus, um dies zu beheben:
Um den Druckvorgang zu beenden, entfernen Sie das Papier aus Tintenstrahldruckern oder öffnen Sie die Papierzufuhr bei Laserdruckern. Qualitativ hochwertige Drucker sind mit einer Taste zum Abbrechen des aktuellen Druckauftrags ausgestattet.
Der Druckauftrag befindet sich möglicherweise noch in der Warteschlange, da die Aufträge erst dann entfernt werden, wenn sie vollständig an den Drucker übertragen wurden. Geben Sie lpstat -o oder lpstat -h Print-Server
-o ein, um zu prüfen, über welche Warteschlange aktuell gedruckt wird. Löschen Sie den Druckauftrag mit cancel Warteschlange
-Auftragsnummer
oder mit cancel -h Print-Server
Warteschlange
-Auftragsnummer
.
Auch wenn der Druckauftrag aus der Warteschlange gelöscht wurde, werden einige Daten weiter an den Drucker gesendet. Prüfen Sie, ob ein CUPS-Backend-Prozess für die entsprechende Warteschlange ausgeführt wird und wenn ja, beenden Sie ihn. Für einen an den Parallelanschluss angeschlossenen Drucker geben Sie beispielsweise den Befehl fuser -k /dev/lp0 ein, um alle Prozesse zu beenden, die aktuell noch auf den Drucker zugreifen (präziser: auf den Parallelanschluss).
Setzen Sie den Drucker vollständig zurück, indem Sie ihn für einige Zeit ausschalten. Legen Sie anschließend Papier ein und schalten Sie den Drucker wieder ein.
Suchen Sie Probleme im CUPS-Drucksystem mithilfe des folgenden generischen Verfahrens:
Setzen Sie LogLevel debug in /etc/cups/cupsd.conf
.
Stoppen Sie cupsd.
Entfernen Sie /var/log/cups/error_log*
, um das Durchsuchen sehr großer Protokolldateien zu vermeiden.
Starten Sie cupsd.
Wiederholen Sie die Aktion, die zu dem Problem geführt hat.
Lesen Sie die Meldungen in /var/log/cups/error_log*
, um die Ursache des Problems zu identifizieren.
Lösungen zu vielen spezifischen Problemen sind in der SUSE-Support-Datenbank (http://portal.suse.com/) enthalten. Die gesuchten Themen finden Sie am schnellsten über Schlüsselwortsuchen.