web-dev-qa-db-ja.com

GNU / LinuxでベンダーIDに基づいてUSBデバイスを無効にする方法は?

その質問 誰かがすべてのUSBデバイスのブラックリストを望んでいて、特定のデバイスのみを許可しました。

この質問では、すべてのUSBデバイスを受け入れますが、ドライバー(cdc_acmなど)が特定のデバイスタイプを取得しないようにします。たとえば、フラッシュモードの LEGO®NXTブリック 取得されません(fwflashはデバイスへのrawアクセスが必要なため)が、 教育環境 アクセスで/dev/ttyACM0を生成するには、ドライバーがArduinoボードにアクセスする必要がありますNXTとArduinoの両方のハードウェア。

5
mirabilos

いくつかのトリックの後、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が何であるか、そしてなぜsysfsにも表示される:1.1ではなくそれを使用するのかわかりません。しかし、私は(私にとって)実用的なソリューションを共有したかったのです。環境:2014年10月末現在、Debianは不安定です(つまり、ほとんどのDebian jessie)。

5
mirabilos