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 < | ||
| + | |||