25. Februar 2007 - 23:08
CUPS USB Drucker automatisch aktivieren/deaktivieren
Projektseite
Dieser Blogeintrag ist einem Projekt zugeordnet.
Die Informationen auf dieser Seite sind möglicherweise nicht mehr aktuell. Bitte lies die Projektseite, um die aktuellsten Informationen und eine Übersicht weiterer verwandter Einträge zu erhalten.
Folgendes Szenario bereitete mir schon eine Weile Kopfzerbrechen. Bei meiner altgedienten SuSE 9.0 Installation im elterlichen Heim soll Drucken nach folgendem Schema möglich sein:
2. zum USB Laserdrucker laufen, diesen einschalten
3. den Ausdruck mitnehmen und Drucker wieder ausschalten Hört sich doch eigentlich gar nicht sooo viel verlangt an. Allerdings macht CUPS einem da einen Strich durch die Rechnung, da es bei Erhalt eines neuen Druckauftrages sofort versucht diesen an den Drucker zu senden. Ist dieser ausgeschaltet so ändert CUPS den Status der Warteschlange auf “stopped”.
Schaltet man nun den Drucker ein, wird dieser leider nicht automatisch wieder von CUPS erkannt. Die Warteschlange bleibt angehalten.
Einzige Möglichkeit ist im CUPS Webinterface den Drucker manuell wieder zu starten, was zu erhöhtem Laufaufwand (ja ich weiß ist gesund, aber ich bin faul ;) und nötiger “Schulung” der Familienmitglieder führt. Da hab ich mir natürlich was besseres einfallen lassen…
Funktionsweise
Mag sein, dass das Problem bei neueren CUPS Versionen bereits behoben ist, ich habe mir einfach mal mit einem kleinen Script ausgeholfen, welches
Mag sein, dass das Problem bei neueren CUPS Versionen bereits behoben ist, ich habe mir einfach mal mit einem kleinen Script ausgeholfen, welches
/var/log/messages überwacht.
Konkret hält das Script einfach Ausschau nach der Ich-hab-ein-neues-USB-Gerät-entdeckt Nachricht des USB-Moduls und achtet bei mir zusätzlich auch noch auf die genauen Parameter mit denen sich mein Drucker meldet. So kann man in kleinen Abständen immer wieder das syslog auf die An- und Abmeldenachrichten des Druckers überprüfen und jeweils die Druckerwarteschlange im CUPS aktivieren oder deaktivieren.
Hinweis: Das Intervall sollte nicht zu kurz gewählt werden, da sonst unnötigerweise Rechenzeit verschwendet wird. Außerdem werden Sie die regulären Ausdrücke für ihren Drucker sehr wahrscheinlich anpassen müssen, aber dazu später mehr.
Installation
1. Das Skript auto_printer_state.sh Downloaden und nach
Um die speziellen Meldungen Ihres Druckers zu ermitteln können Sie mit
Jetzt müssen Sie die gegeben Ausdrücke im Skript so anpassen, dass diese auf die Meldungen Ihres Druckers passen, sonst wird das Skript nicht mit Ihrem Drucker funktionieren. Hinweis: Das Erstellen korrekter regulärer Ausdrücke ist meistens nicht gerade trivial. Sollten Sie damit Probleme haben empfehle ich Ihnen die Lektüre des Wikipedia-Artikels. Sollten Sie dennoch nicht weiter kommen können Sie gerne auch einen Auszug Ihrer
1. Das Skript auto_printer_state.sh Downloaden und nach
/usr/bin/auto_printer_state.sh kopieren.
2. Das Skript ausführbar machen. Dazu auf der Konsole chmod +x /usr/bin/auto_printer_state.sh eingeben.
3. Nun kommt der schwierige Teil. Das Suchen nach den Meldungen mit denen sich der Drucker meldet bzw. abmeldet geschieht mit Hilfe regulärer Ausdrücke. Diese sind im Skript in den beiden Variablen TRIGGER_ON=”" und TRIGGER_OFF=”" definiert.Um die speziellen Meldungen Ihres Druckers zu ermitteln können Sie mit
tail -f /var/log/messages die Einträge Ihres syslogs verfolgen während Sie Ihren Drucker einmal ein- und wieder ausschalten. Jetzt müssen Sie die gegeben Ausdrücke im Skript so anpassen, dass diese auf die Meldungen Ihres Druckers passen, sonst wird das Skript nicht mit Ihrem Drucker funktionieren. Hinweis: Das Erstellen korrekter regulärer Ausdrücke ist meistens nicht gerade trivial. Sollten Sie damit Probleme haben empfehle ich Ihnen die Lektüre des Wikipedia-Artikels. Sollten Sie dennoch nicht weiter kommen können Sie gerne auch einen Auszug Ihrer
/var/log/messages als Kommentar posten und ich werde versuchen Ihnen damit weiterzuhelfen.
4. Als SuSE 9.0 User können Sie nun Ihr altes CUPS Startscript unter /etc/init.d mit einer angepassten Version ersetzen (chmod +x /etc/init.d/cups nicht vergessen ;), um auto_printer_state.sh automatisch mit CUPS zu starten oder sie führen als root einfach auto_printer_state.sh & auf der Konsole aus.
5. Das sollte es gewesen sein ;)
Weitere Artikel, die Dich interessieren könnten...
7 Kommentare »
RSS Feed für Kommentare zu diesem Eintrag. TrackBack URI


[...] Edit: Das Problem mit dem automatischen deakitiever der Druckerwarteschlange sobald man den Drucker ausschaltet habe ich mit einem Skript gelöst, dass die Warteschlange abhängig vom Drucker automatisch aktiviert bzw. deaktiviert. [...]
Pingback von CUPS/IPP - Drucker unter Windows einbinden — 3. Juli 2007 @ 21:29
Hi, habe ein ähnliches Script gebastelt, dass allerdings das Spool-Verzeichnis überwacht und bei neuen Spools prüft, ob der Drucker angeschlossen ist und diesen ggf. startet. Anderer Ansatz, funktioniert aber auch:
#! /bin/sh
while [ true ]
do
# wait for some seconds to save CPU time
sleep 10
# check the cups spool dir for new jobs
CHECKSPOOL=$(ls /var/spool/cups/d* | grep such)
if [ "$CHECKSPOOL" == "" ]; then
echo “Spool data found. Starting printer …”
# Look for my Canon MP780. Find out your ID:VENDOR using lsusb
CHECKPRINTER=$(lsusb -d 04a9:1707)
if [ "$CHECKPRINTER" ]; then
cupsenable Canon_MP780_USB_1
sleep 60
fi
fi
done
Kommentar von foogy — 29. August 2007 @ 16:58
Danke für die gute Idee und das Script foogy. Deine Lösung gefällt mir fast noch besser als meine. Ist jedenfalls ressourcensparender, da nicht immer das Syslog durchgeackert werden muss.
Meins ist dafür flexibler. Irgendwan sollte das mal so erweitert werden, dass man auf beliebige Meldungen im Syslog eine entsprechende Aktion definieren kann.
Irgendwann… ;)
Kommentar von flo — 30. August 2007 @ 12:31
In z.B. /etc/udev/rules.d/49-printer.rules
SUBSYSTEM==”usb”, KERNEL==”lp*”, SYSFS{product}==”i550″, NAME=”usb/%k”, SYMLINK+=”i550″, GROUP=”lp” PROGRAM=”/usr/sbin/cupsenable tp0″
Dann macht udevd alles allein :-))
Kommentar von harrix — 18. Dezember 2007 @ 22:35
Cool ^^
Wusste doch, dass ich net drum rum komm mich damit mal zu beschäftigen. Weiß allerdings gar net, ob SuSE 9.0 schon udev hat. Das ist auf dem Rechner, auf dem das Skript läuft nämlich installiert :(
Muss wohl doch mal ne ordentliche Distribution her ;)
Kommentar von flo — 19. Dezember 2007 @ 13:16
Script mit opensuse 11.1 nicht mehr nötig.
Hab den HP Laserjet 6P nach der Deiner Anleitung
unter VISTA eingerichtet -> läuft
(anders, über IP Adr. wie üblich, ging’s NICHT!)
Auch Ausschalten und wieder Einschalten geht ohne Script.
Danke
Kommentar von FW1704 — 19. Dezember 2008 @ 13:11
habe das gleiche Problem unter CUPS 1.3.9 folgendermaßen gelöst.
* Edit cupsd.conf. Please insert the following lines at the end of the file if your currenct version of the file doesn’t have these values.
#
# JobRetryInterval in Sekunden
#
# The JobRetryInterval directive specifies the number of seconds
# to wait before retrying a job. This is typically used for fax queues
# but can also be used with normal print queues whose error policy
# is retry-job.
# The default is 30 seconds.
JobRetryInterval 15
#
# JobRetryLimit
#
# The JobRetryLimit directive specifies the maximum number of times
# the scheduler will try to print a job. This is typically used for
# fax queues but can also be used with normal print queues
# whose error policy is retry-job. The default is 5 times.
#
# 40 reicht aus, um Drucker in
# 10 min einzuschalten , damit die Jobs noch gedruckt werden
JobRetryLimit 120
* Edit printers.conf. Change the line ErrorPolicy to ErrorPolicy retry-job
# possible values for ErrorPoliy:
# abort-job – Abort the job and proceed with the next job in the queue
# retry-current-job – Retry the current job immediately
# retry-job – Retry the job after waiting for N seconds; the cupsd.conf JobRetryInterval directive controls the value of N
# stop-printer – Stop the printer and keep the job for future printing; this is the default value
…
ErrorPolicy retry-job
….
#
Funktioniert bei mir perfekt auf einer NSLU2 mit unslung.
Kommentar von jpgorganizer — 24. Dezember 2008 @ 17:08