HPLIP auf FRITZ!Box -- Scanner, Tintenstand, Status, Druckkopfreinigung für HP

Hi tehron,

könntest Du die verwendeten Patches auch anhängen? Danke im Voraus.

Beste Grüße,
Whoopie
 
Habs ans Anfangsposting angehängt.
 
Hi,

nochmals danke. Ich bin grad dabei, das alles in Freetz zu integrieren. Sieht zwar noch nicht so schön aus, aber genau so gut wie sane-backends. ;)

Hab ich Deine Erlaubnis, die Webinterface-Seiten in Deinem hp-utils-Paket in Freetz zu verwenden?

Beste Grüße,
Whoopie
 
hp-levels bleibt hier jetzt hängen.

Code:
/var/mod/root # strace hp-levels
execve("/usr/bin/hp-levels", ["hp-levels"], [/* 158 vars */]) = 0
svr4_syscall()                          = -1 ERRNO_4090 (Unknown error 4090)
open("/mod/lib/libhpmud.so.0", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/libhpmud.so.0", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/lib/libhpmud.so.0", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/usr/lib/libhpmud.so.0", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=62808, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aaae000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\10\0\1\0\0\0\360\22\0\0004\0\0\0"..., 4096) = 4096
old_mmap(NULL, 962560, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aabe000
old_mmap(0x2aabe000, 60540, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x2aabe000
old_mmap(0x2aadc000, 4256, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0xe000) = 0x2aadc000
old_mmap(0x2aade000, 831384, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2aade000
close(3)                                = 0
munmap(0x2aaae000, 4096)                = 0
open("/mod/lib/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/libgcc_s.so.1", O_RDONLY)    = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=55452, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aaae000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\10\0\1\0\0\0\340\30\0\0004\0\0\0"..., 4096) = 4096
old_mmap(NULL, 122880, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aba9000
old_mmap(0x2aba9000, 53908, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x2aba9000
old_mmap(0x2abc6000, 1052, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0xd000) = 0x2abc6000
close(3)                                = 0
munmap(0x2aaae000, 4096)                = 0
open("/mod/lib/libc.so.0", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/lib/libc.so.0", O_RDONLY)        = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=427316, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aaae000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\10\0\1\0\0\0\360\251\0\0004\0\0\0"..., 4096) = 4096
old_mmap(NULL, 466944, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2abc7000
old_mmap(0x2abc7000, 375588, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x2abc7000
old_mmap(0x2ac32000, 8076, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x5b000) = 0x2ac32000
old_mmap(0x2ac34000, 18896, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2ac34000
close(3)                                = 0
mprotect(0x2abc7000, 375588, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
munmap(0x2aaae000, 4096)                = 0
open("/home/bofh/freetz-trunk/toolchain/build/gcc-4.2.1-uClibc-0.9.29/mipsel-linux-uclibc/usr/lib/libusb-0.1.so.4", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/mod/lib/libusb-0.1.so.4", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/libusb-0.1.so.4", O_RDONLY)  = -1 ENOENT (No such file or directory)
open("/lib/libusb-0.1.so.4", O_RDONLY)  = -1 ENOENT (No such file or directory)
open("/usr/lib/libusb-0.1.so.4", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=29368, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aaae000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\10\0\1\0\0\0\320\17\0\0004\0\0\0"..., 4096) = 4096
old_mmap(NULL, 94208, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2ac39000
old_mmap(0x2ac39000, 22796, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x2ac39000
old_mmap(0x2ac4e000, 7736, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x5000) = 0x2ac4e000
close(3)                                = 0
munmap(0x2aaae000, 4096)                = 0
open("/home/bofh/freetz-trunk/toolchain/build/gcc-4.2.1-uClibc-0.9.29/mipsel-linux-uclibc/usr/lib/libpthread.so.0", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/mod/lib/libpthread.so.0", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/libpthread.so.0", O_RDONLY)  = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=94518, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2aaae000
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\10\0\1\0\0\00004\0\0004\0\0\0"..., 4096) = 4096
old_mmap(NULL, 147456, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2ac50000
old_mmap(0x2ac50000, 51124, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x2ac50000
old_mmap(0x2ac6c000, 22448, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0xc000) = 0x2ac6c000
old_mmap(0x2ac72000, 6816, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2ac72000
close(3)                                = 0
munmap(0x2aaae000, 4096)                = 0
open("/home/bofh/freetz-trunk/toolchain/build/gcc-4.2.1-uClibc-0.9.29/mipsel-linux-uclibc/usr/lib/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/mod/lib/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/libgcc_s.so.1", O_RDONLY)    = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=55452, ...}) = 0
close(3)                                = 0
open("/home/bofh/freetz-trunk/toolchain/build/gcc-4.2.1-uClibc-0.9.29/mipsel-linux-uclibc/usr/lib/libc.so.0", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/mod/lib/libc.so.0", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/lib/libc.so.0", O_RDONLY)        = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=427316, ...}) = 0
close(3)                                = 0
open("/mod/lib/libc.so.0", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/lib/libc.so.0", O_RDONLY)        = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=427316, ...}) = 0
close(3)                                = 0
open("/mod/lib/libgcc_s.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/libgcc_s.so.1", O_RDONLY)    = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=55452, ...}) = 0
close(3)                                = 0
open("/mod/lib/libc.so.0", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/lib/libc.so.0", O_RDONLY)        = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=427316, ...}) = 0
close(3)                                = 0
open("/mod/lib/libc.so.0", O_RDONLY)    = -1 ENOENT (No such file or directory)
open("/lib/libc.so.0", O_RDONLY)        = 3
fstat(3, {st_mode=S_IFREG|0755, st_size=427316, ...}) = 0
close(3)                                = 0
stat("/lib/ld-uClibc.so.0", {st_mode=S_IFREG|0755, st_size=22472, ...}) = 0
mprotect(0x2ac32000, 4096, PROT_READ)   = 0
mprotect(0x2ac6c000, 4096, PROT_READ)   = 0
mprotect(0x2aabc000, 4096, PROT_READ)   = 0
mprotect(0x2abc7000, 375588, PROT_READ|PROT_EXEC) = 0
ioctl(0, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
ioctl(1, TIOCNXCL, {B38400 opost isig icanon echo ...}) = 0
getpid()                                = 1757
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=0}) = 0
setrlimit(RLIMIT_STACK, {rlim_cur=2040*1024, rlim_max=0}) = 0
rt_sigaction(SIGRT_0, {SIG_DFL}, NULL, 16) = 0
rt_sigaction(SIGRT_1, {SIG_DFL}, NULL, 16) = 0
rt_sigaction(SIGRT_2, {SIG_DFL}, NULL, 16) = 0
rt_sigprocmask(SIG_BLOCK, [RT_0], NULL, 16) = 0
rt_sigprocmask(SIG_UNBLOCK, [RT_1], NULL, 16) = 0

Hast Du ne Ahnung, woran das liegen könnte?
 
Nee, hab ich spontan keine Idee.
Poste doch mal die Ausgabe von hp-levels -l all. Wobei ich vermute, daß da gar keine Ausgabe kommt, weil dein trace noch vor der ersten Ausgabe hängenbleibt. Merkwürdig.

Hm, ich hab dazu http://avahi.org/ticket/192 und https://dev.openwrt.org/ticket/3035 gefunden. Da steht es liegt an der Version von uClibc.
Workaround is that: Using uClibc-0.9.28.x, only uClibc-0.9.29.x has this problem.
 
Da kannst Du recht haben. Warum musste AVM nur auf uClibc 0.9.29 wechseln? :(

Also liegt's auch hier an pthread, und dafür gibt's ja nen Ticket.

Danke,
Whoopie
 
UI, mir ist das gestern beim Neuauschecken aufgefallen.
Habe einen 970CXI an einer 7170 hängen, werde ich mal probieren.

Edit

Damit habe ich nun ein Problem:
Ich habe nur einen Drucker, doch wird, wenn ich den HPLIP auswähl auch gleich SANE mit ausgewählt.
Nicht weiter schlimm doch kompiliert SANE mal wieder nicht ....

Eine Möglichkeit das selbst zu bestimmen ob SANE mit ausgewähtl wird fände ich ganz gut.
 
Zuletzt bearbeitet:
Also liegt's auch hier an pthread, und dafür gibt's ja nen Ticket.
Ach ja, davon wußte ich gar nichts. Dann ist das wohl ein größeres Problem...
hp-levels hängt von libhpmud ab und das hängt von libpthread ab. Da wird man nicht einfach wie bei stunnel anstead threading forking machen können. Zumindest gibts keine configure-Option. Und es wäre hier auch Quatsch zu forken.
 
Zuletzt bearbeitet:
@pengu: Es wird nur der Scanner-Support-Teil von HPLIP verwendet. Also für Dich leider vollkommen uninteressant.
 
OK das hab ich wohl übersehen.

Danke.
 
Es gibt ne neue Version von hp-utils und dementsprechend ein neues Addon-Paket. Außerdem ist darin die neueste HPLIP-Version 2.8.12 enthalten, die wohl ein paar Fixes beim Scannersupport hat und somit für Leute interessant sein könnte, bei denen der Scanner bislang nicht ging.
 
nochmals danke. Ich bin grad dabei, das alles in Freetz zu integrieren. Sieht zwar noch nicht so schön aus, aber genau so gut wie sane-backends. ;)
Hast Du eigentlich schon was in Richtung Verkleinerung models.dat unternommen? Das is eigentlich die größte Hürde und deswegen hatte ich mich nicht daran gemacht, HPLIP in Freetz zu integrieren.
 
@tehron: nein, noch nicht. Aber die Datei wird ganz gut komprimiert. Wie hattest Du Dir das ganze vorgestellt? Mit "sed" die nur den passenden Drucker "auswählen"?

Übrigens sind hp-utils, hplip und sane-backends jetzt im Freetz trunk. Hab das hp-utils Web-Interface auf den aktuellen Stand gebracht (habe das WoL WebIF als Beispiel genommen).
Funktioniert hier ganz gut, ausser dass halt hp-utils wegen der uClibc 0.9.29 pthread-Problematik nicht geht.
 
Hab schon gesehen, daß es im trunk ist. Deswegen auch meine Frage, weil mir beim Bauen das Image um 55kB zu groß geworden ist.
Die models.dat is ja ~600kB groß. Man braucht aber i.d.R. nur den Eintrag für einen Drucker, was dann ~2kB groß ist. Und so gut kann die vollständige Datei wohl nicht komprimiert werden.

Das mit sed oder awk zu machen is kein Problem. Etwa so:
Code:
export printer=officejet_6200_series
awk "BEGIN { found=0 } /^\[.*\]/ || /^$/ { found=0 } /^\[$printer\]/ { found=1 } { if (found) { print \$0 } }" < models.dat > newmodels.dat
Das eigentlich aufwendige is das dann in die Makefiles zu integrieren. Man müßte ja für jeden Drucker (~1500) nen Eintrag erzeugen. Man könnte das vereinfachen, indem man nur für jede Klasse aus models.dat (~600) nen Eintrag erzeugt. Dann müßte jeder wissen, zu welcher Klasse sein Drucker gehört. Und man müßte es trotzdem irgendwie gruppieren nach Deskjet, Laserjet, ...
Evtl. kann man das auch aus der Liste der unterstützten Drucker auf der HPLIP-Seite rausparsen.
Das andere ist, daß hp-utils eigentlich nur für Tintenstrahler Sinn macht.
 
Ich denke, man sollte es nicht zu kompliziert machen.

Hab mal folgendes versucht, geht aber nicht, awk meckert dann:

Code:
Index: make/hplip/hplip.mk
===================================================================
--- make/hplip/hplip.mk	(Revision 2944)
+++ make/hplip/hplip.mk	(Arbeitskopie)
@@ -65,10 +65,12 @@
 $($(PKG)_LIB_HPAIO_TARGET_BINARY): $($(PKG)_LIB_HPAIO_STAGING_BINARY)
 	mkdir -p $(HPLIP_DEST_DIR)/usr/lib/sane
 	mkdir -p $(HPLIP_DEST_DIR)/etc
-	mkdir -p $(HPLIP_DEST_DIR)/usr/share
+	#mkdir -p $(HPLIP_DEST_DIR)/usr/share
+	mkdir -p $(HPLIP_DEST_DIR)/usr/share/hplip/data/models
 	cp -a $(TARGET_TOOLCHAIN_STAGING_DIR)/usr/lib/sane/libsane-hpaio.so* $(HPLIP_DEST_DIR)/usr/lib/sane
 	cp -R $(TARGET_TOOLCHAIN_STAGING_DIR)/etc/default.hplip $(HPLIP_DEST_DIR)/etc
-	cp -R $(TARGET_TOOLCHAIN_STAGING_DIR)/usr/share/hplip $(HPLIP_DEST_DIR)/usr/share
+	#cp -R $(TARGET_TOOLCHAIN_STAGING_DIR)/usr/share/hplip $(HPLIP_DEST_DIR)/usr/share
+	awk 'BEGIN { found=0 } /^\[.*\]/ || /^$/ { found=0 } /^\[$(FREETZ_HPLIP_PRINTER_TYPE)\]/ { found=1 } { if (found) { print $0 } }' < $(TARGET_TOOLCHAIN_STAGING_DIR)/usr/share/hplip/data/models/models.dat > $(HPLIP_DEST_DIR)/usr/share/hplip/data/models/models.dat
 	$(TARGET_STRIP) $@
 
 $(pkg):
Index: make/hplip/Config.in
===================================================================
--- make/hplip/Config.in	(Revision 2944)
+++ make/hplip/Config.in	(Arbeitskopie)
@@ -4,3 +4,10 @@
 	select FREETZ_PACKAGE_SANE_BACKENDS
 	help
 		HPLIP - HP Linux Imaging and Printing
+
+config FREETZ_HPLIP_PRINTER_TYPE
+	string "printer type"
+	default ""
+	depends on FREETZ_PACKAGE_HPLIP
+	help
+		Put the printer type here as shown in the models.dat

In $(FREETZ_HPLIP_PRINTER_TYPE) müsste dann z.B. "psc_1200_series" stehen.

Beste Grüße,
Whoopie
 
Du mußt die $s im Makefile mit $ escapen und die Anführungszeichen in $(FREETZ_HPLIP_PRINTER_TYPE) loswerden. Also so
Code:
awk 'BEGIN { found=0 } /^\[.*\]/ || /^$$/ { found=0 } /^\['$(FREETZ_HPLIP_PRINTER_TYPE)'\]/ { found=1 } { if (found) { print $$0 } }' < $(TARGET_TOOLCHAIN_STAGING_DIR)/usr/share/hplip/data/models/models.dat > $(HPLIP_DEST_DIR)/usr/share/hplip/data/models/models.dat
 
Wieso lautet der Titel von HPLIP eigentlich "HPLIP 2.8.12 (binary only)"? Also wieso binary only? Ich dachte immer binary only bedeutet, daß einfach wo ein schon kompiliertes Paket heruntergeladen wird.

Bei hp-utils steht noch Version 0.2.0 im menuconfig.

Ich würd das mit dem Druckertyp nicht als Eingabefeld machen. Die ganzen Typen aus der models.dat per Script rauszunehmen und ne Config.in zu erzeugen is ja kein großer Aufwand.

Edit:
update.sh models.dat > Config.in
Code:
#!/bin/sh

[ -z "$1" ] && exit 1

cat <<EOF
config FREETZ_PACKAGE_HPLIP
    bool "HPLIP 2.8.12 (binary only)"
    default n
    select FREETZ_PACKAGE_SANE_BACKENDS
    help
        HPLIP - HP Linux Imaging and Printing

choice
    prompt "Printer Type"
        depends on FREETZ_PACKAGE_HPLIP
        help
            Select your printer type here.

EOF

for printer in `awk '/^\[/ { gsub(/\[|\]/, ""); print }' < "$1"`; do
    PRTR=`echo $printer | tr a-z A-Z`
    echo "  config FREETZ_HPLIP_PRINTER_TYPE_$PRTR"
    echo "      bool \"$printer\""
done

cat <<EOF
endchoice

config FREETZ_HPLIP_PRINTER_TYPE
    string
EOF

for printer in `awk '/^\[/ { gsub(/\[|\]/, ""); print }' < "$1"`; do
    PRTR=`echo $printer | tr a-z A-Z`
    echo "  default \"$printer\" if FREETZ_HPLIP_PRINTER_TYPE_$PRTR"
done

Sind schon ziemlich viele Werte für choice. Wär schön, wenn Page Down in der Auswahl funktionieren würde. :)
Wär auch gut, wenn man mehrere Werte auswählen könnte. Ich weiß aber nicht ob/wie das geht.
 
Zuletzt bearbeitet:
Hi,

"binary only" bedeutet in diesem Fall, dass kein WebIF vorhanden ist.
Die Versionsnummer für hp-utils habe ich lokal schon angepasst.

Das Skript sieht echt super aus. Was hältst Du vom angehängten Patch?

Die models.dat hat paar doppelte Einträge, aber mit ner Tilde am Ende (z.B. photosmart_7200_series~). Vielleicht sollte man die noch filtern.

Beste Grüße,
Whoopie
 

Anhänge

  • hplip.patch.txt
    95.4 KB · Aufrufe: 6
"binary only" bedeutet in diesem Fall, dass kein WebIF vorhanden ist.
AH! Das hatte ich mich eh schon länger gefragt bei anderen Paketen.

Der Patch schaut gut aus. Die Frage is nur, ob man das Update-Kommando ins Makefile mitaufnehmen soll, weil das ganze ja von ner models.dat abhängt, die erst mal aus nem Paket, das runtergeladen werden muß, extrahiert wird. Man wird nicht drumrumkommen, daß jemand bei neuer HPLIP auch ne korrekte Config.in einpflegt.

Das mit den Tilde-Einträgen war mir auch aufgefallen. Ich habs mir aber nicht näher angeschaut, wieso die drin sind. Sind die Einträge identisch mit denen ohne Tilde? Mal schaun.
 
Zuletzt bearbeitet:
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.