облако

СЕTИ

komfortabel drucken mit dem Raspberry Pi und CUPS

Dies soll keine Anleitung werden, wie man CUPS auf dem RasPi (mit Raspian) installiert und konfiguriert. Hier soll es einen Schritt weiter gehen. Mein Drucker, ein HP LaserJet P2035 steht im Arbeitszimmer und verfügt selbst über keinen LAN-Anschluss. Somit lag die Freigabe dieses Druckers über den RasPi nahe.

Nervig war aber schon immer die Tatsache, daß man, wenn man mit dem Laptop im Wohnzimmer sitzend etwas drucken will, 2x in das Obergeschoss rennen muss: einmal um den Drucker einzuschalten und noch einmal um das Ausgedruckte abzuholen und den Drucker wieder abzuschalten – wenn man letzteres nicht vergisst. Wie man sich einen Gang sparen kann, will ich hier erklären.

Zuvor sei noch gesagt, daß ich meinen Pi mit einem 433MHz-Sender ausgestattet habe, um Funksteckdosen zu schalten. Dies tue ich über das Web-Frontend von raspberry-remote (Anleitung dazu hier). Da der HP LaserJet P2035 einen „richtigen“ Netzschalter besitzt, der ihn komplett vom Netz trennt, ist es dem Drucker egal, ob man ihm per Schalter oder per geschalteter Steckdose den Saft abdreht. Da ich es aber auch zu umständlich finde, vor jedem Druckauftrag den Drucker per Web-Frontend von raspberry-remote einzuschalten, suchte ich eine andere, bequemere Möglichkeit. Diese fand ich in dem CUPS backend-wrapper Tea4CUPS.

Dieses sehr mächtige aber kleine Tool erlaubt nämlich u.a. Kommandos auszuführen, bevor und nachdem CUPS Daten an den Drucker sendet. Ich dachte mir das so:
1. Druckauftrag kommt vom Laptop zum Pi (CUPS)
2. Tea4CUPS schaltet über die Funksteckdose den Drucker ein
3. Druckauftrag geht zum Drucker
4. Drucker wird nach Beendigung des Druckauftrages durch Tea4CUPS wieder (verzögert) abgeschalten

Dazu bin ich so vorgegangen:

Tea4CUPS herunterladen und entpacken:

wget http://www.pykota.com/software/tea4cups/download/tarballs/tea4cups-3.12_official.tar.gz

gunzip -c tea4cups-3.12_official.tar.gz | tar xvf -

Nun folgendes:

Mit dem Editor des Vertrauens die tea4cups.conf an die eigenen Bedürfnisse anpassen. Hier kommt das Kommando, um die Funksteckdose einzuschalten. In meinem Falle habe ich folgendes hinzugefügt:

# schalte Drucker ein und schreibe den Status "1" in die state-Datei
prehook_switch_on : sudo /home/pi/raspberry-remote/send 00111 2 1

Gegebenenfalls muss dieser Befehl an Eure Installation angepasst werden!

  • Die fertig bearbeitete tea4cups.conf nach /etc/cups verschieben.
  • Die Datei tea4cups in das Backend-Verzeichnis von CUPS  /usr/lib/cups/backend/ verschieben.
  • Eben jene tea4cups darf NUR von User root ausgeführt werden! (chown + chmod anwenden!)

Nun noch die /etc/cups/printers.conf editieren. Die Zeile des betreffenden Druckers muss geändert werden.
Vorher:

 DeviceURI usb://HP/LaserJet%20P2035?serial=M413A49 

Nachher:

 DeviceURI tea4cups:usb://HP/LaserJet%20P2035?serial=M413A49 

Zum Abschluss wird CUPS neu geatartet:

sudo /etc/init.d/cups restart

Bekommt nun CUPS einen Druckauftrag, sollte der Drucker automatisch vorher per Funksteckdose eingeschalten werden. Ursprünglich hatte ich auch so nach jedem Druckauftrag den Drucker wieder abgeschalten, in der Praxis ist das aber nicht schön, vor allem bei mehreren Druckaufträgen hintereinander. Deshalb wird er nun per crontab ausgeschalten. Alle 15 Minuten wird geprüft, ob der Drucker im „idle“-Status ist . Somit gehe ich sicher, daß er nicht gerade druckt, oder einen Fehler hat. Folgende Zeilen kommen dazu in den Crontab (Befehl: crontab -e):

# Drucker aussschalten, wenn kein Druckjob
*/15 *    * * 0,1,2,3,4,5,6       sudo lpstat -p | grep -EB1 "idle" > /dev/null && sudo /home/pi/raspberry-remote/send 00111 2 0 > /dev/null

Mir ist bewusst, dass nun alle 15 Minuten ein AUS-Signal an die Steckdose gefunkt wird. Nicht optimal, aber auch nicht schädlich.

US

6 Kommentare zu “komfortabel drucken mit dem Raspberry Pi und CUPS”

  1. Steffen sagt:

    Hallo! Vielen Dank für deine Anleitung!
    Ich bin genauso vorgegangen wie oben beschrieben, doch bei mir kommt es (in seltensten Fällen) dennoch vor, dass der Drucker während des Druckvorgangs abgeschalten wird – das Papier steckt dann noch im Drucker (ist zwar fertig bedruckt aber noch nicht komplett ausgeworfen).
    Wäre es für anstehende Druckaufträge nicht sinniger, wenn NACH dem letzten Druckauftrag 15 Minuten vergehen würden bis sich der Drucker wieder abschaltet? Und wenn ja, wie realisiert man sowas?
    Hatte schon mehrmals den Fall, dass sich kurz vor dem nächsten Druckauftrag der Drucker abgeschalten hat – klar, könnte man die Ausschaltzeit hochsetzen, doch das finde ich eher suboptimal, gerade wenn wenig gedrukt wird…
    Hoffe auf Feedback :)))

  2. Daniel sagt:

    Hallo Steffen,

    Danke für dein Feedback! Eigentlich soll sowas mit dem cron-Eintrag „lpstat -p | grep -EB1 „idle““ (siehe oben) verhindert werden. Bei mir wirft der Befehl das aus:
    „printer HP_LaserJet_P2035 is idle. enabled since ….“
    und nur wenn ein IDLE im Text ist, wird geschaltet. Das hat bis jetzt bei mir problemlos funktioniert – vielleicht aber auch weil ich wenig und nur kurze Dokumente drucke. Und eigentlich ist meiner Meinung auch das erfüllt, was du möchtest: Den Drucker 15 Minuten NACH dem letzten Druckauftrag ausschalten.
    Vielleicht kann man dein Problem mit einem kleinen Script abfangen, sinngemäß etwa: wenn IDLE, dann wait 10 Sekunden, wenn dann immer noch IDLE, dann aus.
    Schwierig für mich, eine Lösung zu finden, wenn ich das Problem nicht reproduzieren kann. 🙁

  3. Steffen sagt:

    Hallo Daniel!

    Vielleicht ist bei meinem Drucker (Brother HL1430) der idle-Zustand erreicht, wenn der letzte rest Toner auf dem Papier ist – aber der Papiertransport noch nicht abgeschlossen wurde…?
    Wie dem auch sei, ist bis jetzt auch nur ein mal passiert, dass eben das Papier im Drucker steckte als der ausgeschalten wurde. Grundsätzlich aber funktioniert es so wie es soll – Druckauftrag kommt, RasPi schaltet Steckdose und dadurch Drucker ein, der wärmt sich auf und druckt das Dokument und schaltet sich nach einer gewissen Zeit wieder aus.

    Jeoch habe ich beobachtet, dass eben der Drucker ca. 15 Minuten nach dem automatischen einschalten ausgeschalten wird und leider nicht 15 Minuten nach dem letzten Druckauftrag.
    Man müsste quasi beim Druckauftrag eine Datei erstellen/den Druckauftrag speichern und von diesem Zeitstempel aus dann den Counter auf 15 Minuten stellen – dann sollte auch das ständige Senden des AUS-Signals ja eigentlich der Vergangenheit angehören?

    Ich oder wir drucken ja auch nicht viel oder lange Dokumente. Jedoch beim erstellen von Einladungen, Probedrucken, Verändern der Vorlagen etc ist es natürlich mehr schlecht als recht, dass sich der Drucker kurz bevor ein erneuter Druckauftrag abgeschickt wird (definitiv kürzer als 15 Minuten) sich der Drucker ausschaltet um nach wenigen Sekunden wieder eingeschaltet zu werden…
    Ich hoffe du kannst jetzt mein Problem das ich habe, etwas besser nachvollziehen 🙂

  4. Steffen sagt:

    Hallo nochmal,
    jetzt konnte ich das Problem erneut beobachten:
    der Drucker hat sich unmittelbar nach dem letzten Druckauftrag ausgeschaltet und da lagen absolut keine 15 Minuten dazwischen, sondern maximal 2-3 Minuten und es war so „um dreiviertel“ herum, sprich sendet der Raspberry vielleicht alle viertel Stunde (also bspw. 17:15, 17::30, 17:45, …) das Ausschaltsignal bzw. viertelstündlich nach dem Start des Raspberrys? Meiner läuft seit damals (Uhrzeit) 16:59 Uhr – und dann würde es von der Zeit her auch wieder hinkommen, dass „wahllos“ abgeschalten wird.
    Grüße
    Steffen

  5. Steffen sagt:

    Korrekt. Habe eben nochmal einen Druckauftrag rausgeschickt, kurz vor 18 Uhr, alles iO. Und punkt 18:00 Uhr ging der Drucker aus, obwohl er erst um 17:54 Uhr eingeschalten wurde.
    Wie kann man das Problem umgehen, dass permanent im Viertelstundentakt ein Signal an den Drucker geschickt wird?
    Leider fehlt mir dazu das nötige KnowHow und hoffe auf eine Lösung :)))
    Viele Grüße
    Steffen

  6. Daniel sagt:

    Ah, ich glaube, ich habe das Problem gefunden. Aber der Reihe nach: Ja, das AUS-Signal wird alle 15 Minuten gesendet, aber NUR wenn der Drucker im Stastus IDLE ist. Das macht der Cron-Eintrag:
    „*/15 * * * 0,1,2,3,4,5,6 sudo lpstat -p | grep -EB1 „idle“ > /dev/null && sudo /home/pi/raspberry-remote/send 00111 2 0 > /dev/null“
    Allerdings schaltet er den Drucker aus, wenn er MINDESTENS ein IDLE findet, wie mir gerade aufgefallen ist. Hast du also neben dem normalen Drucker auch den PDF-Printer installiert, der immer im IDLE-State ist, dann wird auch der Drucker abgeschalten. Das Löschen des PDF-Druckers sollte das Problem lösen.

    Ich bin auch kein Linux-Experte und ein anderer Weg, als der über die 15-Minuten-Regel fällt mir leider nicht ein.

    Grüße,
    Daniel

Kommentieren