Udev

如何讓 CUPS 在斷開連接時將 USB 列印機顯示為禁用?

  • July 15, 2015

我在 ARM 單板電腦上使用 CUPS 通過網路共享 USB 列印機。為節省電力,列印機通常通過遙控電源插座關閉,僅在需要時通過網路界面打開。開機後,列印機需要大約半分鐘時間進行初始化並準備好接受列印作業。

即使列印機已關閉或仍在初始化,CUPS 也會將列印機顯示為“空閒”和“就緒”,但lsusb在列印機仍處於不可用狀態時不會顯示列印機。

我想要一種方法來判斷列印機是否已打開電源並在發送列印作業之前進行初始化(如果列印機不可用,可能會掛起或失去)。

原來 CUPS 提供命令cupsreject並將cupsaccept列印機標記/取消標記為不可用(因此它在列印對話框中顯示為灰色)。cupsreject還接受-r帶有字元串的可選參數,該字元串給出列印機不可用的原因。

結合udev列印機連接到 USB 埠(或打開電源)和斷開連接(關閉電源)時執行的兩條規則,這允許我們將列印機標記為“斷開連接”,並在所有訪問的電腦上顯示該狀態通過網路列印機:

/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"

對於想要將此解決方案適用於自己的系統的任何人的一些注意事項:

  • 規則文件名的“usb-printer”部分是任意的,但udev如果文件名不以.rules.
  • USB 供應商和產品 ID(0x03f00x0917這種情況下)必須更改為您的列印機的 ID,如 所示lsusb
  • 賦予cupsacceptcupsreject命令的列印機名稱必須與 CUPS 使用的名稱相匹配。您可以使用 列出已安裝的列印機lpstat -v

引用自:https://unix.stackexchange.com/questions/216223