Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
wiki:dienste:udev [2012/01/31 10:07] – angelegt wikiadmin | wiki:dienste:udev [2013/11/26 12:08] (aktuell) – [was] wikiadmin | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | Operatoren | + | ~~BARCODE~class=barcode_right~size=S~~ |
+ | |||
+ | Udev ist ein System zur überwachung von Hotplug-fähigen geräten. Bekommt udev Informationen über ein neues Gerät, wertet es diese anhand frei konfigurierbarer Regeln aus und gibt dem Gerät einen Namen | ||
- | ^Operator^Typ^Bedeutung^ | + | Ab Ubuntu 10.04 werden wohl auch Eingabegeräte (Maus, Tastatur, Grafiktablet) über udev erkannt (nicht mehr über HAL). |
- | |==|Vergleich|wahr, wenn beide Ausdrücke gleich sind| | + | |
- | |!=|Vergleich|wahr, wenn die beiden Ausdrücke ungleich sind| | + | |
- | |=|Zuweisung|weist den Wert der rechten Seite der linken zu| | + | |
- | |: | + | |
- | |+=|Zuweisung|fügt der linken Seite den Wert der rechten an| | + | |
- | Konstanten | + | Die Regeln für die Erkennung der Geräte wird in ''/ |
+ | |||
+ | Sollte man mal in den Genuss kommen, selbst udev-Regeln zu erstellen, gibt es hier ein kleines Tutorial. | ||
+ | |||
+ | ====== Informationsbeschaffung ====== | ||
+ | |||
+ | Zuerst sollte man so viele Informationen wie möglich über das Gerät sammeln. Unter anderem sind Vender- | ||
+ | |||
+ | ===== USB-Geräte ===== | ||
+ | |||
+ | ==== Methode 1 ==== | ||
+ | |||
+ | Bei USB-Geräten ist es noch relativ einfach, Informationen zu sammeln. ein simples | ||
+ | |||
+ | < | ||
+ | lsusb | ||
+ | </ | ||
+ | |||
+ | bringt hier schon mal die Vendor- und DeviceID. | ||
+ | < | ||
+ | Bus 002 Device 011: ID 13fe:1d00 Kingston Technology Company Inc. DataTraveler 2.0 1GB/4GB Flash Drive / Patriot Xporter 4GB Flash Drive | ||
+ | </ | ||
+ | |||
+ | Mehr Informationen bringt da schon | ||
+ | < | ||
+ | lsusb -v > ~/ | ||
+ | </ | ||
+ | Da dies sehr viele Informationen bringt, wird es in eine Datei umgeleitet. Sucht man jetzt nach der Device-ID, kommt man zu weiteren Informationen | ||
+ | |||
+ | Um dem Datenwust Herr zu werden, kann man noch die Parameter '' | ||
+ | |||
+ | < | ||
+ | Bus 002 Device 009: ID 13fe:1d00 Kingston Technology Company Inc. DataTraveler 2.0 1GB/4GB Flash Drive / Patriot Xporter 4GB Flash Drive | ||
+ | Device Descriptor: | ||
+ | bLength | ||
+ | bDescriptorType | ||
+ | bcdUSB | ||
+ | bDeviceClass | ||
+ | bDeviceSubClass | ||
+ | bDeviceProtocol | ||
+ | bMaxPacketSize0 | ||
+ | idVendor | ||
+ | idProduct | ||
+ | bcdDevice | ||
+ | iManufacturer | ||
+ | iProduct | ||
+ | iSerial | ||
+ | bNumConfigurations | ||
+ | Configuration Descriptor: | ||
+ | bLength | ||
+ | bDescriptorType | ||
+ | wTotalLength | ||
+ | bNumInterfaces | ||
+ | bConfigurationValue | ||
+ | iConfiguration | ||
+ | bmAttributes | ||
+ | (Bus Powered) | ||
+ | MaxPower | ||
+ | Interface Descriptor: | ||
+ | bLength | ||
+ | bDescriptorType | ||
+ | bInterfaceNumber | ||
+ | bAlternateSetting | ||
+ | bNumEndpoints | ||
+ | bInterfaceClass | ||
+ | bInterfaceSubClass | ||
+ | bInterfaceProtocol | ||
+ | iInterface | ||
+ | Endpoint Descriptor: | ||
+ | bLength | ||
+ | bDescriptorType | ||
+ | bEndpointAddress | ||
+ | bmAttributes | ||
+ | Transfer Type Bulk | ||
+ | Synch Type | ||
+ | Usage Type | ||
+ | wMaxPacketSize | ||
+ | bInterval | ||
+ | Endpoint Descriptor: | ||
+ | bLength | ||
+ | bDescriptorType | ||
+ | bEndpointAddress | ||
+ | bmAttributes | ||
+ | Transfer Type Bulk | ||
+ | Synch Type | ||
+ | Usage Type | ||
+ | wMaxPacketSize | ||
+ | bInterval | ||
+ | </ | ||
+ | |||
+ | Hier kann man dann auch die Seriennummer, | ||
+ | |||
+ | Aus diesen Informationen kann man dann schon eine udev-Regel bauen. | ||
+ | |||
+ | ==== Methode 2 ==== | ||
+ | |||
+ | Noch einfacher ist es, sich die Daten per '' | ||
+ | |||
+ | Hier sollte man nach dem anstecken mal '' | ||
+ | |||
+ | Jetzt per udevadm die Informationen anzeigen lassen | ||
+ | < | ||
+ | udevadm info --query=all --attribute-walk --name=/ | ||
+ | </ | ||
+ | |||
+ | Jetzt noch nach der VenderID suchen und schon hat man fertige Attribute mit Bezeichner. Diese kann man einfach in die regeldatei kopieren | ||
+ | |||
+ | < | ||
+ | looking at parent device '/ | ||
+ | KERNELS==" | ||
+ | SUBSYSTEMS==" | ||
+ | DRIVERS==" | ||
+ | ATTRS{configuration}=="" | ||
+ | ATTRS{bNumInterfaces}==" | ||
+ | ATTRS{bConfigurationValue}==" | ||
+ | ATTRS{bmAttributes}==" | ||
+ | ATTRS{bMaxPower}==" | ||
+ | ATTRS{urbnum}==" | ||
+ | ATTRS{idVendor}==" | ||
+ | ATTRS{idProduct}==" | ||
+ | ATTRS{bcdDevice}==" | ||
+ | ATTRS{bDeviceClass}==" | ||
+ | ATTRS{bDeviceSubClass}==" | ||
+ | ATTRS{bDeviceProtocol}==" | ||
+ | ATTRS{bNumConfigurations}==" | ||
+ | ATTRS{bMaxPacketSize0}==" | ||
+ | ATTRS{speed}==" | ||
+ | ATTRS{busnum}==" | ||
+ | ATTRS{devnum}==" | ||
+ | ATTRS{version}==" | ||
+ | ATTRS{maxchild}==" | ||
+ | ATTRS{quirks}==" | ||
+ | ATTRS{authorized}==" | ||
+ | ATTRS{manufacturer}==" | ||
+ | ATTRS{product}==" | ||
+ | ATTRS{serial}==" | ||
+ | </ | ||
+ | |||
+ | ====== udev-Regel bauen ====== | ||
+ | |||
+ | Eine udev-Regel ist einfach eine filterung von verschieden Eigenschaften eines Geräts. | ||
+ | |||
+ | Unser Beispiel-USB-Stick würde schon mit folgenden Informationen erkannt werden | ||
+ | <file bash 98-usbmount.rules> | ||
+ | ATTRS{idVendor}==" | ||
+ | </ | ||
+ | |||
+ | da es aber tausende USB-Sticks diesen Typs gibt, sollte man hier noch die Seriennummer mit einbeziehen. | ||
+ | |||
+ | <file bash 98-usbmount.rules> | ||
+ | ATTRS{idVendor}==" | ||
+ | </ | ||
+ | |||
+ | Zur Übersicht ist hier eine Tabelle mit häufig genutzen Identifizierungsvariablen | ||
^Name^Bedeutung^ | ^Name^Bedeutung^ | ||
- | |ACTION|Ereignis, | ||
|SUBSYSTEM|Gerätetyp, | |SUBSYSTEM|Gerätetyp, | ||
|BUS|Bussystem des Geräts, zum Beispiel ieee1394 oder usb| | |BUS|Bussystem des Geräts, zum Beispiel ieee1394 oder usb| | ||
Zeile 18: | Zeile 167: | ||
|KERNEL|Gerätename laut Kernel| | |KERNEL|Gerätename laut Kernel| | ||
|SYSFS{Datei }|Verwendet Informationen bestimmter Dateien aus /sys (enthalten Angaben zur Hardware); pro Regel maximal fünf SYSFS-Konstanten| | |SYSFS{Datei }|Verwendet Informationen bestimmter Dateien aus /sys (enthalten Angaben zur Hardware); pro Regel maximal fünf SYSFS-Konstanten| | ||
- | |OWNER|Besitzer | + | |
- | |GROUP|Gruppe (Name oder GID)| | + | Jetzt hat man das Gerät eindeutig identifiziert. doch __was__ soll mit dem Gerät __wann__ geschehen. Dazu muss die Regel erweitert werden. |
- | |MODE|Zugriffsrechte (Oktalzahlen)| | + | |
+ | ===== Wann ===== | ||
+ | |||
+ | Hier greift die Variable ACTION | ||
+ | |||
+ | Soll die Regel beim **An**stecken ausgeführt werden, muss es folgendermaßen erweitern werden | ||
+ | |||
+ | <file bash 98-usbmount.rules> | ||
+ | ACTION==" | ||
+ | </ | ||
+ | |||
+ | Soll die Regel beim **Ab**stecken ausgeführt werden, muss es folgendermaßen erweitern werden | ||
+ | |||
+ | <file bash 98-usbmount.rules> | ||
+ | ACTION==" | ||
+ | </ | ||
+ | |||
+ | ===== was ===== | ||
+ | |||
+ | Hier greifen die Variablen RUN und SYMLINK. | ||
+ | |||
+ | SYMLINK bedeutet einfach, dass auf das erkannte Gerät | ||
+ | |||
+ | <file bash 98-usbmount.rules> | ||
+ | ACTION==" | ||
+ | </ | ||
+ | |||
+ | Jetzt kann man den Stick immer per / | ||
+ | |||
+ | RUN bedeutet, dass man ein Programm, dass angegeben wird, ausführen lassen kann. Das beste Beispiel ist hier eine BackupFestplatte. Sollte diese BackupPlatte angeschlossen werden soll ein Backup-Skript ausgeführt werden. Zum Aufruf muss die Regel folgendermaßen erweitert werden. | ||
+ | |||
+ | <file bash 98-usbmount.rules> | ||
+ | ACTION==" | ||
+ | </ | ||
+ | |||
+ | Zur Information ist hier eine Tabelle mit den meistgenutzten Aktionsvariablen | ||
+ | |||
+ | ^Name^Bedeutung^ | ||
+ | |ACTION|Ereignis, entweder add oder remove| | ||
|RUN|führt das angegebene Programm aus.| | |RUN|führt das angegebene Programm aus.| | ||
|SYMLINK|legt einen symbolischen Link an, der auf den tatsächlichen Devicenamen verweist.| | |SYMLINK|legt einen symbolischen Link an, der auf den tatsächlichen Devicenamen verweist.| | ||
- | |GOTO|springt zu einer angegebenen Sprungmarke.| | + | |OWNER|Ändert den Besitzer des Devices (Benutzername oder UID)| |
- | |LABEL|Name der Sprungmarke| | + | |GROUP|Ändert die Gruppe des Devices (Name oder GID)| |
+ | |MODE|Ändert die Zugriffsrechte des Devices (Oktalzahlen)| | ||
+ | |||
+ | ====== Troubleshooting ====== | ||
+ | |||
+ | Das Tool < | ||
+ | |||
+ | Mit < | ||
+ |