Logo


Computer Communication & Consulting

Linux Howto

letzte Änderung 08.07.2012

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 restart
Danach 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




Home Page
Ranking-Hits
Copyright © 2001-2014 Bernd Holzhauer. Alle Rechte vorbehalten.
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.