Donnerstag, 26. Februar 2009
Auf der Arbeit ging nach der Installation der neuesten Druckertreiber für einen Xerox Phaser 6300DN unter Mac OS X 10.4.11 gar nichts mehr: Druckaufträge wurden zwar CUPS übergeben und das Druckericon verschwand auch prompt wieder aus dem Dock. Doch der Netzwerkdrucker spuckte nichts aus!
Nachdem ich das Problem auf einem dritten Mac mit demselben Betriebssystem reproduziert hatte, begann das Debugging. Von einem Mitarbeiter wusste ich bereits, dass Druckaufträge a) von Mac OS X 10.5-Computern und diesem Treiber problemlos gedruckt wurden sowie b) Druckaufträge mit dem Generic Postscript Driver unter Mac OS X 10.4.11 auch funktionierten. Das Problem konnte also schlüssig auf einen fehlerhaften Treiber von Xerox, der Mutter aller Kopierer und Drucker, eingeschränkt werden.
Nachdem ich in /etc/cupsd.conf
LogLevel debug
gesetzt und den Mac-Druckserver neu gestartet hatte, fanden sich in Console.app in der Datei /var/log/cups/error_log weiterführende Informationen:
I [23/Feb/2009:14:48:26 +0100] Adding start banner page "none" to job 519.
I [23/Feb/2009:14:48:26 +0100] Adding end banner page "none" to job 519.
I [23/Feb/2009:14:48:26 +0100] Job 519 queued on 'Xerox_Phaser_6300' by 'mario'.
I [23/Feb/2009:14:48:26 +0100] Started filter /usr/libexec/cups/filter/cgpdftops (PID 1322)
for job 519.
I [23/Feb/2009:14:48:26 +0100] Started filter /usr/libexec/cups/filter/pstops (PID 1323) for
job 519.
I [23/Feb/2009:14:48:26 +0100] Started filter /Library/Printers/Xerox/PDEs/pstophaserps
(PID 1324) for job 519.
I [23/Feb/2009:14:48:26 +0100] Started backend /usr/libexec/cups/backend/socket (PID
1325) for job 519.
E [23/Feb/2009:14:48:26 +0100] PID 1324 stopped with status 2!
I [23/Feb/2009:14:48:26 +0100] Hint: Try setting the LogLevel to "debug" to find out more.
Als ich mich zusätzlich an localhost:631/printers/ wandte und auf den entsprechenden Drucker klickte, sah ich auch dort die ähnliche Meldung
Description: Xerox Phaser 6300
Location:
Printer State: idle, accepting jobs.
"The process "pstophaserps" stopped unexpectedly with status 2"
Device URI: socket://10.0.0.1/?bidi
Hmmm, was zum Teufel?
Xerox Hotline: Da werden sie nicht geholfen
Mit dieser konkreten Fehlermeldung bewaffnet meldete ich mich bei der Xerox-Supporthotline. Nachdem ich wie ein depperter mit der dort eingesetzten Spracherkennung gewrestelt hatte (der Begriff „Technische Hilfe“ sowie die Seriennummer mussten klar und deutlich ausgesprochen werden, damit sie die Spracherkennungssoftware entschlüsseln konnte), wurde ich von einer Person „beraten“, die ich leider sehr schlecht verstand. Xerox sollte unverzüglich eine genügende Menge Geld in die Headsets und Telefonleitungen ihres Callcenters investieren … Zu allem Unglück nuschelte die Person am anderen Ende auch noch.
Ich erklärte dem „1st Level Supporter“ mein Problem und wies auf die klare Fehlermeldung hin. Leider interessierte er sich nicht sonderlich dafür. Wichtiger fand er, dass mein Arbeitgeber keinen Wartungsvertrag mit Xerox besässe (seit wann hat ein Wartungsvertrag Einfluss auf einen korrekt funktionierenden Treiber!? Dieses Problem trifft alle Kunden, weshalb der Hersteller bedacht sein sollte, solche Hinweise dankbar entgegenzunehmen). Immerhin war er so freundlich und hielt Rücksprache mit seinen „Kollegen“. Leider schienen die 2nd Leveller bereits beim Feierabendbier zu sein, weshalb er mich bat, am nächsten Tag erneut anzurufen. Bis dann hätte er sich bei ihnen über die Fehlerursache erkundigt.
Zweiter Anruf
Heute nun, einen Tag später als geplant, fand ich Zeit, den Support anzurufen. Ich hatte zwar eine andere Person am Draht, musste mich aber wieder mit der vorgeschalteten Spracherkennung messen. Der darauf freundlich grüssende Hotline-Mitarbeiter sprach komisches Deutsch in ein Headset, das höchstens für ein Drittweltland getaugt hätte.
Diesem Herr durfte ich erneut die ganze Geschichte erzählen – und auch dieser Herr schien sich stur an sein Script zu halten, anstelle sich dankend auf meine superbe Fehlermeldung einzugehen. Wieder bemerkte er den fehlenden Wartungsvertrag, doch auch er hielt dann Rücksprache mit den „Software-Leuten“.
Da er mir immerhin aufmerksam zugehört hatte, als ich ihm erzählte, dass der Generic Poscript Driver funktionierte, kam er schlussendlich mit einem für Xerox klar unwürdigen Vorschlag zurück: Ich solle doch einfach die Xerox-PPD benutzen, um den Generic Postscript Driver damit zu überschreiben … Kopfschüttelnd bedankte ich mich für die ausserordentliche Hilfe und hängte den Hörer auf die Gabel.
Die Lösung
Auf mich allein gestellt tauchte ich tiefer in die Dateistruktur von Mac OS X ab auf der Suche nach den PPDs. Hilfreich war How Mac OS X Searches for and Chooses PPD Files, welches die von Mac OS X verwendeten Ordner für Druckertreiber explizit angab:
- /Library/Printers/PPDs/Contents/Resources/
- /System/Library/Printers/PPDs/Contents/Resources/
Ein
$ find . -name pstophaserps
in diesen Ordnern führte kein Binary pstophaserps zutage, das – gemäss meiner Übersetzung des Dateinamens – Postscript zu Phaser-tauglichen Postscript umwandelt.
Immerhin fand ich das PPD des Xerox Phaser 6300DN, öffnete dieses in einem Text-Editor und fand rasch die Zeile
*cupsFilter: "application/vnd.cups-postscript 0 /Library/Printers/Xerox/PDEs/pstophaserps"
Dieses olle Binary hätte als in /Library/Printers/Xerox/PDEs/ liegen müssen – tat es aber nicht. Ein Augenschein vor Ort liess mir ein Lichtlein aufgehen: Im Ordner fand sich ein Binary namens pstoxeroxps! Waren die Treiberentwickler wirklich so unfähig …
… ja! Nachdem ich einen symbolischen Link erstellt hatte
$ cd /Library/Printers/Xerox/PDEs/
$ sudo ln -s pstoxeroxps pstophaserps
und einen weiteren Druckauftrag ausführte, ratterte es endlich im Drucker, und mein Dokument wurde gedruckt.
Danke, Xerox, für die gute Arbeit!