Teil 2 Benutzerdefinierte Regeln (udev). Gerät identifizieren und Regel erstellen.
Wo sich die Regeln befinden kann sich im ersten Teil nachgelesen werden. Teil 1 – Benutzerdefinierte Regel (udev) erstellen z.B. beim Einstecken eines USB-Sticks oder einer Tastatur am Raspberry Pi.
Auslesen von Informationen – Gerät identifizieren
Im ersten Schritt werden die Informationen zum eindeutigen Identifizieren des Zubehörs ausgelesen. Hierzu wird das Programm lsusb
verwendet. Der USB-Stick muss dafür in den Raspberry Pi eingesteckt sein.
Als Kriterien für eine udev-Regel empfiehlt sich:
– Die Seriennummer des Gerätes
– Die Herstellerkennung und Geräte-ID
– Die Herstellerkennung und Gerätebezeichnung
Die ausgegebene Tabelle zeigt hierbei die entsprechenden Geräte an und es lassen sich dadurch weitere Informationen mit entsprechenden Befehlen auslesen. Als Universalwerkzeug kann auch udevadm
eingesetzt werden.
pi@raspberry:~ $ lsusb
Bus 001 Device 005: ID 12d1:1506 Huawei Technologies Co., Ltd. Modem/Networkcard
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Der vorhandene Surfstick in diesem Tutorial trägt die Kennung des Herstellers 12d
sowie die individuelle Geräte-ID 1506
Anhand der Geräte-ID lässt sich der Stick leichter zuordnen und detailliertere Informationen mittels lsusb -d 12d1:1506
auslesen.
Der Parameter -v steht hierbei für die Abkürzung Verbose, welches passenderweise ausführlich bedeutet.
pi@raspberry:~ $ lsusb -d 12d1:1506 -v
Bus 001 Device 005: ID 12d1:1506 Huawei Technologies Co., Ltd. Modem/Networkcard
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.10
bDeviceClass 0 (Defined at Interface level)
bDeviceSubClass 0
bDeviceProtocol 0
bMaxPacketSize0 64
idVendor 0x12d1 Huawei Technologies Co., Ltd.
idProduct 0x1506 Modem/Networkcard
bcdDevice 1.02
iManufacturer 1
iProduct 2
iSerial 0
bNumConfigurations
Zur eindeutigen Identifizierung und um Verwechselungen mit anderen Geräten auszuschließen werden hier die drei Parameter idVendor
, idProduct
sowie iSerial
verwendet. Dieser Werte lassen sich sehr gut für die Erstellung einer udev-Regel verwenden.
udev-Regel schreiben und in Datei abspeichern.
Die neue Datei wird mit Root-Rechten erstellt und in dem Verzeichnis /lib/udev/rules.d/
abgelegt.
Hierbei sollte man auf die Zahl am Anfang des Dateinamens achten, da diese nach Reihenfolge abgearbeitet werden. Je nach Regelkonfiguration können sonst bereits vorhandene Regeln überschrieben werden und das System funktioniert nur noch eingeschränkt oder Geräte werden nicht mehr erkannt. Es empfiehlt sich hier mit einem hohen Wert zu arbeiten z.B. am 90.
Zu beachten ist ebenfalls, dass der Dateiname mit .rules
endet, da die udev-Regel sonst nicht ausgeführt wird.
sudo nano /lib/udev/rules.d/90-wvdial.rules
Es bietet sich an hier mehrere Kommentare in die Datei einzufügen um dies bei einer eventuellen späteren Bearbeitung besser und schneller zuordnen zu können. Kommentare beginnen immer mit einer Raute #
.
Das vollständige Script vorab, weitere Einzelheiten folgen im nachstehenden Text.
# Telekom Stick weiß
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="12d1", ATTRS{idProduct}=="1506", RUN+="/usr/bin/wvdial tmobile"
ACTION=="remove", ENV{ID_SERIAL_SHORT}=="0123456789ABCDEF", RUN+="/usr/bin/killall wvdial"
Automatischer Start eines Skripts
In der ersten Zeile ist ein Kommentar zu sehen, in diesem Beispiel handelt es sich um einen Surfstick, welcher nach dem Einstecken automatisch mit dem Internet verbunden werden soll.
# Telekom Stick weiß
Die zweite Zeile wird ausgeführt, wenn der Stick in den USB-Port eingedeckt wird und als solches einwandfrei erkannt wird.
Die ACTION=="add"
bezieht sich hierbei auf das Einstecken des Surfsticks in den Port. Danach wird diese Regel ausgeführt.
Zur weiteren Identifikation dienen hierbei die nachstehenden Variablen.
Das Subsystem USB SUBSYSTEM=="usb"
, da es sich hierbei um einen USB-Stick handelt bzw. ein an das USB-System angeschossenes Gerät.
Über die beiden Variablen ATTRS{idVendor}=="12d1"
und ATTRS{idProduct}=="1506"
wird das Gerät eindeutig identifiziert. Die entsprechenden IDs sind mit dem passenden Sick auszutauschen. Die Ermittlung erfolgt in diesem Tutorial mit Hilfe des Tools lsusb
.
Der Punkt RUN+="/usr/bin/wvdial tmobile"
ruft das Script /usr/bin/wvdial
mit dem Parameter tmobile
auf. Es ist zu beachten, dass das Script mit dem vollständigen Pfad aufgerufen wird.
Mit dem Punkt RUN kann immer nur ein einzelner Befehl ausgeführt werden. Es können jedoch mehrere RUN+=-Einträge hintereinander aufgerufen werden. Dies ermöglicht es mehrere Scripte oder Programme zu starten.
RUN+="/usr/bin/programm1", RUN+="/usr/bin/programm2"
udev-Regel für das Entfernen eines Gerätes
Für das entfernen des Gerätes aus dem USB-Port wird ebenfalls eine Regel in der gleichen Datei erstellt. Diese befindet sich in diesem Beispiel in der Zeile 4.
ACTION=="remove", ENV{ID_SERIAL_SHORT}=="0123456789ABCDEF", RUN+="/usr/bin/killall wvdial"
Die udev-Regel, welcher beim Anstecken des Gerätes funktioniert ist beim Entfernen des Sticks nicht mehr anwendbar. Das Austauschen der Vatiable ACTION=="add"
in ACTION=="remove"
funktioniert hier nicht. Auf den Speicherbereich des Gerätes, in denen die Signaturen gespeichert sind, kann nicht mehr zugegriffen werden, da der Stick nicht mehr vorhanden ist.
Zum Identifizieren des Gerätes werden die Environment-Variablen benötigt. Diese lassen sich mit dem Befehl udevadm monitor --env
überwachen und auslesen.
Nach dem Entfernen des Gerätes lassen sich die entsprechenden Variablen auslesen.
ID_SERIAL_SHORT=0123456789ABCDEF
Die Environment-Variablen lassen sich auch beim Anstecken des Geräts zur Identifizierung nutzen.
Über den zusätzlichen Eintrag RUN+="/usr/bin/killall wvdial"
wird das Script beendet und aus dem Speicher gelöscht. Somit ist ebenfalls die Internetverbindung des UMTS-Surfsticks beendet.