¿Cómo reanudar la impresora CUPS desde la línea de comandos?

42

Tengo una impresora en CUPS que debido a problemas con el controlador (HP 1010) de vez en cuando entra en pausa.

Me gustaría escribir un script de shell que se ejecutará una vez por hora para reanudar una impresora en CUPS. Pero no tengo idea después de buscar en Google durante un par de minutos cómo reanudar la impresora desde la línea de comandos del shell.

Stani
fuente
Lo que está causando esto: por un lado, cuando mi impresora wifi está apagada, parece borrar el indicador Habilitado. Incluso cuando la impresora se vuelve a encender, el indicador Habilitado no se restaura a marcado. .. --- Los trabajos se acumularán en la cola de impresión. El mensaje de error es "error de filtro". Cuando marco esta casilla en la configuración de la impresora, la impresora comienza a imprimir nuevamente.
Vista elíptica

Respuestas:

66

Ahí está el comando cupsenable.

cupsenable printer

inicia una impresora deshabilitada (para averiguar el nombre de la impresora con la que puede enumerar sus impresoras lpstat -po lpc status).

Es posible que deba ejecutar el comando como root o mediante sudo. Entonces, si tiene que habilitar la impresora en un script de shell, deberá agregar el shell al crontab de la raíz o editar su archivo sudoers.

David V.
fuente
1
+1 esta respuesta en contraste con el "uso de la configuración de vasos superblocados" (como en superuser.com/a/280400/160771 ), realmente ayudó. También es más importante, ya que OP quería saber la línea de comando
humanidad y
25

Su problema podría abordarse de diferentes maneras, dependiendo de la versión de CUPS que esté ejecutando.

  1. Las versiones más recientes de CUPS (versión 1.2 y superior) vienen con una funcionalidad integrada que podría ayudar aquí. Se llama "ErrorPolicy". Su configuración predeterminada se selecciona en cupsd.conf y determina cómo cupsd debe manejar las colas de impresión que no se comportan como se esperaba. Tiene 3 opciones para etiquetar a cada cola individualmente:

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

    Explicación:

    • abort-job
      - Anule este trabajo y continúe con el siguiente trabajo en la misma cola

    • retry-job
      - Vuelva a intentar este trabajo después de esperar N segundos (donde N está determinado por la directiva "JobRetryInterval" de cupsd.conf).

    • retry-this-job
      - Vuelva a intentar el trabajo actual de forma inmediata e indefinida.

    • stop-printer
      - Detenga la cola de impresión actual y conserve el trabajo para futuras impresiones. Este sigue siendo el valor predeterminado, a menos que defina lo contrario según las alternativas mencionadas anteriormente También era el comportamiento predeterminado + solo posible para todas las colas en versiones anteriores de CUPS (el que desea eliminar según su pregunta).

    Además, puede configurar ErrorPolicies individuales para cada cola de impresión separada. Esta configuración se anotaría en el archivo printers.conf. (Configurarlo desde una línea de comandos con lpadmin -p printername -o printer-error-policy=retry-this-job).

  2. Para versiones anteriores de CUPS , recomendaría echar un vistazo al behCUPS BackEnd Handler . behes un contenedor que se puede aplicar a cualquier back-end de CUPS.

    Asumiendo que su cola de impresión actualmente ha definido un back-end de socket://192.168.1.111:9100, y se comporta de la manera que no le gusta (siendo deshabilitado por cupsd de vez en cuando debido a problemas de conexión de red). Con behusted redefiniría su backend así:

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

    Esto volvería a intentar un trabajo 20 veces en intervalos de dos minutos y deshabilitaría la cola solo cuando todavía no tenga éxito. O podrías hacer esto:

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

    Esto vuelve a intentar el trabajo 3 veces con retrasos de 5 segundos entre los intentos. Si el trabajo aún falla, se descarta, pero la cola no está deshabilitada. ¿Desea dejar que cupsd intente conectarse indefinidamente al dispositivo? Bien, prueba esto:

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

    Intente infinitamente hasta que vuelva la impresora. Los intervalos entre los intentos de conexión son de 30 segundos. El trabajo no se pierde cuando la impresora está apagada. Puede retrasar intencionalmente la impresión simplemente apagando la impresora. Una buena configuración para impresoras de escritorio y / o usuarios domésticos.


En general, no hay necesidad de perder el tiempo con scripts bash, trabajos de cron, lpadmin, cupsenableo sudocon el fin de reactivar CUPS colas bajando de forma errática.

Kurt Pfeifle
fuente
¿Cómo podemos establecer el intervalo de reintento para versiones más recientes de CUPS?
Sepero
@Sepero: Sí. Por ejemplo: puede intentar JobRetryInterval 58probar cada 58 segundos. Otros valores posibles son 1w(1 semana), 3d(3 días), 7h(7 horas) o 4m(4 minutos).
Kurt Pfeifle
@Sepero: Todos los cupsd.confparámetros posibles hasta CUPS v1.7 se documentan aquí: http://www.cups.org/documentation.php/doc-1.7/ref-cupsd-conf.html . Verifique las anotaciones para cada parámetro en el borde derecho de la página: le indicará qué versión de CUPS fue la primera en admitirlo. ¡Feliz descubrimiento de más parámetros útiles! :-)
Kurt Pfeifle
8

La -Eopción de impresora utilizada con lpadmindebería hacer eso. Probablemente pueda crear un trabajo cron con el lpadmincomando.

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

cronEntrada por hora :

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

Puede agregar eso ejecutando:

sudo crontab -e

Asegúrese de agregar -Edespués del nombre de la impresora, porque es una opción de impresora aquí, no una opción lpadmin. Tenga en cuenta el siguiente extracto de la man lpadminpágina que se señaló en un comentario a continuación:

Cuando se especifica antes de las opciones -d, -p o -x, la opción -E fuerza el cifrado cuando se conecta al servidor.

Pausado hasta nuevo aviso.
fuente
2
Esto está mal. -E en este contexto es una opción de impresora, y debe ir DESPUÉS del nombre de la impresora, de lo contrario, solo está activando el cifrado de comunicación. developer.apple.com/library/mac/documentation/Darwin/Reference/… - Cuando se especifica antes de las opciones -d, -p o -x, la opción -E fuerza el cifrado cuando se conecta al servidor.
scragar
Esta es la única solución que funciona para mí. cups sigue deteniendo la impresora sin ninguna razón con bastante frecuencia. El error-policyno arregla nada. cupsenableNo arregla nada. Solo lo lpadminhace por mi.
λuser
6

Mi impresora es HP CP1215 también tenía un error: Impresora en pausa - "/ usr / lib / cups / backend / hp falló"

Después de reiniciar ambas cupse avahi-daemonidentificar la impresora lpstat -py habilitarla cupsenable, pude imprimir nuevamente. Reiniciar solo cupsy habilitar no funcionó.

También cambié la política predeterminada para volver a intentar el trabajo y finalmente terminé evitando errores en el futuro con cronjob:

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

donde poissa käytöstäestá el texto de localización finlandés para mantenimiento "fuera de servicio" y el HP_Tuloostinnombre de mi impresora.

En mi experiencia, tanto la política predeterminada como las políticas actuales de la impresora deben configurarse para volver a intentar el trabajo. La política predeterminada es solo la política que obtiene cuando instala una nueva impresora.

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

Esto enumera todos los archivos ppd que representan una impresora instalada, corta la extensión ppd, ignora un ppd de VMware incluido en muchos servidores VMware (si no lo necesita, simplemente elimínelo |grep -v VMware) y pasa los otros nombres a los xargsque deshace todos Las impresoras.

Un trabajo cron debería hacer que esto funcione bien.

Dana M
fuente
1

Si el problema se debe al hecho de que la GUI requiere un inicio de sesión para reanudar la impresora, entonces otra solución es permitir que la impresora se reanude a través de la GUI sin iniciar sesión. Para hacerlo, apague las tazas y edite esta línea 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>

Y elimine la Resume-Printerdirectiva, luego reinicie las tazas. Si la directiva aparece en más de una <Limit>sección, puede eliminarla de la <Policy>sección correspondiente o eliminarla de todas. Ahora debería poder reanudar la impresora sin iniciar sesión desde la GUI. Vi esto en macworld pero se aplica a cualquier instalación de tazas.

Pierz
fuente
1

La respuesta de Janne arriba, por ejemplo, esto:

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

... hará que CUPS se reinicie cada minuto, independientemente del estado en que se encuentre la impresora. Esto se debe a que la cláusula de reinicio de tazas no está emparejada con &&.

Aquí hay un breve script de BASH que utilicé para reiniciar CUPS condicional al detectar un estado de falla.

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

Reemplace "DS40" con cualquier impresora en la que esté buscando el estado y "deshabilitado" con cualquier salida lpstat -p en su idioma.

xaphod
fuente
0

Actualicé cupsd.conf con la línea:

ErrorPolicy abort-job

Luego reinicé cupsd usando: /etc/init.d/cups restart

Pero cuando miro el archivo printers.conf, ErrorPolicy no se actualiza. De acuerdo con la documentación de cups, la línea "ErrorPolicy abort-job" debe aparecer en la sección de la impresora.

También intenté con lpadmin para actualizar ErrorPolicy. Nada cambia el ErrorPolicy o no llega al archivo printers.conf.

¿Qué me estoy perdiendo? ¿Cómo me aseguro de que cupsd realmente cancela un trabajo por error?


fuente
edit printers.conf
KawaiKx
0

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

Fuente

vserg
fuente
55
¿Te importaría explicar exactamente qué hace esto? Por favor agregue un poco más de contexto.
slhck
0

Algunas de las soluciones aquí no funcionaron para mí (por ejemplo, sudo cupsenable y lpadmin -E).

Si está utilizando Debian 8.6, Cinnamon 2.2.16 (Linux) haga esto desde el menú de inicio de la GUI:

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. 

Para Ubuntu 16.04:

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

Esto abre el solucionador de problemas de impresión. Te dirá qué hacer a continuación.

Probablemente solo tendrá que verificar la propiedad Activada para su impresora CUPS en la Configuración de impresión. (Necesitarás desbloquear primero).

Finalmente, para evitar que esto vuelva a suceder, cambie la "política" de las impresoras a "reintentar trabajo" en la configuración de la impresora mencionada anteriormente (en propiedades | políticas).

¡Me lo arregló!

¿Qué causa este problema? Si mi impresora wifi se apaga cuando imprimo en una IMPRESORA CUPS y mi política es "detener la impresora", recibo un mensaje que dice que no pude imprimir y la impresora está desactivada (Habilitado está desmarcado) . Solo si la política se establece en "reintentar trabajo", Enabled no se desmarcará. Unos minutos después de que la impresora se vuelva a encender, sus trabajos comenzarán a imprimirse.

(Mi otra publicación sobre esto).

Vista elíptica
fuente
0

Tuve que lidiar con las mismas tonterías de CUPS aquí ... La solución para mí fue un script systemd que se ejecuta cada n minutos.

/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
fuente
-1

Como otros ya han dicho, 'cupsenable' o 'lpadmin -E' deberían hacer el truco.

Un problema relacionado es el IIRC que, de manera predeterminada, CUPS configura la impresora de modo que si la impresión de un trabajo falla de alguna manera, la impresora se desactiva. Puede cambiar esto para abortar el trabajo en su lugar.

janneb
fuente
-1 como -E es para el cifrado.
Vista elíptica
Vea cómo usar correctamente -E como una opción de impresora, no como una opción lpadmin, en otra respuesta anterior.
Vista elíptica