Ich versuche, einen über USB angeschlossenen Brother HL-2240-Drucker unter Linux (Ubuntu Xenial mit CUPS 2.1.3-4ubuntu0.3) zum Laufen zu bringen.
Ich habe das Debuggen auf das Maximum gestellt und das CUPS-Fehlerprotokoll teilt mir ausführlich mit, dass alles erfolgreich war. Das Seitenprotokoll listet den Job einfach als erfolgreich auf.
Ich habe die PCL-Datei manuell generiert, /usr/lib/cups/backend/usb
unter strace ausgeführt und es wurde angezeigt, dass sie erfolgreich war und keine erkennbaren Fehler in den Ioctls auftraten (jede Menge USBDEVFS_REAPURBNDELAY
=> EAGAIN
, aber das scheint eine Art Spinlock zu sein).
Aber es wird nichts gedruckt.
Der Drucker funktioniert physikalisch einwandfrei. Ich kann eine Testseite drucken, indem ich die "Go"-Taste am Drucker gedrückt halte.
Ich habe dies mit und ohne USBLP versucht. Ich habe kein Android-Udev (eine Quelle meinte, das könnte relevant sein). Ich habe versucht, Cups neu zu installieren.
Vor Ewigkeiten hat es funktioniert. Ich glaube, ich war damals auf Precise Pangolin. Ja, das ist eine lange Zeit ohne Drucken, und in dieser Zeit gab es vielleicht auch andere relevante Dinge.
Ich bin mir nicht sicher, ob die von mir generierten PCL-Dokumente korrekt sind. Gibt es eine Möglichkeit, diese zu testen? Oder eine Quelle für nachweislich einwandfreie Dokumente für diesen Drucker?
Aber vor allem: Hat jemand eine Idee, wie man das beheben kann?
(Ich wollte sowohl die error_log- als auch die strace-Ausgabe hier posten, aber sie sind viel zu lang. Ich habe sie ziemlich gründlich durchgesehen, aber wenn es merkwürdige Dinge gibt, nach denen man suchen muss, schlagen Sie sie bitte vor.)
Bearbeiten, um hinzuzufügen:
Ich bin ziemlich sicher, dass der richtige Drucker gefunden wird, da im Protokoll Zeilen wie diese stehen:
D [28/Nov/2017:00:06:11 -0500] [Job 19] envp[23]="DEVICE_URI=usb://Brother/HL-2240%20series?serial=B3N746940"
Das ist die gleiche Seriennummer wie in dmesg
.
Außerdem, wenn ich /usb direkt aufrufe:
export DEVICE_URI=usb://Brother/HL-2240%20series?serial=B3N746940
/usr/lib/cups/backend/usb 25 dspeyer hello 1 "" < /etc/hosts
Ich bekomme
DEBUG: Loading USB quirks from "/usr/share/cups/usb".
DEBUG: Loaded 131 quirks.
DEBUG: Printing on printer with URI: usb://Brother/HL-2240%20series?serial=B3N746940
DEBUG: libusb_get_device_list=13
STATE: +connecting-to-device
STATE: -connecting-to-device
DEBUG2: Printer found with device ID: MFG:Brother;CMD:PJL,HBP;MDL:HL-2240 series;CLS:PRINTER;CID:Brother Laser Type1; Device URI: usb://Brother/HL-2240%20series?serial=B3N746940
DEBUG: Device protocol: 2
INFO: Sending data to printer.
DEBUG: Read 195 bytes of print data...
DEBUG: Wrote 195 bytes of print data...
DEBUG: Sent 195 bytes...
DEBUG: Waiting for read thread to exit...
(Und ähnliches, wenn ich statt einer Textdatei eine PCL-Datei verwende, aber länger.)
Wenn ich einen anderen DEVICE_URI verwende, erhalte ich Fehlermeldungen.
Und ein Strace-Befehl auf dem USB enthält:
ioctl(10, USBDEVFS_GET_CAPABILITIES, 0xe4c198) = 0
write(2, "STATE: +connecting-to-device\n", 29STATE: +connecting-to-device
) = 29
ioctl(10, USBDEVFS_GETDRIVER, 0xbf941308) = -1 ENODATA (No data available)
timerfd_settime(9, TFD_TIMER_ABSTIME, {it_interval={0, 0}, it_value={3607344, 967184000}}, NULL) = 0
ioctl(10, USBDEVFS_SUBMITURB, 0xe65ea0) = 0
Das zeigt ziemlich deutlich, dass die Daten über USB übertragen werden.
Antwort1
Ich hatte dieses Problem mit einem Brother HL-L2320D. Ich habe ein paar Dinge falsch gemacht. Dieser Beitrag hat geholfen:
Betreff: Empfehlungen für Druckermarken | lists.debian.org
- Ich war zu schlau und habe versucht, den Drucker direkt über die CUPS-Weboberfläche zu installieren, indem ich die
.ppd
Datei und den CUPS-Filter verwendet habe. Der CUPS-Filter ruft tatsächlich den LPD-Filter auf, daher sind beide erforderlich. Am Ende habe ich nur die von Brother bereitgestellten Debian-Pakete (hll2320dlpr-3.2.0-1.i386.deb
undhll2320dcupswrapper-3.2.0-1.i386.deb
) installiert. - Ich brauchte Unterstützung für 32-Bit-Binärdateien. Der VorschlagHierdes Ubuntu-Pakets
gcc-multilib
hat bei mir funktioniert.
Was den stillen Fehlermodus verursacht, denke ich, dass es verschiedene Teile der Filterpipeline sind, die ausfallen, ohne den Fehler korrekt an CUPS zurückzumelden; dem Drucker wird entweder eine leere oder eine ungültige Datei gesendet, und CUPS erkennt einen Erfolg. Die Filter der obersten Ebene sind Perl-Skripte, die andere Skripte und Binärdateien mit demSystemFunktion oder Backticks, ohne die Exit-Codes zu prüfen.
Antwort2
Erweiterung der Antwort von Shivaram Lingamneni …
Die Installation der Treiber von der Brother-Website hat funktioniert. Soweit ich es anhand der Protokolle nachvollziehen kann, wird der Drucker einfach nichts tun, wenn Sie Daten in einem anderen Format als perfektem PCL über die Leitung an einen Brother-Drucker senden. Sehr ärgerlich.
Antwort3
Nur um die obige Antwort von @Shivaram Lingamneni zu verdeutlichen: Da Linux-Treiber für Brother-Drucker i386 sind, benötigen sie zum Ausführen 32-Bit-Bibliotheken. Im Fall von CentOS reicht es aus, . zu installieren glibc.i686
.