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

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

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

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

答案1

经过一些技巧之后,我已经能够使用 udev 规则来做到这一点(并使用lsusb在闪存模式下查找设备的供应商和产品 ID):

$ 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)。

相关内容