Wie setze ich den CUPS-Drucker über die Befehlszeile fort?


42

Ich habe Drucker in CUPS, die aufgrund von Treiberproblemen (HP 1010) von Zeit zu Zeit in Pause gehen.

Ich möchte ein Shell-Skript schreiben, das einmal pro Stunde ausgeführt wird, um einen Drucker in CUPS wiederaufzunehmen. Aber ich habe keine Ahnung, nachdem ich einige Minuten gegoogelt habe, wie der Drucker von der Shell-Befehlszeile aus fortgesetzt werden kann.


Was ist die Ursache dafür? Zum einen scheint mein WLAN-Drucker beim Ausschalten die Markierung "Aktiviert" zu löschen. Selbst wenn der Drucker wieder eingeschaltet wird, wird das Aktiviert-Flag nicht wieder aktiviert. .. --- Jobs stapeln sich dann in der Druckwarteschlange. Die Fehlermeldung lautet "filter failed". Wenn ich dieses Kästchen in den Druckereinstellungen ankreuze, beginnt der Drucker erneut zu drucken.
Elliptical View

Antworten:


66

Es gibt den Befehl cupsenable.

cupsenable printer

Startet einen deaktivierten Drucker (um den Druckernamen herauszufinden, können Sie Ihre Drucker mit lpstat -poder auflisten lpc status).

Möglicherweise müssen Sie den Befehl als root oder über sudo ausführen. Wenn Sie also den Drucker in einem Shell-Skript aktivieren müssen, müssen Sie die Shell zur crontab von root hinzufügen oder Ihre sudoers-Datei bearbeiten.


1
+1 Diese Antwort hat im Gegensatz zur "use the overbloated cups config" (wie in superuser.com/a/280400/160771 ) wirklich geholfen. Auch es ist mehr auf den Punkt, da OP die Kommandozeile kennen wollte
humanityANDpeace

25

Ihr Problem kann je nach der von Ihnen ausgeführten CUPS-Version auf unterschiedliche Weise gelöst werden.

  1. Weitere aktuelle Versionen von CUPS (Version 1.2 und höher) sind mit einer eingebauten Funktionen , die hier helfen könnten. Es heißt "ErrorPolicy". Die Standardeinstellung ist in cupsd.conf ausgewählt und bestimmt, wie cupsd Druckwarteschlangen behandeln soll, die sich nicht wie erwartet verhalten. Sie haben drei Möglichkeiten, die einzelnen Warteschlangen mit Tags zu versehen:

    ErrorPolicy abort-job  
    ErrorPolicy retry-job  
    ErrorPolicy retry-this-job  
    ErrorPolicy stop-printer  
    

    Erläuterung:

    • abort-job
      - Brechen Sie diesen Job ab und fahren Sie mit dem nächsten Job in derselben Warteschlange fort

    • retry-job
      - Wiederholen Sie diesen Job, nachdem Sie N Sekunden gewartet haben (wobei N durch die Anweisung "JobRetryInterval" von cupsd.conf bestimmt wird ).

    • retry-this-job
      - Wiederholen Sie den aktuellen Job sofort und auf unbestimmte Zeit.

    • stop-printer
      - Stoppen Sie die aktuelle Druckwarteschlange und bewahren Sie den Auftrag für den späteren Druck auf. Dies ist weiterhin die Standardeinstellung, es sei denn, Sie definieren etwas anderes als die oben genannten Alternativen. Es war auch die Standardeinstellung + nur mögliches Verhalten für alle Warteschlangen in früheren Versionen von CUPS (die, die Sie laut Ihrer Frage loswerden möchten).

    Darüber hinaus können Sie für jede separate Druckwarteschlange individuelle ErrorPolicies festlegen. Diese Einstellung wird in der Datei printers.conf vermerkt. (Setze es von einer Kommandozeile mit lpadmin -p printername -o printer-error-policy=retry-this-job).

  2. Für ältere Versionen von CUPS empfehle ich behden CUPS BackEnd Handler . behist ein Wrapper, der auf jedes CUPS-Backend angewendet werden kann.

    Angenommen, Ihre Druckwarteschlange hat derzeit ein Backend von definiert socket://192.168.1.111:9100und verhält sich so, wie Sie es nicht möchten (wird von cupsd von Zeit zu Zeit aufgrund von Netzwerkverbindungsproblemen deaktiviert). Mit würden behSie Ihr Backend wie folgt neu definieren:

    beh:/0/20/120/socket://192.168.1.111:9100
    

    Dadurch wird ein Auftrag 20 Mal in Intervallen von zwei Minuten wiederholt und die Warteschlange nur deaktiviert, wenn der Vorgang immer noch nicht erfolgreich ist. Oder Sie könnten dies tun:

    beh:/1/3/5/socket://192.168.1.111:9100
    

    Dadurch wird der Auftrag dreimal mit einer Verzögerung von 5 Sekunden zwischen den Versuchen wiederholt. Wenn der Auftrag weiterhin fehlschlägt, wird er verworfen, die Warteschlange wird jedoch nicht deaktiviert. Sie möchten, dass cupsd auf unbestimmte Zeit versucht, eine Verbindung zum Gerät herzustellen? Gut, versuchen Sie Folgendes:

    beh:/1/0/30/socket://192.168.1.111:9100
    

    Versuchen Sie es unendlich lange, bis der Drucker wieder verfügbar ist. Die Intervalle zwischen den Verbindungsversuchen betragen 30 Sekunden. Der Auftrag geht beim Ausschalten des Druckers nicht verloren. Sie können den Druckvorgang absichtlich verzögern, indem Sie den Drucker ausschalten. Eine gute Konfiguration für Desktop-Drucker und / oder Heimanwender.


Insgesamt gibt es keine Notwendigkeit, mess around mit Bash - Skripte, Cronjobs, lpadmin, cupsenableoder , sudoum zu reaktivieren CUPS - Warteschlangen erratisch going down.


Wie kann das Wiederholungsintervall für neuere Versionen von CUPS festgelegt werden?
Sepero

@Sepero: Ja. Beispiel: Sie können versuchen JobRetryInterval 58, es alle 58 Sekunden zu versuchen. Andere mögliche Werte sind 1w(1 Woche), 3d(3 Tage), 7h(7 Stunden) oder 4m(4 Minuten).
Kurt Pfeifle

@Sepero: Alle möglichen cupsd.confParameter bis CUPS v1.7 sind hier dokumentiert: http://www.cups.org/documentation.php/doc-1.7/ref-cupsd-conf.html . Überprüfen Sie die Anmerkungen für jeden Parameter am rechten Rand der Seite: Sie erfahren, welche CUPS-Version ihn als erste unterstützt hat. Viel Spaß beim Entdecken weiterer nützlicher Parameter! :-)
Kurt Pfeifle

8

Die mit -Everwendete Druckeroption lpadminsollte dies tun. Sie können wahrscheinlich nur einen Cron-Job mit dem lpadminBefehl erstellen .

lpadmin [-U username ] [ -h server[:port] ] -p printer option(s)

Stundeneintritt cron:

0 * * * * /usr/sbin/lpadmin -p your_printer -E

Sie können dies hinzufügen, indem Sie Folgendes ausführen:

sudo crontab -e

-EStellen Sie sicher, dass Sie das Zeichen nach dem Druckernamen hinzufügen , da es sich hier um eine Druckeroption und nicht um eine lpadmin-Option handelt. Beachten Sie den folgenden Auszug aus der man lpadminSeite, auf die in einem Kommentar unten hingewiesen wurde:

Wenn vor den Optionen -d, -p oder -x angegeben, erzwingt die Option -E die Verschlüsselung, wenn eine Verbindung zum Server hergestellt wird.


2
Das ist falsch. -E ist in diesem Zusammenhang eine Druckeroption und muss NACH dem Druckernamen eingegeben werden, andernfalls wird nur die Kommunikationsverschlüsselung aktiviert. developer.apple.com/library/mac/documentation/Darwin/Reference/… - Wenn vor den Optionen -d, -p oder -x angegeben, erzwingt die Option -E die Verschlüsselung, wenn eine Verbindung zum Server hergestellt wird.
Scragar

Dies ist die einzige Lösung, die für mich funktioniert. cups hält den Drucker ziemlich oft ohne Grund an. Das error-policybehebt nichts. cupsenablebehebt nichts Tut lpadminnur für mich.
λuser

6

Mein Drucker ist HP CP1215 hatte auch einen Fehler: Drucker angehalten - "/ usr / lib / cups / backend / hp fehlgeschlagen"

Nach dem Neustart von cupsund avahi-daemonund dem Identifizieren des Druckers mit lpstat -pund dem Aktivieren mit cupsenablekonnte ich erneut drucken. Nur ein Neustart cupsund die Aktivierung haben nicht ausgereicht .

Außerdem habe ich die Standardrichtlinie in "Auftrag wiederholen" geändert und in Zukunft Fehler mit cronjob vermieden:

* * * * * lpstat -p |grep "poissa käytöstä" && service avahi-daemon restart; service cups restart; cupsenable HP_Tuloostin

wo poissa käytöstäist finnischer Lokalisierungstext für Wartung "außer Betrieb" und HP_Tuloostinist Name meines Druckers.

Nach meiner Erfahrung sollten sowohl die Standardrichtlinie als auch die aktuellen Druckerrichtlinien so konfiguriert sein, dass sie einen erneuten Druckauftrag ausführen. Die Standardrichtlinie ist nur eine Richtlinie, die Sie bei der Installation eines neuen Druckers erhalten.


2
ls /etc/cups/ppd/ |cut -d "." -f1 |grep -v VMware |xargs -i cupsenable {}

Dies listet alle ppd-Dateien auf, die einen installierten Drucker darstellen, schneidet die ppd-Erweiterung ab, ignoriert eine auf vielen VMware-Servern enthaltene VMware-ppd (wenn Sie dies nicht benötigen, entfernen Sie sie einfach |grep -v VMware) und übergibt die anderen Namen, an xargsdie alle nicht angehalten werden die Drucker.

Ein Cron Job sollte dies gut machen.


1

Wenn das Problem darauf zurückzuführen ist, dass für die grafische Benutzeroberfläche eine Anmeldung erforderlich ist, um den Drucker wiederaufzunehmen, können Sie die grafische Benutzeroberfläche auch ohne Anmeldung wiederaufnehmen. Schalten Sie dazu die Tassen aus und bearbeiten Sie diese Zeile sudo vi /etc/cups/cupsd.conf:

<Limit Pause-Printer Resume-Printer Enable-Printer Disable-Printer Pause-Printer-After-Current-Job Hold-New-Jobs Release-Held-New-Jobs Deactivate-Printer Activate-Printer Restart-Printer Shutdown-Printer Startup-Printer Promote-Job Schedule-Job-After Cancel-  Jobs CUPS-Accept-Jobs CUPS-Reject-Jobs>

Und entfernen Sie die Resume-PrinterDirektive, und starten Sie dann cups neu. Wenn die Direktive in mehr als einem <Limit>Abschnitt enthalten ist, können Sie sie aus dem entsprechenden <Policy>Abschnitt entfernen oder aus allen entfernen. Sie sollten nun in der Lage sein, den Drucker ohne Anmeldung über die GUI fortzusetzen. Ich habe das auf macworld gesehen aber es gilt für alle Tassen, die installiert werden.


1

Die Antwort von Janne oben, zB dies:

* * * * * lpstat -p |grep "poissa käytöstä" && service avahi-daemon restart; service cups restart; cupsenable HP_Tuloostin

... bewirkt, dass CUPS jede Minute neu gestartet wird, unabhängig davon, in welchem ​​Zustand sich ein Drucker befindet. Dies liegt daran, dass die cups restart-Klausel nicht mit dem && gekoppelt ist.

Hier ist ein kurzes BASH-Skript, mit dem ich den Neustart von CUPS von der Erkennung eines Fehlerzustands abhängig gemacht habe.

#!/bin/bash

DATE=$(date)
DS40=$(/usr/bin/lpstat -p |grep "DS40" |grep "disabled")

if [ ! -z "${DS40}" ]; then
    echo "${DATE} - Restarted avahi and cups" >> /var/log/cups/restart-cron-tim.log
    /usr/sbin/service avahi-daemon restart
    /usr/sbin/service cups restart
    /usr/sbin/cupsenable Dai_Nippon_Printing_DS40
fi

Ersetzen Sie "DS40" durch den Drucker, dessen Status Sie suchen, und "deaktiviert" durch die Ausgabe von "lpstat -p" in Ihrer Sprache.


0

Ich habe die cupsd.conf mit der folgenden Zeile aktualisiert:

ErrorPolicy-Abbruchjob

Dann habe ich cupsd mit /etc/init.d/cups restart neu gestartet

Aber wenn ich mir die Datei printers.conf ansehe, wird die ErrorPolicy nicht aktualisiert. In der Dokumentation zu cups muss im Druckerbereich die Zeile "ErrorPolicy abort-job" erscheinen.

Ich habe auch mit lpadmin versucht, die ErrorPolicy zu aktualisieren. Die ErrorPolicy wird durch nichts geändert, oder es wird keine Änderung an der Datei printers.conf vorgenommen.

Was vermisse ich? Wie stelle ich sicher, dass cupsd einen Job bei einem Fehler tatsächlich abbricht?


edit printers.conf
KawaiKx

0

lpadmin -p p-go-avtom2 -v p-go-avtom2 -E

Quelle


5
Möchten Sie genau erklären, was dies bewirkt? Bitte fügen Sie etwas mehr Kontext hinzu.
Slhck

0

Ein paar der Lösungen hier haben bei mir nicht funktioniert (z. B. sudo cupsenable und lpadmin -E).

Wenn Sie Debian 8.6, Cinnamon 2.2.16 (Linux) verwenden, tun Sie dies in Ihrem GUI-Startmenü:

Click Administration | Print Settings,
Then select your stalled CUPS printer,
Click Unlock (and give it your admin password),
Click Server | Settings,
In this click the blue "Problems?" link. 

Für Ubuntu 16.04:

Click System Settings | Printers,
Then Server | Settings,
Click the blue "Problems?" link. 

Dadurch wird die Druckproblembehandlung geöffnet. Sie erfahren, was als Nächstes zu tun ist.

Wahrscheinlich müssen Sie in den Druckeinstellungen nur die Eigenschaft Aktiviert für Ihren CUPS-Drucker überprüfen. (Sie müssen zuerst entsperren).

Um dies zu vermeiden, ändern Sie die "Richtlinie" des Druckers in der oben genannten Druckereinrichtung (unter "Eigenschaften | Richtlinien") in "Auftrag wiederholen".

Reparierte es für mich!

Was verursacht dieses Problem: Wenn mein WLAN-Drucker beim Drucken auf einem CUPS-Drucker ausgeschaltet ist und meine Richtlinie "Drucker anhalten" lautet, wird die Meldung angezeigt, dass ich nicht drucken konnte und der Drucker deaktiviert ist (Aktiviert ist deaktiviert). . Nur wenn die Richtlinie auf "Auftrag wiederholen" eingestellt ist, wird Aktiviert nicht deaktiviert. Einige Minuten nach dem Einschalten des Druckers werden Ihre Aufträge gedruckt.

(Mein anderer Beitrag dazu.)


0

Musste hier mit dem gleichen CUPS-Quatsch umgehen ... Lösung für mich war ein systemd-Skript, das alle n Minuten ausgeführt wird.

/usr/local/cups/enable_cups_printers.sh

#!/bin/sh
for printer in $(lpstat -v | perl -pe 's/device for ([A-Za-z0-9_]+):.*/\1/g')
do
    echo "Forcely enabling printer: $printer"
    # Enable:-E PrinterId:-p
    /usr/bin/lpadmin -E -p "$printer"
done

cups.enable.printers.service

[Unit]
Description = Forcely enable printer occassionally. Why CUPS disables printers in the first place has yet to be determined.

[Service]
Type = simple
ExecStart = /usr/local/cups/enable_cups_printers.sh

[Install]
WantedBy = multi-user.wants

cups.enable.printers.timer

[Unit]
Description=Run enable printers frequently to ensure connection difficulties are remedied.

[Timer]
OnBootSec=15min
OnUnitActiveSec=300

[Install]
WantedBy = timers.target

-1

Wie andere bereits gesagt haben, sollte 'cupsenable' oder 'lpadmin -E' den Trick machen.

Ein verwandtes Problem ist IIRC, bei dem CUPS den Drucker standardmäßig so konfiguriert, dass der Drucker deaktiviert wird, wenn das Drucken eines Auftrags aus irgendeinem Grund fehlschlägt. Sie können dies ändern, um den Job abzubrechen.


-1 wie -E ist für die Verschlüsselung.
Elliptical View

Lesen Sie in einer anderen Antwort oben nach, wie Sie -E ordnungsgemäß als Druckeroption und nicht als lpadmin-Option verwenden.
Elliptical View
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.