Debian ARM und Brother DCP195C mit CUPS

Debian ARM und Brother DCP195C mit CUPS

Ich möchte über LAN auf meinen DCP 195C-Drucker (Brother) zugreifen können. Zu diesem Zweck habe ich mir einen Raspberry Pi gekauft und CUPS darauf installiert. CUPS läuft einwandfrei und auch alles andere läuft reibungslos. Mein Problem ist, dass ich die von Brother mitgelieferten Treiber (sie sind nur für x86 und x64) nicht auf meinem Pi installieren kann. Gibt es eine Option, die ich übersehen habe, um den Treiber auf meinem Pi zu installieren?

Antwort1

Kurz: Sie müssen die PPD-Datei aus dem Linux-Treiber extrahieren

lang:

ERSTE

  • Gehen Sie zur Brothers Driver-Website und suchen Sie nach DCP195:http://support.brother.com
  • Laden Sie die Linux-Deb-Version von "CUPSwrapper-Druckertreiber (DEB-Paket)"
  • Öffnen Sie die deb-Datei mit einem Komprimierungstool und folgen Sie dem Pfad nach unten zu „dcp195ccupswrapper-1.1.3-1.i386/opt/brother/Printers/dcp195c/cupswrapper“
  • Extrahieren Sie die Datei „brother_dcp195c_printer_en.ppd“

ZWEITE

  • Öffnen Sie die CUPS-Weboberfläche über https://192.168.1.2:631/admin [ersetzen Sie die IP durch PIs].
  • Klicken Sie auf „Drucker hinzufügen“, wählen Sie „Brother DCP-195C (Brother DCP-195C)“ und drücken Sie „Weiter“
  • Bearbeiten Sie ggf. die folgenden Angaben, aktivieren Sie „Drucker freigeben“ und klicken Sie auf „Weiter“.
  • Navigieren Sie unter „Oder stellen Sie eine PPD-Datei bereit“ zur extrahierten Datei „brother_dcp195c_printer_en.ppd“ und laden Sie diese hoch. Folgen Sie den nächsten Schritten...fertig

Danach war der Drucker verfügbar, allerdings mit einem Fehler: „Datei „/usr/lib/cups/filter/brlpdwrapperdcp195c“ nicht verfügbar“. Da ich den Treiber auf meinem Ubuntu-Laptop installiert hatte, konnte ich die Datei einfach von meinem Laptop unter /usr/lib/cups/filter/ auf den Pi kopieren.

Danach konnte mein Laptop den Drucker nicht mehr finden

Antwort2

Den i386-Treiber bekommt man auf dem Raspberry Pi durch Emulation zum Laufen, obwohl dieser einen anderen Befehlssatz hat. Das ist zwar sehr langsam und dauert Minuten, bis der Ausdruck kommt, aber es klappt.

Den Hinweis habe ich in diesem Forumsbeitrag gefunden: https://www.raspberrypi.org/forums/viewtopic.php?f=28&t=15526&start=25#p708038

Schritt 1: Installieren Sie den Treiber gemäß den Anweisungen in der Brother-Dokumentation

Sie sollten ein Verzeichnis wie /opt/brother/Printers/dcp195c/lpdmit der Filter-Binärdatei haben brdcp195cfilter. Diese Binärdatei wird vom filterdcp195cShell-Skript direkt daneben im selben Verzeichnis aufgerufen.

Ich glaube, sie bieten jetzt ein Installationsskript an, aber ich habe es ohne gemacht. Irgendwo gibt es Anweisungen, was vorinstalliert werden muss.

Schritt 2: Die i386-Emulation zum Laufen bringen

Dies geschieht durch Befolgen der Schritte unterhttps://wiki.debian.org/QemuUserEmulation

Am Ende von Schritt 2 sollten Sie in der Lage sein, i386-Binärdateien wie normale Binärdateien auszuführen. In ps axwerden sie angezeigt

Installieren Sie Qemu

Installieren Sie die Pakete qemu, binfmt-supportund qemu-user-static.

Führen Sie es aus update-binfmts --display, um zu sehen, welche Binärformate unterstützt werden. Sie sollten unter Raspbian und Debian automatisch aktiviert sein.

Installieren Sie x86-Unterstützungsbibliotheken

Fügen Sie unter Raspbian eine Zeile wie diese hinzu /etc/apt/sources.list:

## Debian i386
deb [arch=i386] http://http.debian.net/debian stable main contrib non-free

Ein anderes Debian-Repository reicht auch aus.

Das Raspbian-Repository enthält keine x86-Binärdateien. Fügen Sie daher [arch=armhf]Ihren vorhandenen Zeilen eine Zeile hinzu, die mit beginnt deb. Die Zeilen, die mit beginnen, deb-srckönnen unverändert bleiben.

Sagen Sie Raspbian, dass Sie ein Multiarch-System mit i386-Paketen möchten, und holen Sie sich die i386-libc. Damit dieser updateSchritt funktioniert, müssen Sie die Debian-GPG-Schlüssel für die Paketverwaltung importieren und ihnen vertrauen.

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386

brdcp195cfilterAn diesem Punkt sollten Sie in der Lage sein , die mit dem Treiber gelieferte Binärdatei auszuführen :

$ ./brdcp195cfilter 
ERROR: ld.so: object '/usr/lib/arm-linux-gnueabihf/libarmmem.so' from /etc/ld.so.preload cannot be preloaded (cannot open shared object file): ignored.
Error: invalid option !!

Wenn Sie diese Ausgabe sehen, hat es funktioniert. Die Error: invalid option !!Zeile brdcp195cfilterbeschwert sich, dass Sie Argumente hätten übergeben sollen.

Optional: Entfernen Sie die ld.soFehlermeldung

Raspbian verwendet /etc/ld.so.preloaddie Bibliothek, um sie in alle Prozesse vorzuladen libarmmem. Die Bibliothek ersetzt einige teure Speicherroutinen durch schnellere Routinen, die in ARM-Assembler geschrieben sind, ist aber zum Ausführen von Raspbian nicht unbedingt erforderlich.

Sie können die Warnung ignorieren, aber auch die Zeile entfernen oder auskommentieren /etc/ld.so.preload. Die Warnung wird in den CUPS-Fehlerprotokollen angezeigt, wenn sie nicht deaktiviert wird.

Schritt 3: Mit CUPS zum Laufen bringen

Wenn Sie den Anweisungen auf der Brother-Website folgen, sollte eine CUPS-Installation möglich sein.

Unzuverlässige USB-Verbindung

Auf meinem Raspberry dmesgwechselte das Protokoll irgendwann schnell zwischen diesen Zeilen:

[58981.586842] usblp0: removed
[59222.794260] usblp 1-1.3:1.0: usblp0: USB Bidirectional printer dev 8 if 0 alt 0 proto 2 vid 0x04F9 pid 0x0222

localhost:631Für mich hat es sich gelöst , indem ich zur CUPS-Weboberfläche gegangen bin und den Drucker im Abschnitt „Drucker“ so geändert habe, dass er das von CUPS erkannte USB-Gerät und nicht das usb://dev/usb/lp0Gerät verwendet.

Lassen Sie den Drucker Daten mit normaler Geschwindigkeit empfangen

brdcp195cfilterist ein Schritt im Druckprozess, der eine riesige Eingabe-Bitmap empfängt und in etwas konvertiert, das später an das Druckergerät weitergeleitet wird. Ich habe eine Eingabegröße von ~90 MB für eine einfache „Hallo Welt“-Nachricht oben auf der Seite gemessen.

Die Emulation auf dem Raspberry ist nicht schnell genug, um mit der Datenzufuhr zum Drucker Schritt zu halten. Der Druckvorgang funktioniert, aber ich habe beim Warten auf Daten unangenehme Geräusche von den aktiven Druckermotoren gehört.

Um dies zu beheben, installieren Sie das Dienstprogramm spongeaus dem moreutilsPaket und bearbeiten Sie es filterdcp195cso, dass die Ausgabe von $BRCONV $BRCONV_OP(auch bekannt als brdcp195cfilter) durch weitergeleitet wird sponge. Am Ende der Datei sollten drei Zeilen in den Fällen „PostScript“, „PDF“ und „*“ stehen, die mit enden ... | $BRCONV $BRCONV_OP | sponge.

Dies führt dazu, dass die gesamte Ausgabe des lang laufenden Konvertierungsprozesses aufgebraucht und erst dann auf einmal an den Drucker gesendet wird, wenn die Konvertierung abgeschlossen ist. Auf diese Weise dauert es länger, bis der Druckvorgang beginnt, aber der Drucker empfängt seine Daten in normaler Geschwindigkeit.

( spongespeichert die gepufferten Daten in einem temporären Verzeichnis, sodass Sie nicht durch den RAM des Raspberry Pi eingeschränkt sind)

Antwort3

Günthers Antwortwar sehr hilfreich. Dies ist teilweise eine Fortsetzung meiner eigenen Erfahrungen und Informationen.

Ich habe keine Probleme mit Kernelmodulen festgestellt; dies wurde wahrscheinlich in den letzten sechs Jahren behoben.

Ich habe dies zuerst auf einem Raspberry Pi 3 getestet. Der Druckvorgang ist langsam (~3 Minuten pro Seite), aber ich verwende den Drucker selten, also ist das akzeptabel.

Um die ld.soFehlermeldung zu vermeiden, können Sie das raspi-copies-and-fillsPaket entfernen.

Ich fand es notwendig, Debians libc6:i386und zu installieren libc6:armhf, da diese Pakete eine exakte Versionsübereinstimmung erfordern und die Raspbian-Version beispielsweise enthält +rpi1. Debians armhf-Pakete scheinen auf Raspberry Pi 3 einwandfrei zu funktionieren; ich glaube, sie sollten auf Raspberry Pi 2 (armv7) und höher und dem neuen Raspberry Pi Zero 2 W funktionieren, aber nicht auf Raspberry Pi 1 oder Zero/W (armv6). Hinweis: Jeder, der Distributionen mischt, sollte sich ansehen man apt_preferences.

Ich wollte einen Raspberry Pi Zero W als Druckserver verwenden. Dieser ist noch langsamer (~5 Minuten pro Seite) und kann Debians armhf-Pakete nicht verwenden. Nach viel Lesen und Ausprobieren gelang es mir, ein Raspbian libc6:i386-Bootstrap-Paket aus dem Quellcode zu erstellen.

Den Quellcode zu erhalten ist einfach:

apt-get source glibc
cd glibc-N.NN

Es stellt sich heraus, dass der nächste Schritt darin besteht, Build-Profile auszuwählen.

https://wiki.debian.org/BuildProfileSpec

  • crossweil wir Cross-Compiling betreiben
  • stage2weil wir glibc bootstrappen müssen
  • nobiarchvermeidet das Erstellen von amd64/x32-Paketen
  • nocheckeliminiert eine Build-Abhängigkeit

Ich dachte, es sollte möglich sein, Build-Abhängigkeiten wie folgt zu installieren:

sudo apt-get -a i386 --build-profiles=cross,stage2,nobiarch,nocheck build-dep glibc

Dies schlug jedoch fehl, da einige Pakete nicht verfügbar waren, z. B. perl:i386. Vielleicht mache ich etwas falsch? Das scheint wahrscheinlich, da ich nur sehr begrenzte Kenntnisse über Debian-Pakete habe. Ich habe stattdessen Folgendes gemacht:

sudo apt-get build-dep glibc

Überprüfen Sie dann debian/control, welche Version gccerforderlich ist, und:

sudo apt install dpkg-cross gcc-10-i686-linux-gnu g++-10-i686-linux-gnu 

Dies ist oft gleichbedeutend mit der Installation von crossbuild-essential-i386.

Wir können jetzt bauen.

dpkg-buildpackage --no-sign -b -a i386 --build-profiles=cross,stage2,nobiarch,nocheck -d

Anmerkungen:

  • Der Build-Prozess dauert auf einem Single-Core-Armv6-Raspberry Pi sehr lange. Ich empfehle, zum Erstellen von Paketen einen schnelleren Raspberry Pi zu verwenden.
  • Dieses „Bootstrap“-Paket war für meine Zwecke ausreichend. Ich weiß nicht, ob es möglicherweise einige funktionale Einschränkungen hat.
  • Als ich versuchte, mein Paket zu installieren libc6:i386, kam es zu Konflikten mit der vorhandenen changelog.Debian.gzDatei von Raspbian libc6:armhf. Ich habe die vorhandene Datei umbenannt und das Paket wurde korrekt installiert.

verwandte Informationen