Wie deaktiviere ich USB-Geräte basierend auf ihrer Hersteller-ID unter GNU / Linux?

5

In dieser Frage wollte jemand eine schwarze Liste für alle USB-Geräte, und dann nur bestimmte Geräte zulassen.

In dieser Frage möchten wir alle USB-Geräte akzeptieren, aber verhindern, dass der Treiber (z. B. cdc_acm) einen bestimmten Gerätetyp verwendet - z. B. sollte kein LEGO® NXT-Baustein im Flash-Modus verwendet werden (da unberechtigterfwflash Zugriff auf das Gerät erforderlich ist). /dev/ttyACM0In einer Lernumgebung , in der sowohl auf NXT- als auch auf Arduino-Hardware zugegriffen werden kann, sollte der Treiber dennoch auf ein Arduino-Board zugreifen , um zu produzieren .

Mirabilos
quelle

Antworten:

5

Ich konnte dies nach einigen Tricks mit einer udev-Regel tun (und dabei lsusbdie Hersteller- und Produkt-ID des Geräts im Flash-Modus herausfinden):

$ 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'"

Diese Regel wird ausgelöst, wenn ein NXT-Baustein im Flash-Modus eingesteckt oder im eingesteckten Zustand in den Flash-Modus versetzt wird. Sie verhindert nicht, dass cdc_acmder Baustein ergriffen wird, sondern fordert ihn unmittelbar danach auf, das Gerät freizugeben, damit er fwflashdarauf zugreifen kann.

Ich habe nicht herausgefunden, was das :1.0ist, und warum das verwenden und :1.1was nicht auch in sysfs auftaucht. Ich wollte jedoch eine funktionierende (für mich) Lösung teilen. Umgebung: Debian war Ende Oktober 2014 instabil (dh so ziemlich Debian Jessie).

Mirabilos
quelle