Como fazer o CUPS mostrar uma impressora USB como desabilitada quando desconectada?

2

Estou usando o CUPS em um computador de placa única ARM para compartilhar uma impressora USB pela rede. Para conservar energia, a impressora geralmente é desligada por meio de uma tomada de controle remoto e só é ligada por meio de uma interface da Web quando necessário. Quando é ligada, a impressora leva cerca de meio minuto para inicializar e fica pronta para aceitar trabalhos de impressão.

O CUPS mostra a impressora como "Inativa" e "Pronta" mesmo quando está desligada ou ainda está inicializando, mas lsusb não mostra a impressora enquanto ainda está em um estado indisponível.
Eu queria uma maneira de saber se a impressora estava ligada e inicializada antes de enviar trabalhos de impressão (que podem travar ou cair se a impressora não estivesse disponível).

    
por n.st 15.07.2015 / 18:16

1 resposta

2

Acontece que o CUPS oferece os comandos cupsreject e cupsaccept para marcar / desmarcar uma impressora como inutilizável (para que ela apareça acinzentada nas caixas de diálogo de impressão). cupsreject também aceita um parâmetro -r opcional com uma string que fornece uma razão para a indisponibilidade da impressora.

Combinado com duas regras udev executadas quando a impressora está conectada à porta USB (ou ligada) e desconectada (desligada), isso nos permite marcar a impressora como "desconectada" e ter esse status mostrado em todos os computadores que acessam a impressora pela rede:

/etc/udev/rules.d/usb-printer.rules :

ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_VENDOR_ID}=="03f0", ENV{ID_MODEL_ID}=="0917", RUN+="/usr/sbin/cupsaccept HP_LaserJet_3330"
ACTION=="remove", SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_VENDOR_ID}=="03f0", ENV{ID_MODEL_ID}=="0917", RUN+="/usr/sbin/cupsreject -r 'udev: Printer not connected' HP_LaserJet_3330"

Algumas anotações para qualquer pessoa que queira adaptar essa solução para seu próprio sistema:

  • A parte "usb-printer" do nome da regra é arbitrária, mas udev pode ignorá-lo se o nome do arquivo não terminar com .rules .
  • O fornecedor de USB e os IDs de produto ( 0x03f0 e 0x0917 neste caso) precisam ser alterados para os IDs de sua impressora, conforme mostrado por lsusb .
  • O nome da impressora dado aos comandos cupsaccept e cupsreject deve corresponder ao nome usado pelo CUPS. Você pode listar as impressoras instaladas com lpstat -v .
por 15.07.2015 / 18:16