Tenho uma impressora no CUPS que, devido a problemas no driver (HP 1010), de tempos em tempos entra em pausa.
Gostaria de escrever um shell script que será executado uma vez por hora para retomar uma impressora no CUPS. Mas, depois de pesquisar por alguns minutos, no Google, como retomar a impressora a partir da linha de comando do shell.
Respostas:
Existe o comando cupsenable.
cupsenable printer
inicia uma impressora desativada (para descobrir o nome da impressora com o qual você pode listar suas impressoras
lpstat -p
oulpc status
).Pode ser necessário executar o comando como root ou através do sudo. Portanto, se você tiver que ativar a impressora em um script de shell, será necessário adicionar o shell ao crontab do root ou editar o arquivo sudoers.
fonte
Seu problema pode ser resolvido de diferentes maneiras, dependendo da versão do CUPS que você está executando.
As versões mais recentes do CUPS (versão 1.2 e superior) vêm com uma funcionalidade integrada que pode ajudar aqui. É chamado "ErrorPolicy". Sua configuração padrão é selecionada no cupsd.conf e determina como o cupsd deve lidar com as filas de impressão que não se comportam conforme o esperado. Você tem três opções para marcar individualmente cada fila:
Explicação:
abort-job
- Interrompa este trabalho e prossiga com o próximo trabalho na mesma fila
retry-job
- Tente novamente este trabalho após aguardar N segundos (onde N é determinado pela diretiva "JobRetryInterval" de cupsd.conf).
retry-this-job
- Repita o trabalho atual imediata e indefinidamente.
stop-printer
- Interrompa a fila de impressão atual e mantenha o trabalho para impressão futura. Esse ainda é o padrão, a menos que você defina o contrário, de acordo com as alternativas acima mencionadas. Também era o padrão + apenas o comportamento possível para todas as filas nas versões anteriores do CUPS (aquela que você deseja eliminar conforme sua pergunta).
Além disso, você pode definir ErrorPolicies individuais para cada fila de impressão separada. Essa configuração seria observada no arquivo printers.conf. (Defina-o em uma linha de comando com
lpadmin -p printername -o printer-error-policy=retry-this-job
).Para versões mais antigas do CUPS, eu recomendaria dar uma olhada
beh
, o CUPS BackEnd Handler .beh
é um invólucro que pode ser aplicado a qualquer back-end do CUPS.Supondo que sua fila de impressão atualmente tenha definido um backend de
socket://192.168.1.111:9100
, e ela se comporte da maneira que você não gosta (sendo desativada pelo cupsd de tempos em tempos devido a problemas de conexão de rede). Combeh
você redefiniria seu back-end assim: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ê pode fazer isso:
Isso tenta o trabalho novamente três vezes com atrasos de 5 segundos entre as tentativas. Se o trabalho ainda falhar, ele será descartado, mas a fila não está desabilitada. Deseja permitir que o cupsd tente indefinidamente se conectar ao dispositivo? Bom, tente o seguinte:
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 está desligada. Você pode atrasar intencionalmente a impressão simplesmente desligando a impressora. Uma boa configuração para impressoras de mesa e / ou usuários domésticos.
No geral, não há necessidade de mexer com scripts bash, cron jobs,
lpadmin
,cupsenable
ousudo
a fim de reativar CUPS filas indo para baixo de forma irregular.fonte
JobRetryInterval 58
tentar a cada 58 segundos. Outros valores possíveis são1w
(1 semana),3d
(3 dias),7h
(7 horas) ou4m
(4 minutos).cupsd.conf
parâmetros possíveis até o CUPS v1.7 estão documentados aqui: http://www.cups.org/documentation.php/doc-1.7/ref-cupsd-conf.html . Verifique as anotações para cada parâmetro na borda direita da página: ele informará qual versão do CUPS foi a primeira a suportá-la. Feliz descoberta de parâmetros mais úteis! :-)A
-E
opção de impressora usada comlpadmin
deve fazer isso. Provavelmente, você pode apenas criar um trabalho cron com olpadmin
comandocron
Entrada horária :Você pode adicionar isso executando:
Certifique-se de adicionar o
-E
nome após a impressora, porque é uma opção de impressora aqui, não uma opção lpadmin. Observe o seguinte trecho daman lpadmin
página, apontado em um comentário abaixo:fonte
error-policy
não conserta nada.cupsenable
não conserta nada. Sólpadmin
faz por mim.Minha impressora é HP CP1215 também teve um erro: Impressora em pausa - "/ usr / lib / cups / back-end / hp falhou"
Depois de reiniciar ambos
cups
eavahi-daemon
e identificar impressora comlpstat -p
e permitindo comcupsenable
, eu era capaz de imprimir novamente. Reiniciar apenascups
e ativar não funcionou.Também mudei a política padrão para nova tentativa e, finalmente, acabei evitando erros no futuro com o cronjob:
onde
poissa käytöstä
está o texto de localização finlandês para manutenção "fora de ordem" eHP_Tuloostin
é o nome da minha impressora.Na minha experiência, a política padrão e as políticas atuais da impressora devem ser configuradas para serem repetidas. A política padrão é apenas a política que você obtém ao instalar uma nova impressora.
fonte
Isso lista todos os arquivos ppd que representam uma impressora instalada, corta a extensão ppd, ignora um ppd do VMware incluído em muitos servidores VMware (se você não precisar apenas remover
|grep -v VMware
) e passa os outros nomes aosxargs
quais despausa todos as impressoras.Um trabalho cron deve fazer esse trabalho bem.
fonte
Se o problema se dever ao fato de a GUI exigir um login para reiniciar a impressora, outra solução é permitir a retomada da impressora através da GUI sem um login. Para fazer isso, desligue os copos e edite esta linha
sudo vi /etc/cups/cupsd.conf
:E remova a
Resume-Printer
diretiva e reinicie os copos. Se a diretiva aparecer em mais de uma<Limit>
seção, você poderá removê-la da<Policy>
seção relevante ou remover de todas. Agora você deve conseguir reiniciar a impressora sem fazer login na GUI. Eu vi isso no macworld, mas se aplica a qualquer instalação de copos.fonte
A resposta de Janne acima, por exemplo:
... fará com que o CUPS seja reiniciado a cada minuto, independentemente do estado de qualquer impressora. Isso ocorre porque a cláusula cups restart não está emparelhada com o &&.
Aqui está um pequeno script BASH que eu usei para condicionar a reinicialização do CUPS à detecção de um estado de falha.
Substitua "DS40" por qualquer impressora que esteja procurando pelo status e "desabilitado" por quaisquer saídas lpstat -p em seu idioma.
fonte
Atualizei cupsd.conf com a linha:
ErrorPolicy abort-job
Então 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 dos copos, a linha "ErrorPolicy abort-job" deve aparecer na seção da impressora.
Eu também tentei com o lpadmin atualizar o ErrorPolicy. Nada altera o ErrorPolicy ou não o faz no arquivo printers.conf.
o que estou perdendo? Como garantir que o cupsd realmente interrompa um trabalho por erro?
fonte
lpadmin -p p-go-avtom2 -v p-go-avtom2 -E
Fonte
fonte
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) faça isso no menu Iniciar da GUI:
Para o Ubuntu 16.04:
Isso abre a solução de problemas de impressão. Ele lhe dirá o que fazer em seguida.
Provavelmente, você só precisará verificar a propriedade Ativado da 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 é desligada quando imprimo em uma IMPRESSORA DO CUPS e minha política é "parar a impressora", recebo uma mensagem que não foi possível imprimir e a impressora está desativada (Ativado está desmarcado) . Somente se a política estiver definida como "repetir trabalho", a opção Ativado não será desmarcada. Alguns minutos após a impressora ser ligada, seus trabalhos começarão a ser impressos.
(Meu outro post sobre isso.)
fonte
Tive que lidar com o mesmo absurdo do CUPS aqui ... A solução para mim foi um script systemd que é executado a cada n minutos.
/usr/local/cups/enable_cups_printers.sh
cups.enable.printers.service
cups.enable.printers.timer
fonte
Como outros já disseram, 'cupsenable' ou 'lpadmin -E' deve fazer o truque.
Um problema relacionado é o IIRC que, por padrão, o CUPS configura a impressora, de modo que, se a impressão de um trabalho falhar de alguma forma, a impressora será desativada. Você pode alterar isso para cancelar o trabalho.
fonte