In den folgenden Abschnitten werden einige der am häufigsten auftretenden Probleme mit der Druckerhardware und -software sowie deren Lösungen oder Umgehung beschrieben. Unter anderem werden die Themen GDI-Drucker, PPD-Dateien und Port-Konfiguration behandelt. Darüber hinaus werden gängige Probleme mit Netzwerkdruckern, fehlerhafte Ausdrucke und die Bearbeitung der Warteschlange erläutert.
Diese Drucker unterstützen keine der geläufigen Druckersprachen und können nur mit proprietären Steuersequenzen adressiert werden. Daher funktionieren sie 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. In der Regel liefert der Hersteller nur Treiber für Windows. Da die Windows-Treiber die GDI-Schnittstelle verwenden, werden diese Drucker auch GDI-Drucker genannt. Das eigentliche Problem ist nicht die Programmierschnittstelle, sondern die Tatsache, dass diese Drucker nur mit der proprietären Druckersprache des jeweiligen Druckermodells adressiert werden können.
Der Betrieb einiger GDI-Drucker kann sowohl im GDI-Modus als auch in einer der Standard-Druckersprachen ausgeführt werden. Sehen Sie im Druckerhandbuch nach, ob dies möglich ist. Einige Modelle benötigen für diese Umstellung eine spezielle Windows-Software (Beachten Sie, dass der Windows-Druckertreiber den Drucker immer zurück in den GDI-Modus schalten kann, wenn von Windows aus gedruckt wird). Für andere GDI-Drucker sind Erweiterungsmodule für eine Standarddruckersprache erhältlich.
Einige Hersteller stellen für ihre 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 dann mit dem Dienstprogramm cupstestppd, ob die PPD-Datei den Spezifikationen „Adobe PostScript Printer Description File Format Specification, Version 4.3.“ entspricht. Wenn das Dienstprogramm „FAIL“ zurückgibt, sind die Fehler in den PPD-Dateien schwerwiegend und werden sehr wahrscheinlich größere Probleme verursachen. 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:
E/A-Adresse: 378
(hexadezimal)
Interrupt: nicht relevant
Modus: Normal
, SPP
oder Nur Ausgabe
DMA: deaktiviert
Wenn der Drucker trotz dieser Einstellungen über den Parallelanschluss nicht angesprochen werden kann, geben Sie die E/A-Adresse explizit entsprechend den Einstellungen im BIOS in der Form 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 9.1, „/etc/modprobe.conf: Interrupt-Modus für den ersten parallelen Port“ 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
.
Beispiel 9.1. /etc/modprobe.conf
: Interrupt-Modus für den ersten parallelen Port
alias parport_lowlevel parport_pc options parport_pc io=0x378 irq=7
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 9.2, „Fehlermeldung von lpd“ erhalten, wird das Problem durch den entfernten lpd verursacht.
Beispiel 9.2. Fehlermeldung von lpd
lpd: your host does not have line printer access lpd: queue does not exist printer: spooling disabled printer: printing disabled
Standardmäßig sendet der CUPS-Netzwerkserver über Broadcast alle 30 Sekunden Informationen über seine Warteschlangen an UDP-Port 631
. Demzufolge kann mit dem folgenden Befehl getestet werden, ob im Netzwerk ein CUPS-Netzwerkserver vorhanden ist. Stoppen Sie unbedingt Ihren lokalen CUPS-Dämon, bevor Sie das Kommando ausführen.
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 9.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 jedoch 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. Weitere Informationen hierzu finden Sie unter Abschnitt 9.4, „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 angeschlossene 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 finden Sie auf der man-Seite zu ypbind.
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-Back-End 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 erfolgreich ist, meldet das CUPS-Back-End, 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 Kommando cupsenable wieder aktivieren.
Wenn ein CUPS-Netzwerkserver seine Warteschlangen den Client-Hosts via Browsing 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 ein Kommando wie lpstat -h cups.example.com -o ein. Sie ermitteln damit die Auftragsnummer auf dem Server, wenn der Server den Druckauftrag nicht bereits abgeschlossen (d. h. an den Drucker gesendet) hat. Mithilfe dieser Auftragsnummer kann der Druckauftrag auf dem Server gelöscht werden:
cancel -h cups.example.com 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 cups.example.com -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 cups.example.com 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 (den parallelen Port) zugreifen.
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 enthalten (http://en.opensuse.org/SDB:SDB). Die gesuchten Themen finden Sie am schnellsten mit einer Textsuche nach SDB:CUPS
.