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.
Antworten:
Es gibt den Befehl cupsenable.
cupsenable printer
Startet einen deaktivierten Drucker (um den Druckernamen herauszufinden, können Sie Ihre Drucker mit
lpstat -p
oder auflistenlpc 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.
quelle
Ihr Problem kann je nach der von Ihnen ausgeführten CUPS-Version auf unterschiedliche Weise gelöst werden.
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:
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
).Für ältere Versionen von CUPS empfehle ich
beh
den CUPS BackEnd Handler .beh
ist ein Wrapper, der auf jedes CUPS-Backend angewendet werden kann.Angenommen, Ihre Druckwarteschlange hat derzeit ein Backend von definiert
socket://192.168.1.111:9100
und verhält sich so, wie Sie es nicht möchten (wird von cupsd von Zeit zu Zeit aufgrund von Netzwerkverbindungsproblemen deaktiviert). Mit würdenbeh
Sie Ihr Backend wie folgt neu definieren: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:
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:
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
,cupsenable
oder ,sudo
um zu reaktivieren CUPS - Warteschlangen erratisch going down.quelle
JobRetryInterval 58
, es alle 58 Sekunden zu versuchen. Andere mögliche Werte sind1w
(1 Woche),3d
(3 Tage),7h
(7 Stunden) oder4m
(4 Minuten).cupsd.conf
Parameter 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! :-)Die mit
-E
verwendete Druckeroptionlpadmin
sollte dies tun. Sie können wahrscheinlich nur einen Cron-Job mit demlpadmin
Befehl erstellen .Stundeneintritt
cron
:Sie können dies hinzufügen, indem Sie Folgendes ausführen:
-E
Stellen 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 derman lpadmin
Seite, auf die in einem Kommentar unten hingewiesen wurde:quelle
error-policy
behebt nichts.cupsenable
behebt nichts Tutlpadmin
nur für mich.Mein Drucker ist HP CP1215 hatte auch einen Fehler: Drucker angehalten - "/ usr / lib / cups / backend / hp fehlgeschlagen"
Nach dem Neustart von
cups
undavahi-daemon
und dem Identifizieren des Druckers mitlpstat -p
und dem Aktivieren mitcupsenable
konnte ich erneut drucken. Nur ein Neustartcups
und die Aktivierung haben nicht ausgereicht .Außerdem habe ich die Standardrichtlinie in "Auftrag wiederholen" geändert und in Zukunft Fehler mit cronjob vermieden:
wo
poissa käytöstä
ist finnischer Lokalisierungstext für Wartung "außer Betrieb" undHP_Tuloostin
ist 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.
quelle
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, anxargs
die alle nicht angehalten werden die Drucker.Ein Cron Job sollte dies gut machen.
quelle
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
:Und entfernen Sie die
Resume-Printer
Direktive, 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.quelle
Die Antwort von Janne oben, zB dies:
... 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.
Ersetzen Sie "DS40" durch den Drucker, dessen Status Sie suchen, und "deaktiviert" durch die Ausgabe von "lpstat -p" in Ihrer Sprache.
quelle
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?
quelle
lpadmin -p p-go-avtom2 -v p-go-avtom2 -E
Quelle
quelle
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ü:
Für Ubuntu 16.04:
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.)
quelle
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
cups.enable.printers.service
cups.enable.printers.timer
quelle
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.
quelle