Hallo,
für alle HP-Drucker bietet HP die HPLIP-Linuxtreiber (GPL-Lizenz) an. Zusammen mit CUPS kann man damit aus jedem 'billigen Tintenstrahler' mit USB-Anschluss einen vollwertigen multiusertauglichen Postscript-Netzwerkdrucker machen. Wie das geht möchte ich hier kurz erklären.
Diese Anleitung bezieht sich ganz konkret auf ein TS-119 mit Firmware 3.3.1 und einen beliebigen USB-Drucker von HP. Alle erforderliche Software außer den HPLIP-Treibern wird per ipkg installiert. HPLIP gibt es auch als ipkg, aber damit habe ich keinen Erfolg gehabt. Bei mir sind auch Perl und Python über ipkg installiert, die es alternativ auch als qpkg gibt. Alle Pfade in dieser Anleitung passen nur, wenn man Perl und Python über ipkg installiert hat.
1.) Die folgenden Pakete über IPKG installieren:
ipkg install sedipkg install gawkipkg install grepipkg install coreutils (für basename)ipkg install diffutils (für diff)ipkg install makeipkg install gccipkg install py25-usbipkg install perlipkg install net-snmpipkg install cups-devipkg install cups-docipkg install cups-locale-de (optional: deutsche Menus in Cups)ipkg install ghostscript
Neben diesen Standard-Ipkgs ist das udev-ipkg erforderlich, dass es vom User flexobrian speziell für die TS-119 erstellt wurde. Siehe http://forum.qnapclub.de/viewtopic.php?f=33&t=3882
Es ist aber eigentlich nicht anders zu installieren als alle anderen ipkgs auch:
2.) Den Suchpfad um die Verzeichnisse erweitern, in denen die Programme liegen:
3.) Einen Link setzen, damit Python gefunden wird:
4.) Die Sourcen von HPLIP von http://hplipopensource.com downloaden (die Datei hplip-3.10.9.tar.gz)
5.) Die Datei entpacken:
6.) In das beim entpacken erzeugte Verzeichnis wechseln:
7.) Das folgende Configure-Script läuft nicht mit den von QNAP mitgelieferten Versionen von sed und awk, sondern erfordert die zuvor schon per ipkg installierten Versionen. Damit diese gefunden werden, müssen die von QNAP umbenannt werden. (Bitte beachten: /bin ist eine Ramdisk, nach dem nächsten booten ist die alte Datei wieder da)
7.) Genauso wird lpr umbenannt. Wobei diese Datei nicht beim Configure genutzt wird, sondern später bei jedem Drucken. (Die Datei liegt nicht auf einer Ramdisk, das Umbenennen bleibt wirksam bis zum nächsten Update der Qnap-Firmware. Danach muss dieses Umbenennen wiederholt werden.
9.) der Aufruf des Configure-Scripts, das das Makefile erzeugt, mit den für die TS-119 passenden Optionen:
./configure --with-hpppddir=/opt/share/cups/model --prefix=/opt --libdir=/opt/lib --disable-qt4 --enable-foomatic-drv-install --enable-foomatic-rip-hplip-install --enable-cups-ppd-install --disable-hpijs-install --disable-pp-build --disable-gui-build --enable-cups-drv-install --enable-hpcups-install --enable-network-build --disable-dbus-build --disable-scan-build --disable-fax-build --with-cupsfilterdir=/opt/lib/cups/filter/ --with-cupsbackenddir=/opt/lib/cups/backend --with-mimedir=/opt/etc/cups/
10.) In der nun erzeugten Datei 'Makefile' müssen zwei Zeilen angepasst werden:
muss durch
ersetzt werden.
muss durch
ersetzt werden.
11.) Das Kompilieren:
12.) Die Installation (kopieren der Dateien nach /opt...)
13a.) /dev/mtdblock5 temporär zum editieren mounten (gemäß http://wiki.qnap.com/wiki/Runn…wn_Application_at_Startup
13b.) Eine Datei '/tmp/config/autorun.sh' mit folgendem Inhalt anlegen:
13c.) Die Datei ausführbar machen:
13d.) /dev/mtdblock5 unmounten:
14.) Ein Verzeichnis 'MY_CONFIG' unter '/share/HDA_DATA/' anlegen:
15.) In diesem Verzeichnis eine Datei 'my_autorun.sh' mit folgenden Inhalt anlegen:
#!/bin/sh#Warten bis /opt/ gemountet ist (dies ist noch nicht der Fall wenn die eigentliche 'autorun.sh' ausgefuert wird)while [ ! -d /opt/etc/init.d ];dosleep 1done#/opt/lib zu LD_LIBRARY_PATH hinzufügenecho "/opt/lib" >> /etc/ld.so.conf/sbin/ldconfig # Loads /etc/ld.so.conf#UDEV starten/opt/etc/init.d/S50udevd restart &>/tmp/udev-start.log/opt/sbin/cupsd &
15.) In diesem Verzeichnis eine weitere Datei 'my_set_usb_device_access_rights.sh' mit folgenden Inhalt anlegen:
16.) Beide Dateien ausführbar machen:
17.) Im Verzeichnis /opt/etc/udev/rules.d/ den Inhalt der Datei 01-usb-storage-custom.rules durch folgenden Inhalt ersetzen (dies führt dazu, das die Datei '/share/HDA_DATA/MY_CONFIG/my_set_usb_device_access_rights.sh' beim Erkennen eines beliebigen USB-Devices ausgeführt
# Check for USB devicesBUS=="usb", RUN+="/share/HDA_DATA/MY_CONFIG/my_set_usb_device_access_rights.sh"
18.) Nun muss die TS-119 einmal neu gebootet werden, damit die Scripte ausgeführt werden
19.) Nach dem Booten ein paar Sekunden warten und den USB-Drucker, kurz aus- und danach direkt wieder einstecken. (Beim ersten Einstecken wird das USB-Device durch irgendetwas anders blockiert)
20.) Die USB-Adresse des Druckers ermitteln:
Die Ausgabe dieses Befehls sollte etwa wie folgt aussehen:
Bus 001 Device 004: ID 03f0:6004 Hewlett-Packard DeskJet 5550Bus 001 Device 002: ID 058f:6254 Alcor Micro Corp.Bus 001 Device 001: ID 1d6b:0002
Die USB-Adresse des Druckers wäre in diesem Beispiel 001:004.
21.) In das Verzeichnis /opt/share/hplip wechseln
22.) Dort hp-makeuri mit der ermittelten USB-Adresse aufrufen:
Die Ausgabe müsste in etwa so aussehen:HP Linux Imaging and Printing System (ver. 0.0.0)Device URI Creation Utility ver. 5.0Copyright (c) 2001-9 Hewlett-Packard Development Company, LPThis software comes with ABSOLUTELY NO WARRANTY.This is free software, and you are welcome to distribute itunder certain conditions. See COPYING file for more details.CUPS URI: hp:/usb/deskjet_5550?serial=MY2A81R27B2LDone.
Das Ergebnis ist die CUPS-URI des Druckers, über die der Drucker ab jetzt identifiziert wird.
23.) Im Webbrowser den Servernamen der TS119 mit Port 631 aufrufen:
24.) Verwaltung->Drucker hinzufügen->Lokale Drucker-hp auswählen
25.) Unter Verbindung die zuvor ermittelte CUPS-URI des Druckers einfügen, und die folgenden Dialoge bestätigen und dabei die pps-Datei Eures Druckers auswählen (die mit hpcups im Namen).
26.) Der Server ist nun fertig aufgesetzt. Nun müsst Ihr auf Eurem PC nur noch einen Postscript-Drucker einrichten, dazu benötigt Ihr die pps-Datei, die Ihr zuvor beim Anlegen des CUPS-Druckers ausgewählt habt. Ihr findet sie unter /opt/share/cups/model
Die PPS-Datei beschreibt die Features(Schwarzweiß oder Farbe, Papierformat, Duplex-Druck,...) Eures Druckers, ohne sie könnt Ihr nur einen Generic-Drucker mit minimalen Features einrichten.
Bekannte Probleme:
a.) Beim ersten erkennen des Druckers nach dem Booten wird das USB-Device jedes mal durch etwas anderes blockiert und hplip kann nicht darauf zugreifen. Einmal kurz USB-Stecker ziehen hilft (u.a. erhält der Drucker dadurch eine neue USB-Adresse).
b.) Die hp-... Befehle funktionieren nur wenn man sie von /opt/share/hplip/ aufruft
Die hp-... Kommandozeilenbefehle wie hp-levels funktionieren nur wenn man sie im Verzeichnis /opt/share/hplip/ aufruft, ansonsten erhält man eine Fehlermeldung.
c.) Ich habe mit meinem hp5550 bei einigen Grafiken falsche Farben. Das Fehlerbild ähnelt diesem Bug https://bugs.launchpad.net/hplip/+bug/675936 der dortige Patch half bei mir aber nicht. Es wäre interessant zu erfahren, ob dieses Fehlerbild vom verwendeten Druckermodell oder vom Prozessor abhängt.
Sonstiges:
-Beim debuggen ist der Befehl 'hp-levels' sehr hilfreich. Dieser zeigt eigentlich den Füllstand der Tintenpatronen an, aber wenn dieser Befehl Erfolg hat, weiß man, dass man eventuelle Probleme nicht bei USB und hplip suchen muss, sondern bei CUPS.
Der Befehl hp-check zeigt dagegen immer jede Menge fehlende Abhängigkeiten an.
-hplip ist hier so konfiguriert worden, dass nur die USB-Druckerunterstützung kompiliert wird. Wenn man darüber hinausgehende Funktionen von Multifunktionsgeräten wie Scannen oder Faxen nutzen möchte, muss man die ./configure-Parameter ändern. Dadurch ergeben sich aber jede Menge neue Installationvorraussetzungen.
-Das setzen der USB-Access-Rights durch udev (01-usb-storage-custom.rules und my_set_usb_device_access_rights.sh) ist nur eine Quick&Dirty-Lösung, da die eigentlichen Regeln (die Dateien 55-hpmud.rules und 56-hpmud_support.rules) nicht zum QNAP-Linux passen. Das Problem ist seitens HP auch beschrieben:
ZitatAlles anzeigenFor older distributions (ie: Suse 10.0) the kernel usbfs used /proc/bus/usb/xxx/xxx instead of /dev/bus/usb/xxx/xxx device files. This means the standard udev rules will not work for setting device permissions. You can modify the 55-hpmud.rules file to set device permissions for /proc based systems with the following rule changes.
SYSFS{idVendor}=="03f0", SYSFS{idProduct}=="??11", PROGRAM="/bin/sh -c 'X=%k; X=$${X#usbdev}; B=$${X%%%%.*}; D=$${X#*.}; printf /proc/bus/usb/%%03i/%%03i $$B $$D'", RUN+="/bin/sh -c 'chown lp: %c; chmod 666 %c'"
SYSFS{idVendor}=="03f0", SYSFS{idProduct}=="??02", PROGRAM="/bin/sh -c 'X=%k; X=$${X#usbdev}; B=$${X%%%%.*}; D=$${X#*.}; printf /proc/bus/usb/%%03i/%%03i $$B $$D'", RUN+="/bin/sh -c 'chown lp: %c; chmod 666 %c'"
SYSFS{idVendor}=="03f0", SYSFS{idProduct}=="??12", PROGRAM="/bin/sh -c 'X=%k; X=$${X#usbdev}; B=$${X%%%%.*}; D=$${X#*.}; printf /proc/bus/usb/%%03i/%%03i $$B $$D'", RUN+="/bin/sh -c 'chown lp: %c; chmod 666 %c'"
SYSFS{idVendor}=="03f0", SYSFS{idProduct}=="??04", PROGRAM="/bin/sh -c 'X=%k; X=$${X#usbdev}; B=$${X%%%%.*}; D=$${X#*.}; printf /proc/bus/usb/%%03i/%%03i $$B $$D'", RUN+="/bin/sh -c 'chown lp: %c; chmod 666 %c'"
SYSFS{idVendor}=="03f0", SYSFS{idProduct}=="??17", PROGRAM="/bin/sh -c 'X=%k; X=$${X#usbdev}; B=$${X%%%%.*}; D=$${X#*.}; printf /proc/bus/usb/%%03i/%%03i $$B $$D'", RUN+="/bin/sh -c 'chown lp: %c; chmod 666 %c'"
Aber bisher ist es mir nicht gelungen, dies in eine saubere Lösung umzusetzen.
Ich hoffe das kann jemand gebrauchen. Ich drucke eigentlich nur noch so. Das ganze geht mit der TS119 sehr fix und abgesehen von den genannten 3 Bugs problemlos und mit guter Qualität.
Gruß Jörg