USB Ports und udev
Ausführung eines Programms bezogen auf ein bestimmtes Device
Erkennen von USB-Disks und USB-Sticks
Manchmal möchte man, dass beim Einstecken eines USB-Device ein bestimmtes Programm automatisch abläuft. Seit Kernel 2.6 gibt es das Programm UDEV mit dem man das Anstecken eines USB-Devices auswerten kann.
Udev wird über Dateien in /etc/udev/rules gesteuert und ist eigentlich leicht zu konfigurieren.
Ausführung eines Programms bezogen auf ein bestimmtes Device
Will man ein bestimmtes Programm ausführen, wenn ein ganz bestimmtes USB-Gerät angesteckt wird, so muss man zuerst dessen Vendor-ID per "lsusb" feststellen
bernd@Mars64:~$ lsusb Bus 005 Device 025: ID 0d8c:000c C-Media Electronics, Inc. Audio Adapter Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 003: ID 0403:6001 Future Technology Devices International... ...
Uns interessiert aus der Liste das Device von "Future Technology" (blaue Zeile). Das ist ein kleiner USB-Seriell Adapter, der auch im Bitmode betrieben werden kann. Immer wenn der Adapter eingesteckt wird, soll das Programm "aqua-init" im ~/bin Verzeichnis des Users Bernd ausgeführt werden.
Dazu wird die Datei /etc/udev/rules.d/80-usbprog.rules editiert bzw. angelegt.
root@Mars64:/etc/udev/rules.d# cat 80-usbprog.rules ATTR{idVendor}=="0403", ATTR{idProduct}=="6001", GROUP="plugdev", \ MODE="0660" RUN+="/home/bernd/bin/aqua-init" # FTDI FT232 USB-Serial ATTR{idVendor}=="16c0", ATTR{idProduct}=="05dc", GROUP="plugdev", \ MODE="0660" # USBASP von www.fischl.de
Die Zeilen sind hier zur besseren Lesbarkeit mit "\" getrennt - sollten aber an einem Stück geschrieben sein.
In der oberen Zeile wird das Programm /home/bernd/bin/aqua-init aufgerufen, wenn das Future Technology Device angesteckt wird.
Mit der zweiten Zeile werden "nur" die Zugriffsrechte für einen USB-Programmieradapter gesetzt. Die Gruppe "plugdev" bekommt Lese- und Schreibrechte für den Programmierer.
Nach dem Editieren bzw. Anlegen der Datei muss nur noch udev neu gestartet werden.
/etc/init.d/udev restartDanach sollte bei jedem Anstecken des Devices das entsprechende Programm bzw. Skript ausgeführt werden.
zum Seitenanfang
Erkennen von USB-Disks und USB-Sticks
Will man ein Programm immer ausführen, wenn ein Massenspeicher (USB-Stick oder USB-Drive) angesteckt wird, so ist das wegen wechselnder Vendor-IDs ziemlich unpraktisch.
Hier bietet sich folgende Alternative an
root@Mars64:/etc/udev/rules.d# cat 81-usbdrive.rules KERNEL=="sd?1", SUBSYSTEM=="block", SYMLINK+="LinuxHack", RUN+="/root/bin/test.sh \ 'MyUSBdrive' Connected as: $KERNEL'"
Dadurch wird das Programm /root/bin/test.sh gestartet, wenn ein Block Device (= USB-Drive) angesteckt wird.
zum Seitenanfang
Warenzeichen und Marken sind Eigentum der jeweiligen Besitzer.
Das Ing.Büro Bernd Holzhauer distanziert sich grundsätzlich von gesetzeswidrigen und möglicherweise illegalen Inhalten in Seiten, auf die über www.cc-c.de verwiesen wird. Sollte Ihnen diesbezüglich etwas auffallen, melden Sie es uns bitte per email.