如何在 GNU/Linux 上根据供应商 ID 禁用 USB 设备?

mir*_*los 6 linux usb udev devices nxt

那个问题中,有人想要所有 USB 设备的黑名单,然后只允许特定设备。

在这个问题中,我们希望接受所有 USB 设备,但阻止驱动程序(例如cdc_acm)采用一种特定的设备类型——例如,不应采用闪存模式下的LEGO® NXT 积木(因为fwflash需要对设备进行原始访问) ,但驱动程序仍应访问 Arduino 板以/dev/ttyACM0在访问 NXT 和 Arduino 硬件的教育环境中进行生产。

mir*_*los 5

经过一些技巧(并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'"
Run Code Online (Sandbox Code Playgroud)

当 NXT 砖块在 flash 模式下插入时触发此规则,或在插入时进入 flash 模式。它不会阻止cdc_acm抓取它,但在告诉它释放设备后立即fwflash可以访问它。

我还没有发现它是什么:1.0,以及为什么使用它而不是:1.1它也出现在 sysfs 中。但是,我想分享一个有效的(对我来说)解决方案。环境:截至 2014 年 10 月底,Debian 不稳定(即几乎是 Debian jessie)。

  • 在更新的内核中,您可以更直接地使用类似`SUBSYSTEM=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="6124", ATTR{authorized}=" 0"` 这将在内核中取消授权(并可能关闭设备电源)。 (2认同)