Como reiniciar a impressora CUPS a partir da linha de comando?

33

Eu tenho uma impressora no CUPS que, devido a problemas de driver (HP 1010), de vez em quando entra em pausa.

Eu gostaria de escrever um script de shell que será executado uma vez por hora para retomar uma impressora no CUPS. Mas não faço ideia depois de pesquisar por alguns minutos como retomar a impressora a partir da linha de comando do shell.

    
por Stani 03.03.2010 / 14:25

12 respostas

55

Existe o comando cupsenable.

cupsenable printer

inicia uma impressora desativada (para descobrir o nome da impressora, você pode listar suas impressoras com lpstat -p ou lpc status ).

Você pode ter que executar o comando como root ou através do sudo. Então, se você tiver que habilitar a impressora em um script de shell, você teria que adicionar o shell ao crontab do root ou editar o arquivo sudoers.

    
por 03.03.2010 / 17:36
22

Seu problema pode ser resolvido de maneiras diferentes, dependendo da versão do CUPS que você está executando.

  1. Mais versões recentes do CUPS (versão 1.2 e superior) vêm com uma funcionalidade incorporada que pode ajudar aqui. É chamado "ErrorPolicy". Sua configuração padrão é selecionada em cupsd.conf e determina como o cupsd deve manipular filas de impressão que não se comportam como esperado. Você tem 3 opções para marcar para cada fila individualmente:

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

    Explicação:

    • abort-job em - Abortar este trabalho e prosseguir com o próximo trabalho na mesma fila

    • retry-job em - Repetir este trabalho depois de esperar por N segundos (onde N é determinado pela diretiva "emendado" de cupsd.conf ).

    • retry-this-job em - Repetir o trabalho atual imediatamente e indefinidamente.

    • stop-printer em - Pare a fila de impressão atual e mantenha o trabalho para impressão futura. Este ainda é o padrão, a menos que você defina o contrário, conforme as alternativas acima mencionadas. Também era o padrão + comportamento apenas possível para todas as filas nas versões anteriores do CUPS (a única que você deseja eliminar de acordo com sua pergunta). >

    Além disso, você pode definir ErrorPolicies individuais para cada fila de impressão separada. Essa configuração seria anotada no arquivo printers.conf. (Configure a partir de uma linha de comando com lpadmin -p printername -o printer-error-policy=retry-this-job ).

  2. Para versões mais antigas do CUPS , eu recomendo dar uma olhada em beh , o CUPS BackEnd Handler . beh é um wrapper que pode ser aplicado a qualquer back-end do CUPS.

    Supondo que sua fila de impressão tenha definido um back-end de socket://192.168.1.111:9100 , e ela se comporta da maneira que você não gosta (sendo desabilitada pelo cupsd de tempos em tempos devido a problemas de conexão de rede). Com beh você redefiniria seu back-end assim:

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

    Isso tentaria novamente um trabalho 20 vezes em intervalos de dois minutos e desativaria a fila apenas quando ainda não tivesse êxito. Ou você poderia fazer isso:

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

    Isso tenta novamente o trabalho 3 vezes com atrasos de 5 segundos entre as tentativas. Se o trabalho ainda falhar, ele será descartado, mas a fila não será desativada. Você quer deixar o cupsd tentar indefinidamente conectar-se ao dispositivo? Bom, tente isto:

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

    Tente infinitamente até a impressora voltar. Os intervalos entre as tentativas de conexão são de 30 segundos. O trabalho não se perde quando a impressora é desligada. Você pode atrasar a impressão intencionalmente simplesmente desligando a impressora. Uma boa configuração para impressoras desktop e / ou usuários domésticos.

No geral, não há necessidade de mexer com scripts bash, tarefas agendadas, lpadmin , cupsenable ou sudo para reativar filas do CUPS descendo erraticamente.

    
por 11.06.2010 / 13:04
8

A opção de impressora -E usada com lpadmin deve fazer isso. Você provavelmente pode apenas criar uma tarefa cron com o comando lpadmin .

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

Por hora cron entrada:

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

Você pode adicionar isso executando:

sudo crontab -e

Certifique-se de adicionar o -E após o nome da impressora, porque é uma opção de impressora aqui, não uma opção lpadmin. Observe o seguinte trecho da página man lpadmin que foi apontada em um comentário abaixo:

When specified before the -d, -p, or -x options, the -E option forces encryption when connecting to the server.

    
por 03.03.2010 / 15:46
6

Minha impressora HP CP1215 também apresentou um erro: Impressora pausada - "/ usr / lib / cups / backend / hp falhou "

Depois de reiniciar o cups e o avahi-daemon e identificar a impressora com lpstat -p e ativar com cupsenable , consegui imprimir novamente. Reiniciando apenas cups e a ativação não funcionou.

Eu também alterei a política padrão para nova tentativa e finalmente acabei evitando erros no futuro com o cronjob:

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

em que poissa käytöstä é o texto de localização em finlandês para manutenção "fora de ordem" e HP_Tuloostin é o nome da minha impressora.

Na minha experiência, tanto a política padrão quanto as políticas atuais de impressora devem ser configuradas para serem novas tentativas. Política padrão é apenas política que você obtém quando está instalando uma nova impressora.

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

Isso lista todos os arquivos ppd que representam uma impressora instalada, corta a extensão ppd, ignora um VMware ppd incluído em vários servidores VMware (se você não precisar disso, basta remover |grep -v VMware ) e passa a outra nomes para xargs que descompacta todas as impressoras.

Um cron job deve fazer isso funcionar bem.

    
por 27.01.2014 / 19:33
1

Se o problema estiver no fato de que a GUI requer um login para retomar a impressora, outra solução é permitir que a impressora retome a interface gráfica sem um login. Para fazer isso, encerre as taças e edite essa linha 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>

Remova a diretiva Resume-Printer e reinicie as xícaras. Se a diretiva aparecer em mais de um <Limit> seção, você poderá removê-la da seção <Policy> relevante ou removê-la de todas. Agora você deve conseguir retomar a impressora sem fazer login na GUI. Eu vi isso em macworld mas se aplica a qualquer instalação de xícaras.

    
por 25.08.2015 / 12:30
0

Eu atualizei cupsd.conf com a linha:

Abort-job de ErrorPolicy

Depois reiniciei o cupsd usando: /etc/init.d/cups restart

Mas quando olho para o arquivo printers.conf, o ErrorPolicy não é atualizado. De acordo com a documentação do cups, a linha "ErrorPolicy abort-job" deve aparecer na seção da impressora.

Eu também tentei com o lpadmin atualizar a ErrorPolicy. Nada muda a ErrorPolicy ou não chega ao arquivo printers.conf.

O que estou perdendo? Como posso ter certeza de que o cupsd realmente aborta um trabalho por erro?

    
por 28.03.2011 / 05:28
0

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

Fonte

    
por 13.02.2012 / 11:28
0

A resposta de Janne acima, por ex. isso:

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

... fará com que o CUPS seja reiniciado a cada minuto, independentemente do estado em que a impressora estiver. Isso ocorre porque a cláusula restart do cups não está emparelhada com o & & <;

Aqui está um pequeno script BASH que usei para reiniciar o CUPS ao detectar um estado de falha.

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

Substitua "DS40" por qualquer impressora que você esteja procurando por status e "desativado" com qualquer saída lpstat -p no seu idioma.

    
por 07.09.2015 / 14:14
0

Várias soluções aqui não funcionaram para mim (por exemplo, sudo cupsenable e lpadmin -E).

Se você estiver usando o Debian 8.6, o Cinnamon 2.2.16 (Linux) faz isso a partir do menu Iniciar da 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 o Ubuntu 16.04:

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

Isso abre o solucionador de problemas de impressão. Ele vai te dizer o que fazer a seguir.

Provavelmente você só precisará verificar a propriedade Enabled para sua impressora CUPS nas Configurações de Impressão. (Você precisará desbloquear primeiro).

Por fim, para evitar que isso aconteça novamente, altere a "política" da impressora para "nova tentativa" na configuração da impressora mencionada acima (em propriedades | políticas).

Corrigido para mim!

O que causa esse problema: Se minha impressora wifi estiver desligada quando eu imprimir em uma IMPRESSORA CUPS e minha política for "parar impressora", recebo uma mensagem que não consegui imprimir e a impressora está desativada (a opção Ativado está desmarcada). Somente se a política estiver definida como "Repetir trabalho", Ativado não será desmarcado. Alguns minutos depois de a impressora ser ligada, os trabalhos começarão a ser impressos.

(Meu outro post sobre isso.)

    
por 09.10.2016 / 01:57
0

Tive que lidar com o mesmo absurdo do CUPS aqui ... A solução para mim foi um script systemd que roda a 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_]+):.*//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
    
por 03.11.2018 / 19:15
-1

Como outros já disseram, 'cupsenable' ou 'lpadmin -E' devem resolver o problema.

Um problema relacionado é o IIRC que, por padrão, o CUPS configura a impressora de tal forma que, se a impressão de um trabalho falhar de alguma forma, a impressora é desativada. Você pode mudar isso para abortar o trabalho.

    
por 12.04.2010 / 13:16