
Wir haben einen CUPS-Server mit Ubuntu 14.04, auf dem etwa 10 HP-Drucker konfiguriert sind. Wir haben eine Mischung aus Windows-, Linux- und Mac-Clients, die problemlos auf dem Server drucken.
Einwandfrei, bis einige Macs vor Kurzem auf Sierra aktualisiert wurden. Wenn ein Benutzer jetzt versucht, über den Server zu drucken, verhält sich der Client normal, ebenso wie CUPS. Der Auftrag wird über den Server verarbeitet und das Auftragsprotokoll zeigt, dass der Auftrag ordnungsgemäß gedruckt wurde. Aus dem Drucker kommt jedoch nichts. Die Mac-Clients können über AirPrint direkt auf dem Drucker drucken.
Wir hatten eine ältere Version von CUPS, also haben wir einen neuen 16.04-Server mit den neuesten CUPS erstellt, gleiches Ergebnis. Wir können direkt vom Druckserver auf Port 9100 auf dem Drucker drucken, also funktioniert dieser Teil einwandfrei.
Kann man davon ausgehen, dass das Problem nicht bei CUPS, sondern bei MacOS 12.12 liegt? Hat jemand eine Idee zur Fehlerbehebung?
Antwort1
MacOS-Rechner verwenden ihren eigenen Cups-Server. Für moderne HP-Laserdrucker generiert Cups PostScript-Ausgaben, allerdings mit einigen speziellen Einstellungen für den Zieldrucker. Der Cups-Server auf dem Linux-Rechner analysiert die PostScript-Eingabe und verwendet seine eigenen Einstellungen, um die Ausgabe neu zu generieren. Unter Linux wird das Filterskript /usr/lib/cups/filter/hpps aufgerufen, um die Ausgabe für die meisten HP-Laserdrucker zu generieren. Das Problem ist die PostScript-Ausgabe von MacOS, die von Cups unter Linux scheinbar ignoriert wird. Das HPPS-Filterskript wird mit einer leeren Datei aufgerufen und generiert eine leere Seite. Der Drucker ignoriert dies. Wir haben zwei Workarounds für das Problem gefunden:
1) Senden Sie die Ausgabe von MacOS komprimiert als gzip an den Linux-Server. Der CUPS-Server dekomprimiert die Ausgabe und leitet sie an den HPPS-Filter weiter. Der Filter sendet die Quelldatei mit eigenem Header und Footer an den Drucker. Ohne spezielle Einstellungen (z. B. Banner) ist die Ausgabe des Filters identisch mit der MacOS-Ausgabe. Um dies zu erreichen, fügen Sie hinzu
?compression=gzip
zur Cups-URI in Ihrem MacOS-Cups-Server. Rufen Siehttps://localhost:631Ihren Browser (aktivieren Sie die Schnittstelle im Terminal mit „cupsctl WebInterface=yes“). Wählen Sie „Drucker ändern“, authentifizieren Sie sich und wählen Sie das IPP- oder IPPS-Druckprotokoll. Die Ziel-URI enthält die vorherige URI. Fügen Sie die obige Zeile an, z. B.
ipps://<ubuntu-cups-server>/printers/<printername>?compression=gzip
Behalten Sie die Beschreibung und Modelleinstellungen bei und speichern Sie.
2) Installieren Sie einen RAW-Drucker auf dem Linux-Server mit derselben Ziel-URI wie der HP-Drucker. Wählen Sie jedoch Raw als Hersteller und Modell für den Drucker. Wenn Ihr Drucker beispielsweise „hp1“ heißt, fügen Sie „hp1_raw“ als zweiten Drucker hinzu. Verwenden Sie unter MacOS die RAW-Drucker-URI als Ziel, z. B.
ipps://<ubuntu-cups-server>/printers/hp1_raw
Ein kleines Risiko bleibt. Wenn jemand unter Linux eine Nicht-PostScript-Datei an die Raw-Warteschlange sendet, druckt der Drucker diese Datei als Text. Sie erhalten möglicherweise viele Schmierpapierstücke, wenn Sie eine kleine PDF-Datei drucken.
Antwort2
Der hpps
Filter aus der hplip
Verpackung ist defekt. Wenden Sie das Pflaster an:
--- /usr/lib/cups/filter/hpps.shipped 2017-01-13 17:23:49.000000000 +0100
+++ /usr/lib/cups/filter/hpps 2017-03-23 14:51:09.904355996 +0100
@@ -144,6 +144,9 @@
try:
job_id, username, title, copies, options = args[0:5]
+ if len(args) > 5:
+ input_fd = os.open(args[5], os.O_RDONLY)
+
job_id = int(job_id)
except IndexError:
bug("Invalid command line: invalid arguments.")
@@ -376,7 +379,7 @@
while True:
try:
- data = os.read(0, 4096)
+ data = os.read(input_fd, 4096)
except IOError:
bug('Unable to read from standart input')
sys.exit(CUPS_FILTER_FAILED)