Linux

如何在 GNU/Linux 上根據供應商 ID 禁用 USB 設備?

  • November 3, 2014

那個問題中,有人想要所有 USB 設備的黑名單,然後只允許特定設備。

在這個問題中,我們希望接受所有 USB 設備,但阻止驅動程序(例如cdc_acm)採用一種特定的設備類型——例如,不應採用快閃記憶體模式下的LEGO® NXT 積木fwflash(因為需要對設備進行原始訪問) ,但驅動程序仍應訪問 Arduino 板以在訪問 NXT 和 Arduino 硬體/dev/ttyACM0教育環境中進行生產。

lsusb經過一些詭計(並用於在快閃記憶體模式下找出設備的供應商和產品 ID),我已經能夠使用 udev 規則來做到這一點:

$ cat /etc/udev/rules.d/nxt.rules
# disable NXT in flash mode
ACTION=="add", ATTR{idVendor}=="03eb", ATTR{idProduct}=="6124", RUN="/bin/sh -c '/bin/echo -n $kernel:1.0 | /usr/bin/tee /sys/bus/usb/drivers/cdc_acm/unbind | /usr/bin/logger -t nxt-flashmode'"

當NXT磚在快閃記憶體模式下插入時觸發此規則,或者在插入時進入快閃記憶體模式。它不會阻止cdc_acm抓取它,但會立即告訴它釋放設備,以便fwflash可以訪問它。

我還沒有發現它是什麼:1.0,以及為什麼使用它而不是:1.1它也出現在 sysfs 中。但是,我想分享一個(對我而言)有效的解決方案。環境:截至 2014 年 10 月,Debian 不穩定(即幾乎是 Debian jessie)。

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