Comment reprendre l'imprimante CUPS en ligne de commande?

42

J'ai une imprimante dans CUPS qui passe de temps en temps en raison de problèmes de pilote (HP 1010).

J'aimerais écrire un script shell qui s'exécutera une fois par heure pour relancer une imprimante dans CUPS. Mais je ne sais pas, après avoir cherché sur Google pendant quelques minutes, comment reprendre l’imprimante à partir de la ligne de commande shell.

Stani
la source
Quelle en est la cause? Tout d'abord, lorsque mon imprimante wifi est mise hors tension, elle semble effacer l'indicateur Enabled. Même lorsque l'imprimante est redémarrée, l'indicateur Activé n'est pas restauré. .. --- Les travaux vont alors s'empiler dans la file d'attente d'impression. Le message d'erreur est "filtre a échoué". Lorsque je coche cette case dans les paramètres de l'imprimante, celle-ci relance l'impression.
Vue elliptique

Réponses:

66

Il y a la commande cupsenable.

cupsenable printer

démarre une imprimante désactivée (pour connaître le nom de l'imprimante, vous pouvez répertorier vos imprimantes avec lpstat -pou lpc status).

Vous devrez peut-être exécuter la commande en tant que root ou via sudo. Donc, si vous devez activer l’imprimante dans un script shell, vous devrez ajouter le shell à la crontab de root ou modifier votre fichier sudoers.

David V.
la source
1
+1 cette réponse contrairement à "utiliser la configuration des gobelets sur-gonflés" (comme dans superuser.com/a/280400/160771 ), a vraiment aidé. De plus il est plus au point, puisque OP voulait savoir la ligne de commande
humanityANDpeace
25

Votre problème peut être traité de différentes manières, selon la version de CUPS que vous utilisez.

  1. Les versions les plus récentes de CUPS (versions 1.2 et supérieures) sont livrées avec une fonctionnalité intégrée qui pourrait aider ici. Cela s'appelle "ErrorPolicy". Son paramètre par défaut est sélectionné dans cupsd.conf et détermine la manière dont cupsd doit gérer les files d'attente d'impression qui ne se comportent pas comme prévu. Vous avez 3 choix pour baliser individuellement chaque file d'attente:

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

    Explication:

    • abort-job
      - Abandonnez ce travail et passez au travail suivant dans la même file d'attente

    • retry-job
      - Réessayez ce travail après avoir attendu N secondes (où N est déterminé par la directive "JobRetryInterval" de cupsd.conf).

    • retry-this-job
      - Réessayer le travail en cours immédiatement et indéfiniment.

    • stop-printer
      - Arrêtez la file d'impression en cours et conservez le travail pour une impression ultérieure. C'est toujours la valeur par défaut, sauf indication contraire indiquée ci-dessus. Il s'agissait également d'un comportement par défaut + uniquement possible pour toutes les files d'attente des versions précédentes de CUPS (celle dont vous souhaitez vous débarrasser conformément à votre question).

    En outre, vous pouvez définir des politiques d'erreur individuelles pour chaque file d'attente d'impression distincte. Ce paramètre serait noté dans le fichier printers.conf. (Définissez-le à partir d'une ligne de commande avec lpadmin -p printername -o printer-error-policy=retry-this-job).

  2. Pour les versions plus anciennes de CUPS, je vous conseillerais de consulter behle gestionnaire BackEnd de CUPS . behest un wrapper qui peut être appliqué à n’importe quel serveur CUPS.

    En supposant que votre file d'attente d'impression ait actuellement défini un backend socket://192.168.1.111:9100, et que son comportement ne vous convient pas (être désactivé par cupsd de temps en temps en raison de problèmes de connexion réseau). Avec behvous, vous redéfiniriez votre backend comme ceci:

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

    Cela permettrait de réessayer un travail 20 fois par intervalles de deux minutes et de désactiver la file d'attente uniquement en cas d'échec. Ou vous pouvez faire ceci:

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

    Cela relance le travail 3 fois avec un délai de 5 secondes entre les tentatives. Si le travail échoue toujours, il est supprimé, mais la file d'attente n'est pas désactivée. Vous souhaitez laisser cupsd essayer indéfiniment de se connecter à l'appareil? Bien, essayez ceci:

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

    Essayez infiniment jusqu'à ce que l'imprimante revienne. Les intervalles entre les tentatives de connexion sont de 30 secondes. Le travail n'est pas perdu lorsque l'imprimante est éteinte. Vous pouvez intentionnellement retarder l'impression en éteignant simplement l'imprimante. Une bonne configuration pour les imprimantes de bureau et / ou les utilisateurs à domicile.


Dans l' ensemble, il n'y a pas besoin de retoucher avec des scripts bash, tâches cron, lpadmin, cupsenableou sudopour Réactiver les files d' attente CUPS en descendant de façon erratique.

Kurt Pfeifle
la source
Comment définir l'intervalle de nouvelle tentative pour les versions plus récentes de CUPS?
Sepero
@ Sepero: Oui. Par exemple: vous pouvez essayer JobRetryInterval 58d’essayer toutes les 58 secondes. Les autres valeurs possibles sont 1w(1 semaine), 3d(3 jours), 7h(7 heures) ou 4m(4 minutes).
Kurt Pfeifle
@Sepero: Tous les cupsd.confparamètres possibles jusqu'à CUPS v1.7 sont documentés ici: http://www.cups.org/documentation.php/doc-1.7/ref-cupsd-conf.html . Vérifiez les annotations de chaque paramètre sur le bord droit de la page: cela vous indiquera quelle version de CUPS a été la première à la prendre en charge. Bonne découverte de paramètres plus utiles! :-)
Kurt Pfeifle
8

L' -Eoption d'imprimante utilisée avec lpadmindevrait le faire. Vous pouvez probablement simplement créer un travail cron avec la lpadmincommande.

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

cronEntrée horaire :

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

Vous pouvez ajouter cela en exécutant:

sudo crontab -e

Assurez-vous d’ajouter le -Enom après l’imprimante, car c’est une option d’imprimante ici, pas une option lpadmin. Notez l'extrait suivant de la man lpadminpage qui a été souligné dans un commentaire ci-dessous:

Lorsqu'elle est spécifiée avant les options -d, -p ou -x, l'option -E force le cryptage lors de la connexion au serveur.

En pause jusqu'à nouvel ordre.
la source
2
C'est faux. -E dans ce contexte est une option d'imprimante et doit être APRÈS le nom de l'imprimante, sinon vous n'activez que le cryptage de la communication. developer.apple.com/library/mac/documentation/Darwin/Reference/… - Si elle est spécifiée avant les options -d, -p ou -x, l'option -E force le cryptage lors de la connexion au serveur.
Scragar
C'est la seule solution qui fonctionne pour moi. cups continue de mettre l'imprimante en pause sans raison assez souvent. Le error-policyne répare rien. cupsenablene répare rien. Fait seulement lpadminpour moi.
λuser
6

Mon imprimante HP CP1215 avait également une erreur: Imprimante en pause - "/ usr / lib / cups / backend / hp failed"

Après avoir redémarré à la fois cupset avahi-daemonet l' identification avec imprimante lpstat -pet permettant avec cupsenable, j'ai pu imprimer à nouveau. Redémarrer seulement cupset activer n'a pas fait l'affaire.

J'ai également modifié la stratégie par défaut pour réessayer le travail et j'ai finalement évité des erreurs à l'avenir avec cronjob:

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

poissa käytöstäest le texte de localisation en finnois pour la maintenance "hors service" et HP_Tuloostinest le nom de mon imprimeur.

D'après mon expérience, les stratégies d'imprimante par défaut et les stratégies actuelles doivent être configurées pour être relancées. La stratégie par défaut est une stratégie que vous obtenez lorsque vous installez une nouvelle imprimante.

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

Ceci répertorie tous les fichiers ppd qui représentent une imprimante installée, supprime l’extension ppd, ignore un ppd VMware inclus sur de nombreux serveurs VMware (si vous n’avez pas besoin de simplement le supprimer |grep -v VMware) et passe les autres noms xargsauxquels toutes les annulent. les imprimantes.

Un travail cron devrait rendre ce travail bien.

Dana M
la source
1

Si le problème vient du fait que l’interface graphique nécessite un identifiant pour relancer l’imprimante, une autre solution consiste à autoriser la reprise de l’imprimante via l’interface graphique sans identifiant. Pour ce faire, fermez les gobelets et modifiez cette ligne 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>

Et supprimez la Resume-Printerdirective, puis redémarrez cups. Si la directive apparaît dans plusieurs <Limit>sections, vous pouvez la <Policy>supprimer ou la supprimer de toutes les sections. Vous devriez maintenant pouvoir relancer l’imprimante sans vous connecter à partir de l’interface graphique. J'ai vu cela sur macworld, mais cela s'applique à toutes les tasses installées.

Pierz
la source
1

La réponse de Janne ci-dessus, par exemple ceci:

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

... provoquera le redémarrage de CUPS toutes les minutes, quel que soit l'état de l'imprimante dans laquelle se trouve l'imprimante. En effet, la clause de relance de cups n'est pas associée à &&.

Voici un court script BASH que j’avais utilisé pour conditionner le redémarrage de CUPS à la détection d’un état d’échec.

#!/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

Remplacez «DS40» par l’imprimante dont vous souhaitez connaître l’état et «désactivée» par l’une quelconque des sorties lpstat -p dans votre langue.

xaphod
la source
0

J'ai mis à jour cupsd.conf avec la ligne:

ErrorPolicy Abort-Job

Puis j'ai redémarré cupsd en utilisant: /etc/init.d/cups restart

Mais lorsque je regarde le fichier printers.conf, ErrorPolicy n'est pas mis à jour. Selon la documentation de cups, la ligne "ErrorPolicy abort-job" doit apparaître dans la section imprimante.

J'ai également essayé avec lpadmin de mettre à jour le ErrorPolicy. Rien ne modifie la ErrorPolicy ou ne le fait pas dans le fichier printers.conf.

Qu'est-ce que je rate? Comment puis-je m'assurer que cupsd annule un travail par erreur?


la source
modifier printers.conf
KawaiKx
0

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

La source

vserg
la source
5
Voulez-vous expliquer ce que cela fait, exactement? S'il vous plaît ajouter un peu plus de contexte.
Slhck
0

Un tas de solutions ici ne fonctionnait pas pour moi (par exemple, sudo cupsenable et lpadmin -E).

Si vous utilisez Debian 8.6, Cinnamon 2.2.16 (Linux) le fait depuis le menu de démarrage de votre interface graphique:

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. 

Pour Ubuntu 16.04:

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

Cela ouvre l'utilitaire de résolution des problèmes d'impression. Il vous dira quoi faire ensuite.

Il vous suffira probablement de vérifier la propriété Enabled de votre imprimante CUPS dans vos paramètres d'impression. (Vous devrez d'abord déverrouiller).

Enfin, pour éviter que cela ne se reproduise, remplacez la "stratégie" de l'imprimante par "nouvelle tentative de travail" dans la configuration de l'imprimante mentionnée ci-dessus (sous Propriétés | Stratégies).

Corrigé pour moi!

La cause de ce problème: Si mon imprimante Wi-Fi est éteinte lorsque j'imprime sur une IMPRIMANTE CUPS et que ma stratégie est "Arrêter imprimante", un message m'indiquant que je ne parviens pas à imprimer et que l'imprimante est désactivée (Activé est désactivé) . Ce n'est que si la stratégie est définie sur "Réessayer le travail" que l'option Activée ne sera pas décochée. Quelques minutes après la mise sous tension de l'imprimante, vos travaux vont commencer à être imprimés.

(Mon autre post à ce sujet.)

Vue elliptique
la source
0

J'ai dû faire face au même non-sens de CUPS ici ... La solution pour moi était un script systemd qui s'exécute toutes les n minutes.

/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
Jonathan Komar
la source
-1

Comme d'autres l'ont déjà dit, «cupsenable» ou «lpadmin -E» devrait faire l'affaire.

IIRC est un problème lié au fait que CUPS configure par défaut l’imprimante de telle sorte que si l’impression échoue, l’imprimante est désactivée. Vous pouvez changer cela pour abandonner le travail à la place.

Janneb
la source
-1 comme -E est pour le cryptage.
Vue elliptique
Voyez comment utiliser correctement -E en tant qu'option d'imprimante, et non pas en tant qu'option lpadmin, dans une autre réponse ci-dessus.
Vue elliptique