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
e0x0917
neste caso) precisam ser alterados para os IDs de sua impressora, conforme mostrado porlsusb
. - O nome da impressora dado aos comandos
cupsaccept
ecupsreject
deve corresponder ao nome usado pelo CUPS. Você pode listar as impressoras instaladas comlpstat -v
.