Udev: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
Henrikx (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
 
(21 dazwischenliegende Versionen von 11 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Udev ersetzt die  die Funktionalität von hotplug und hwdetect.
{{SEITENTITEL:udev}}
udev ersetzt die  die Funktionalität von hotplug und hwdetect.


''"udev is the device manager for the Linux kernel. Primarily, it manages device nodes in /dev. It is the successor of devfs and hotplug, which means that it handles the /dev directory and all user space actions when adding/removing devices, including firmware load."'' Quelle: [http://en.wikipedia.org/wiki/Udev Wikipedia] {{sprache|en}}
''"udev is the device manager for the Linux kernel. Primarily, it manages device nodes in /dev. It is the successor of devfs and hotplug, which means that it handles the /dev directory and all user space actions when adding/removing devices, including firmware load."'' Quelle: [http://en.wikipedia.org/wiki/Udev Wikipedia] {{sprache|en}}


Udev lädt Kernel Module parallel um einen Geschwindigkeitsvorteil gegenüber dem nacheinander laden der einzelnen Module zu liefern.
Udev lädt Kernel Module parallel um einen Geschwindigkeitsvorteil gegenüber dem nacheinander laden der einzelnen Module zu liefern.
Nachteil dieser Methode ist, dass es vorkommen kann, dass beim Booten des Rechners die Module nicht immer in der gleichen Reiehnfolge geladen werden. Dadurch kann es dazu kommen, dass device Namen in /dev/ zufällig wechseln. Bei einem Rechner mit zwei Netzwerkkarten kann das zum Beispiel dazu führen, dass die erste Karte manchmal /dev/eth0 und manchmal /dev/eth1 ist und umgekehrt. Das Problem kann man mit Udev Regeln umgehen, worauf weiter unten eingegangen wird.
Nachteil dieser Methode ist, dass es vorkommen kann, dass beim Booten des Rechners die Module nicht immer in der gleichen Reihenfolge geladen werden. Dadurch kann es dazu kommen, dass device Namen in /dev/ zufällig wechseln. Bei einem Rechner mit zwei Netzwerkkarten kann das zum Beispiel dazu führen, dass die erste Karte manchmal /dev/eth0 und manchmal /dev/eth1 ist und umgekehrt. Das Problem kann man mit Udev Regeln umgehen, worauf weiter unten eingegangen wird.


== Udev Regeln ==
== Udev Regeln ==
Selbst erstellte Udev Regeln werden in /etc/udev/rules.d gespeichert. Der Dateiname muss die Endung .rules haben. Udev Regeln die in fertigen Paketen enthalten sind befinden sich in /lib/udev/rules.d/. Falls in /lib/udev/rules.d/ und /etc/udev/rules.d/ zwei Dateien mit dem gleichen Namen vorhanden sind, hat die Regel unter /etc Vorrang.  
Selbst erstellte Udev Regeln werden in /etc/udev/rules.d gespeichert. Der Dateiname muss die Endung .rules haben. Udev Regeln die in fertigen Paketen enthalten sind befinden sich in /lib/udev/rules.d/. Falls in /lib/udev/rules.d/ und /etc/udev/rules.d/ zwei Dateien mit dem gleichen Namen vorhanden sind, hat die Regel unter /etc Vorrang.  


Ausführliche Informationen zum erstelln von Udev Regeln kann man hier finden:
Ausführliche Informationen zum erstellen von Udev Regeln kann man hier finden:
[http://www.reactivated.net/writing_udev_rules.html Writing Udev Rules] {{sprache|en}}
[http://www.reactivated.net/writing_udev_rules.html Writing Udev Rules] {{sprache|en}}


Zeile 20: Zeile 21:
    
    
== UDisks ==
== UDisks ==
Wenn das Paket [https://www.archlinux.org/packages/?name=udisks udisks] installiert ist, sollten in [[GNOME]] und [[KDE]] SC 4.6 alle Medien / Geräte automatisch gemountet werden. Es werden keine weiteren Udev Regeln benötigt. Außerdem kann dann [[HAL]] deinstalliert werden, falls es nur Zwecks des automatischen mountens installiert war.
Wenn das Paket [https://www.archlinux.org/packages/?name=udisks udisks] installiert ist, sollten in [[GNOME]] und [[KDE]] SC 4.6 alle Medien / Geräte automatisch gemountet werden. Es werden keine weiteren Udev Regeln benötigt.


=== UDisks Wrapper ===
=== UDisks Wrapper ===
Zeile 28: Zeile 29:
* [http://igurublog.wordpress.com/downloads/script-devmon/ devmon] - [https://aur.archlinux.org/packages.php?K=devmon&SeB=x devmon] ist ein konfigurationsloses Bash Wrapper Script für UDisks. Es mountet automatisch optische und auswechselbare Datenträger. Außerdem kann es nach dem mounten automatisch Anwendungen starten oder bestimmte Kommandos ausführen, festgelegte devices und Datenträger Labels ignorieren und auswechselbare Datenträger unmounten. Es gibt auch eine [[Git|GIT]] Version. [https://aur.archlinux.org/packages.php?K=devmon-git&SeB=x devmon-git]
* [http://igurublog.wordpress.com/downloads/script-devmon/ devmon] - [https://aur.archlinux.org/packages.php?K=devmon&SeB=x devmon] ist ein konfigurationsloses Bash Wrapper Script für UDisks. Es mountet automatisch optische und auswechselbare Datenträger. Außerdem kann es nach dem mounten automatisch Anwendungen starten oder bestimmte Kommandos ausführen, festgelegte devices und Datenträger Labels ignorieren und auswechselbare Datenträger unmounten. Es gibt auch eine [[Git|GIT]] Version. [https://aur.archlinux.org/packages.php?K=devmon-git&SeB=x devmon-git]


* [https://wiki.archlinux.org/index.php/Udiskie Udiskie] - In Python geschrieben. Aktiviert automatisches mountne und unmounten für alle Benutzer.
* [https://wiki.archlinux.org/index.php/Udiskie Udiskie] - In Python geschrieben. Aktiviert automatisches mounten und unmounten für alle Benutzer.


* [https://aur.archlinux.org/packages.php?K=udisksevt&SeB=x udisksevt] - In Haskell geschrieben. Aktiviert automatisches mounten für alle Benutzer. Entwickelt für die Integration mit [https://aur.archlinux.org/packages.php?K=traydevice&SeB=x traydevice].
* [https://aur.archlinux.org/packages.php?K=udisksevt&SeB=x udisksevt] - In Haskell geschrieben. Aktiviert automatisches mounten für alle Benutzer. Entwickelt für die Integration mit [https://aur.archlinux.org/packages.php?K=traydevice&SeB=x traydevice].
Zeile 45: Zeile 46:


==== Mount Optionen ====
==== Mount Optionen ====
In den folgenden Udev Regeln sind die Mount Optionen als '''ENV{mount_options}="realtime" definiert. Siehe ''man mount''(und evtl. ''man ntfs-3g'') für alle verfügbaren Optionen.
In den folgenden Udev Regeln sind die Mount Optionen als '''ENV{mount_options}="relatime" definiert. Siehe ''man mount''(und evtl. ''man ntfs-3g'') für alle verfügbaren Optionen.


* Die Option ''users'' erlaubt es Benutzern '''nicht''' das Dateisystem auszuhängen.
* Die Option ''users'' erlaubt es Benutzern '''nicht''' das Dateisystem auszuhängen.
* Die Option ''noexec'' verbietet das Ausführen von binär Dateien von dem eingehängeten Dateisystem.
* Die Option ''noexec'' verbietet das Ausführen von binär Dateien von dem eingehängten Dateisystem.
* Partitionen während des Bootens im Lese-Schreib Modus zu mounten kann dazu führen das fsck nicht funktioniert. In diesem Fall muss die betroffenen Partition manuell im nur-lesen Modus neu gemountet werden.
* Partitionen während des Bootens im Lese-Schreib Modus zu mounten kann dazu führen das fsck nicht funktioniert. In diesem Fall muss die betroffenen Partition manuell im nur-lesen Modus neu gemountet werden.


Zeile 90: Zeile 91:
  LABEL="media_by_label_auto_mount_end"
  LABEL="media_by_label_auto_mount_end"


==== Unter /media einbinden; Partitions Label verwenden falls vorhanden; unterstüzt LUKS Verschlüsselung ====
==== Unter /media einbinden; Partitions Label verwenden falls vorhanden; unterstützt LUKS Verschlüsselung ====
Wie die vorherige Regel, aber falls eine LUKS verschlüsselte Partition erkannt wird, öffnet sich ein XTerm Fenster in dem nach dem Passwort gefragt wird (vorrausgesetzt XTerm ist installiert). Siehe auch: [https://bbs.archlinux.org/viewtopic.php?pid=696239#p696239] {{sprache|en}}
Wie die vorherige Regel, aber falls eine LUKS verschlüsselte Partition erkannt wird, öffnet sich ein XTerm Fenster in dem nach dem Passwort gefragt wird (vorausgesetzt XTerm ist installiert). Siehe auch: [https://bbs.archlinux.org/viewtopic.php?pid=696239#p696239] {{sprache|en}}


{{hinweis|Evtl. muss der Pfad zu cryptsetup angepasst werden. Je nach dem welche Version installiert ist (z.B. < 1.1.1_rc2-1).}}
{{hinweis|Evtl. muss der Pfad zu cryptsetup angepasst werden. Je nach dem welche Version installiert ist (z.B. < 1.1.1_rc2-1).}}
Zeile 101: Zeile 102:
   
   
  # Do not mount devices already mounted somewhere else to avoid entries for all your local partitions in /media
  # Do not mount devices already mounted somewhere else to avoid entries for all your local partitions in /media
  ACTION=="add", PROGRAM=="/bin/grep -q ' /dev/%k ' /proc/self/mountinfo", GOTO="media_by_label_auto_mount_end"
  ACTION=="add", PROGRAM=="/usr/bin/grep -q ' /dev/%k ' /proc/self/mountinfo", GOTO="media_by_label_auto_mount_end"
   
   
  # Open LUKS partition if necessary
  # Open LUKS partition if necessary
Zeile 240: Zeile 241:
   
   
  # Global mount options
  # Global mount options
  ACTION=="add", ENV{mount_options}="realtime"
  ACTION=="add", ENV{mount_options}="relatime"
  # Filesystem specific options
  # Filesystem specific options
  ACTION=="add", IMPORT{program}="/sbin/blkid -o udev -p %N"
  ACTION=="add", IMPORT{program}="/sbin/blkid -o udev -p %N"
Zeile 269: Zeile 270:


=== Ausführen bei anstecken von USB Geräten ===
=== Ausführen bei anstecken von USB Geräten ===
Siehe [https://wiki.archlinux.org/index.php/Execute_on_usb_insert execute on usb insert] {{sprache|en}} oder [http://igurublog.wordpress.com/downloads/script-devmon/ devmon wrapper script] {{sprache|en}}.
Siehe [https://wiki.archlinux.org/index.php/Execute_on_USB_insert execute on usb insert] {{sprache|en}} oder [http://igurublog.wordpress.com/downloads/script-devmon/ devmon wrapper script] {{sprache|en}}.


=== Interne Laufwerke als normaler Benutzer einbinden ===
=== Interne Laufwerke als normaler Benutzer einbinden ===
Zeile 287: Zeile 288:


{{Hinweis|DEVPATH kann mit diesem Befehl ermittelt werden nachdem das eSATA Laufwerk angeschlossen wurde.sdb entsprechedn anpassen.
{{Hinweis|DEVPATH kann mit diesem Befehl ermittelt werden nachdem das eSATA Laufwerk angeschlossen wurde.sdb entsprechedn anpassen.
  # find /sys/devices/ -name sdb
  # find /sys/devices/ -name sdb                              
/sys/devices/pci0000:00/0000:00:1f.2/host4/target4:0:0/4:0:0:0/block/sdb
 
}}
}}


=== Feste Device Namen vergeben ===
=== Feste Device Namen vergeben ===
Da Udev alle Module asynchron lädt, werden sie nicht immer in der gleichen Reihenfolge geladen. Das kann dazu führen, dass Device Namen eines Gerätes zufällig wechseln. Um das zu verweiden kann eine Udev Regel angelgt werden, die dafür sorgt das ein bestimmtes Gerät immer den gleichen Device Namen zugewiesen bekommt.
Da Udev alle Module asynchron lädt, werden sie nicht immer in der gleichen Reihenfolge geladen. Das kann dazu führen, dass Device Namen eines Gerätes zufällig wechseln. Um das zu vermeiden kann eine Udev Regel angelegt werden, die dafür sorgt, dass ein bestimmtes Gerät immer den gleichen Device Namen zugewiesen bekommt.


==== Netzwerkkarten ====
==== Netzwerkkarten ====
Mit Zwei Netzwerkkarten, kann es zum Beispiel dazu kommen das eine Karte manchaml eth0 zugewiesen bekommt und ein anderes mal eth1.
Mit zwei Netzwerkkarten, kann es zum Beispiel dazu kommen das eine Karte manchmal eth0 zugewiesen bekommt und ein anderes mal eth1.
Eine Methode dies zu verhindern ist ein Udev Regel, die anhand der MAC Adressen den Karten immer die gleiche Bezeichnungen zuordnet.  
Eine Methode dies zu verhindern ist ein Udev Regel, die anhand der MAC Adressen den Karten immer die gleiche Bezeichnungen zuordnet.  
  /etc/udev/rules.d/10-network.rules
  /etc/udev/rules.d/10-network.rules
Zeile 357: Zeile 358:


=== Bekannte Hardwareprobleme ===
=== Bekannte Hardwareprobleme ===
==== BusLogic Geräte verursachen ein Freeze beim starten ====
==== BusLogic Geräte verursachen ein Freeze beim Starten ====
Das ist ein Kernel Bug der noch nicht behoben wurde.
Das ist ein Kernel Bug der noch nicht behoben wurde.
==== Einige Geräte werden nicht als Wechselbar behandelt, sollten aber====
==== Einige Geräte werden nicht als Wechselbar behandelt, sollten aber====
Eine Udev Regel ertstellen in der '''UDISKS_SYSTEM_INTERNAL=0''' gesetzt wird. Für mehr Informationen die udisks man-page lesen.
Eine Udev Regel erstellen in der '''UDISKS_SYSTEM_INTERNAL=0''' gesetzt wird. Für mehr Informationen die udisks man-page lesen.


=== Bekannte Probleme mit automatischen Laden ===
=== Bekannte Probleme mit automatischen Laden ===
==== CPU Frequenz Module ====
==== CPU Frequenz Module ====
Die aktuelle Erkennung der verschiedenen CPU Frequenz Controller ist unzureichend. Deshalb wurde die funktionalität diese Module automatisch zu laden bis auf weiteres erst einmal entfernt. Die entsprechenden Module müssen im MODULES Array in der [[rc.conf]] explizit eingetragen werden.
Die aktuelle Erkennung der verschiedenen CPU Frequenz Controller ist unzureichend. Deshalb wurde die funktionalität diese Module automatisch zu laden bis auf weiteres erst einmal entfernt. Die entsprechenden Module müssen in z.B. /etc/modules-load.d/meinemodule.conf explizit eingetragen werden.


==== Sound Probleme oder einige Module werden nicht automatisch geladen ====
==== Sound Probleme oder einige Module werden nicht automatisch geladen ====
Zeile 378: Zeile 379:
* [http://vger.kernel.org/vger-lists.html#linux-hotplug Udev mailing list information] {{sprache|en}}
* [http://vger.kernel.org/vger-lists.html#linux-hotplug Udev mailing list information] {{sprache|en}}


[[en:Udev]]
[[Kategorie:Konfiguration]]
[[Kategorie:Konfiguration]]
[[Kategorie:Hardware]]
[[Kategorie:Hardware]]

Aktuelle Version vom 4. Juli 2017, 10:58 Uhr

udev ersetzt die die Funktionalität von hotplug und hwdetect.

"udev is the device manager for the Linux kernel. Primarily, it manages device nodes in /dev. It is the successor of devfs and hotplug, which means that it handles the /dev directory and all user space actions when adding/removing devices, including firmware load." Quelle: Wikipedia

Udev lädt Kernel Module parallel um einen Geschwindigkeitsvorteil gegenüber dem nacheinander laden der einzelnen Module zu liefern. Nachteil dieser Methode ist, dass es vorkommen kann, dass beim Booten des Rechners die Module nicht immer in der gleichen Reihenfolge geladen werden. Dadurch kann es dazu kommen, dass device Namen in /dev/ zufällig wechseln. Bei einem Rechner mit zwei Netzwerkkarten kann das zum Beispiel dazu führen, dass die erste Karte manchmal /dev/eth0 und manchmal /dev/eth1 ist und umgekehrt. Das Problem kann man mit Udev Regeln umgehen, worauf weiter unten eingegangen wird.

Udev Regeln

Selbst erstellte Udev Regeln werden in /etc/udev/rules.d gespeichert. Der Dateiname muss die Endung .rules haben. Udev Regeln die in fertigen Paketen enthalten sind befinden sich in /lib/udev/rules.d/. Falls in /lib/udev/rules.d/ und /etc/udev/rules.d/ zwei Dateien mit dem gleichen Namen vorhanden sind, hat die Regel unter /etc Vorrang.

Ausführliche Informationen zum erstellen von Udev Regeln kann man hier finden: Writing Udev Rules

Mit dem folgenden Befehl kann man sich eine Liste mit allen Attributen eines Devices, die zum erstellen einer Udev Regel verwendet werden können, anzeigen lassen.

# udevadm info -a -n [device-name]

[device-name] muss mit dem entsprechenden device, wie z.B. /dev/sda oder /dev/ttyUSB0, ersetzt werden.

Udev erkennt Änderungen in .rules Dateien automatisch. Änderungen werden also sofort übernommen ohne Udev neustarten zu müssen. Allerdings werden die Regeln bei bereits vorhandenen Devices nicht neu eingelesen. Wechselbare Geräte wie z.B. USB Sticks müssen also evtl. einmal abgezogen und wieder eingesteckt werden, damit die Änderungen wirksam werden.

UDisks

Wenn das Paket udisks installiert ist, sollten in GNOME und KDE SC 4.6 alle Medien / Geräte automatisch gemountet werden. Es werden keine weiteren Udev Regeln benötigt.

UDisks Wrapper

Vorteil eines Udisks Wrappers ist die sehr einfache Installation und nicht (oder nur minimal) notwendige Konfiguration. Der Wrapper mountet automatisch Medien wie z.B. CDs und USB-Sticks.

  • devmon - devmon ist ein konfigurationsloses Bash Wrapper Script für UDisks. Es mountet automatisch optische und auswechselbare Datenträger. Außerdem kann es nach dem mounten automatisch Anwendungen starten oder bestimmte Kommandos ausführen, festgelegte devices und Datenträger Labels ignorieren und auswechselbare Datenträger unmounten. Es gibt auch eine GIT Version. devmon-git
  • Udiskie - In Python geschrieben. Aktiviert automatisches mounten und unmounten für alle Benutzer.
  • udisksevt - In Haskell geschrieben. Aktiviert automatisches mounten für alle Benutzer. Entwickelt für die Integration mit traydevice.
  • Das udisksvm Bash Script nutzt udiskd und traydevice um Wechselmedien automatisch zu mounten und das un- und remounten per GUI, mit Mausklicks im Systray, zu ermöglichen.

UDisks Shell Funktionen

UDisks enthält zwar eine einfache Methode für das (un)mounten per Kommandozeile, aber es ist viel Aufwand die Befehel jedesmal auszuschreiben. Diese Shell Funktionen vereinfachen die Kommandozeilen-Nutzung von UDisks.

  • udisks_functions - Für Bash geschrieben.
  • bashmount - Bashmount ist ein menübasiertes Bash Script mit einer Konfigurationsdatei, die eine einfache Konfiguration und Erweiterung ermöglicht.

Tips und Tricks

USB Geräte automatisch einbinden

Mount Optionen

In den folgenden Udev Regeln sind die Mount Optionen als ENV{mount_options}="relatime" definiert. Siehe man mount(und evtl. man ntfs-3g) für alle verfügbaren Optionen.

  • Die Option users erlaubt es Benutzern nicht das Dateisystem auszuhängen.
  • Die Option noexec verbietet das Ausführen von binär Dateien von dem eingehängten Dateisystem.
  • Partitionen während des Bootens im Lese-Schreib Modus zu mounten kann dazu führen das fsck nicht funktioniert. In diesem Fall muss die betroffenen Partition manuell im nur-lesen Modus neu gemountet werden.

Unter /media einbinden; Partitions Label verwenden falls vorhanden

Diese Regel bindet Partitionen die durch /dev/sd* (USB Sticks, externe Festplatten und manchmal auch SD Karten) automatisch ein. Falls ein Partitions Label vorhanden ist, wird die Partition unter /media/<Label> eingehängt, andernfalls unter /media/usbhd-sd* (z.B. /media/usbhd-sdb1).

/etc/udev/rules.d/11-media-by-label-auto-mount.rules

KERNEL!="sd[a-z]*", GOTO="media_by_label_auto_mount_end"
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="media_by_label_auto_mount_end"

# Do not mount devices already mounted somewhere else to avoid entries for all your local partitions in /media
ACTION=="add", PROGRAM=="/bin/grep -q ' /dev/%k ' /proc/self/mountinfo", GOTO="media_by_label_auto_mount_end"

# Open LUKS partition if necessary
PROGRAM=="/sbin/blkid -o value -s TYPE %N",  RESULT=="crypto_LUKS", ENV{crypto}="mapper/", ENV{device}="/dev/mapper/%k"
ENV{crypto}=="", ENV{device}="%N"
ACTION=="add", ENV{crypto}!="", PROGRAM=="/usr/bin/xterm -display :0.0 -e 'echo Password for /dev/%k; /sbin/cryptsetup luksOpen %N %k'"
ACTION=="add", ENV{crypto}!="", TEST!="/dev/mapper/%k", GOTO="media_by_label_auto_mount_end"

# Global mount options
ACTION=="add", ENV{mount_options}="noatime"
# Filesystem-specific mount options
ACTION=="add", PROGRAM=="/sbin/blkid -o value -s TYPE %E{device}", RESULT=="vfat|ntfs", ENV{mount_options}="%E{mount_options},utf8,gid=100,umask=002"

# Get label if present, otherwise assign one
PROGRAM=="/sbin/blkid -o value -s LABEL %E{device}", ENV{dir_name}="%c"
# Use basename to correctly handle labels such as ../mnt/foo
PROGRAM=="/usr/bin/basename '%E{dir_name}'", ENV{dir_name}="%c"
ENV{dir_name}=="", ENV{dir_name}="usbhd-%k"

# Mount the device
ACTION=="add", ENV{dir_name}!="", RUN+="/bin/mkdir -p '/media/%E{dir_name}'", RUN+="/bin/mount -o %E{mount_options} /dev/%E{crypto}%k '/media/%E{dir_name}'"

# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l '/media/%E{dir_name}'"
ACTION=="remove", ENV{crypto}!="", RUN+="/sbin/cryptsetup luksClose %k"
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/rmdir '/media/%E{dir_name}'"

# Exit
LABEL="media_by_label_auto_mount_end"

Unter /media einbinden; Partitions Label verwenden falls vorhanden; unterstützt LUKS Verschlüsselung

Wie die vorherige Regel, aber falls eine LUKS verschlüsselte Partition erkannt wird, öffnet sich ein XTerm Fenster in dem nach dem Passwort gefragt wird (vorausgesetzt XTerm ist installiert). Siehe auch: [1]

Hinweis: Evtl. muss der Pfad zu cryptsetup angepasst werden. Je nach dem welche Version installiert ist (z.B. < 1.1.1_rc2-1).

/etc/udev/rules.d/11-media-by-label-auto-mount.rules

KERNEL!="sd[a-z]*", GOTO="media_by_label_auto_mount_end"
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="media_by_label_auto_mount_end"

# Do not mount devices already mounted somewhere else to avoid entries for all your local partitions in /media
ACTION=="add", PROGRAM=="/usr/bin/grep -q ' /dev/%k ' /proc/self/mountinfo", GOTO="media_by_label_auto_mount_end"

# Open LUKS partition if necessary
PROGRAM=="/sbin/blkid -o value -s TYPE %N",  RESULT=="crypto_LUKS", ENV{crypto}="mapper/", ENV{device}="/dev/mapper/%k"
ENV{crypto}=="", ENV{device}="%N"
ACTION=="add", ENV{crypto}!="", PROGRAM=="/usr/bin/xterm -display :0.0 -e 'echo Password for /dev/%k; /sbin/cryptsetup luksOpen %N %k'"
ACTION=="add", ENV{crypto}!="", TEST!="/dev/mapper/%k", GOTO="media_by_label_auto_mount_end"

# Global mount options
ACTION=="add", ENV{mount_options}="noatime"
# Filesystem-specific mount options
ACTION=="add", PROGRAM=="/sbin/blkid -o value -s TYPE %E{device}", RESULT=="vfat|ntfs", ENV{mount_options}="%E{mount_options},utf8,gid=100,umask=002"

# Get label if present, otherwise assign one
PROGRAM=="/sbin/blkid -o value -s LABEL %E{device}", ENV{dir_name}="%c"
# Use basename to correctly handle labels such as ../mnt/foo
PROGRAM=="/usr/bin/basename '%E{dir_name}'", ENV{dir_name}="%c"
ENV{dir_name}=="", ENV{dir_name}="usbhd-%k"

# Mount the device
ACTION=="add", ENV{dir_name}!="", RUN+="/bin/mkdir -p '/media/%E{dir_name}'", RUN+="/bin/mount -o %E{mount_options} /dev/%E{crypto}%k '/media/%E{dir_name}'"

# Clean up after removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l '/media/%E{dir_name}'"
ACTION=="remove", ENV{crypto}!="", RUN+="/sbin/cryptsetup luksClose %k"
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/rmdir '/media/%E{dir_name}'"

# Exit
LABEL="media_by_label_auto_mount_end"

Unter /media einbinden; Partitions Label verwenden falls vorhanden; erlaubt Benutzer aushängen

Diese Regeln ist eine Abwandlung der beiden vorherigen. Sie nutzt pmount (welches installiert sein muss!) anstatt von mount. Das ermöglicht nicht-root-Benutzern das Aushängen von devices die von Udev eingehängt wurden und das automatische Entfernen des Einhängepuktes. Der benötigte Benutzername (hier: tomk) muss im RUN Kommando fest angegeben werden. Deshalb ist diese Regel für Mehrbenutzersysteme evtl. ungeeignet. Die LUKS Unterstüztung wurde ebenfalls entfernt, kann aber wie oben leicht wieder hinzugefügt werden. Der /bin/su Aufruf muss angepasst werden (tomk mit gewünschtem Benutzernamen ersetzen). Wenn das Device eingehängt ist, bleibt der Einhängepunkt beim Runterfahren des Systems erhalten, falls /media permanent ist, da rc.shutdown umount nutzt, welches den Einhängepunkt nicht entfernt. Um zu vermeiden, dass sich /media mit alten Einhängepunkten füllt, kann man es zum Beispiel als tmpfs mounten.

/etc/udev/rules.d/11-media-by-label-with-pmount.rules

KERNEL!="sd[a-z]*", GOTO="media_by_label_auto_mount_end"
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="media_by_label_auto_mount_end"

# Get label
PROGRAM=="/sbin/blkid -o value -s LABEL %N", ENV{dir_name}="%c"
# use basename to correctly handle labels such as ../mnt/foo
PROGRAM=="/usr/bin/basename '%E{dir_name}'", ENV{dir_name}="%c"
ENV{dir_name}=="", ENV{dir_name}="usbhd-%k"

ACTION=="add", ENV{dir_name}!="", RUN+="/bin/su tomk -c '/usr/bin/pmount %N %E{dir_name}'"
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/su tomk -c '/usr/bin/pumount /media/%E{dir_name}'"
LABEL="media_by_label_auto_mount_end"

Unter /mnt einbinden; symbolischen Link unter /media erstellen

Diese Regel berücksichtigt keine Partitions Labels. Sie hängt die Devices als usbhd-sdXY unter /mnt ein (z.B. /mnt/usbhd-sdb1) und erstellt einen symbolischen Link unter /media.

/etc/udev/rules.d/11-mnt-auto-mount.rules

KERNEL!="sd[a-z][0-9]", GOTO="mnt_auto_mount_end"

# Global mount options
ACTION=="add", ENV{mount_options}="relatime"
# Filesystem-specific mount options
ACTION=="add", IMPORT{program}="/sbin/blkid -o udev -p %N"
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"

# Mount under /mnt and create the symbolic link in /media 
ACTION=="add", RUN+="/bin/mkdir -p /mnt/usbhd-%k", RUN+="/bin/mount -o $env{mount_options} /dev/%k /mnt/usbhd-%k", RUN+="/bin/ln -s /mnt/usbhd-%k /media/usbhd-%k"

# Clean up after removal
ACTION=="remove", RUN+="/bin/rm -f /media/usbhd-%k", RUN+="/bin/umount -l /mnt/usbhd-%k", RUN+="/bin/rmdir /mnt/usbhd-%k"

# Exit
LABEL="mnt_auto_mount_end"

Unter /media einbinden; nur falls die Partition ein Label hat

/etc/udev/rules.d/11-media-by-label-only-auto-mount.rules

KERNEL!="sd[a-z][0-9]", GOTO="media_by_label_only_auto_mount_end"

# Import FS infos
IMPORT{program}="/sbin/blkid -o udev -p %N"
ENV{ID_FS_LABEL}=="", GOTO="media_by_label_only_auto_mount_end"

# Global mount options
ACTION=="add", ENV{mount_options}="relatime"
# Filesystem-specific mount options
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"

# Mount the device
ACTION=="add", RUN+="/bin/mkdir -p /media/$env{ID_FS_LABEL}", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/$env{ID_FS_LABEL}"

# Clean up after removal
ACTION=="remove", ENV{ID_FS_LABEL}!="", RUN+="/bin/umount -l /media/$env{ID_FS_LABEL}", RUN+="/bin/rmdir /media/$env{ID_FS_LABEL}"

# Exit
LABEL="media_by_label_only_auto_mount_end"

Unter /media einbinden; Partitions Label verwenden falls vorhanden; erlaubt Benutzer aushängen; ntfs-3g

Ein weiteres Beispiel, das den ntfs-3g (schreiben/lesen) Treiber für NTFS Dateisysteme nutzt.

/etc/udev/rules.d/10-my-media-automount.rules

# vim:enc=utf-8:nu:ai:si:et:ts=4:sw=4:ft=udevrules:
#
# /etc/udev/rules.d/10-my-media-automount.rules

# start at sdb to ignore the system hard drive
KERNEL!="sd[b-z]*", GOTO="my_media_automount_end"
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="my_media_automount_end"

# import some useful filesystem info as variables
IMPORT{program}="/sbin/blkid -o udev -p %N"

# get the label if present, otherwise assign one based on device/partition
ENV{ID_FS_LABEL}!="", ENV{dir_name}="%E{ID_FS_LABEL}"
ENV{ID_FS_LABEL}=="", ENV{dir_name}="usbhd-%k"

# create the dir in /media and symlink it to /mnt
ACTION=="add", RUN+="/bin/mkdir -p '/media/%E{dir_name}'"

# global mount options
ACTION=="add", ENV{mount_options}="relatime"
# filesystem-specific mount options (777/666 dir/file perms for ntfs/vfat) 
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},gid=100,dmask=000,fmask=111,utf8"

# automount ntfs filesystems using ntfs-3g driver
ACTION=="add", ENV{ID_FS_TYPE}=="ntfs", RUN+="/bin/mount -t ntfs-3g -o %E{mount_options} /dev/%k '/media/%E{dir_name}'"
# automount all other filesystems
ACTION=="add", ENV{ID_FS_TYPE}!="ntfs", RUN+="/bin/mount -t auto -o %E{mount_options} /dev/%k '/media/%E{dir_name}'"

# clean up after device removal
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/umount -l '/media/%E{dir_name}'", RUN+="/bin/rmdir '/media/%E{dir_name}'"

# exit
LABEL="my_media_automount_end"

SD Karten einbinden

Die gleiche Regel kann genutzt werden um SD Karten automatisch einzuhängen. Es muss nur sd[a-z][0-9] durch mmcblk[0-9]p[0-9] ersetzt werden.

/etc/udev/rules.d/11-sd-cards-auto-mount.rules

KERNEL!="mmcblk[0-9]p[0-9]", GOTO="sd_cards_auto_mount_end"

# Global mount options
ACTION=="add", ENV{mount_options}="relatime"
# Filesystem specific options
ACTION=="add", IMPORT{program}="/sbin/blkid -o udev -p %N"
ACTION=="add", ENV{ID_FS_TYPE}=="vfat|ntfs", ENV{mount_options}="$env{mount_options},utf8,gid=100,umask=002"

ACTION=="add", RUN+="/bin/mkdir -p /media/sd-%k", RUN+="/bin/ln -s /media/sd-%k /mnt/sd-%k", RUN+="/bin/mount -o $env{mount_options} /dev/%k /media/sd-%k"
ACTION=="remove", RUN+="/bin/umount -l /media/sd-%k", RUN+="/bin/rmdir /media/sd-%k"
LABEL="sd_cards_auto_mount_end"

CDs einbinden

Um CDs automatisch einzuhängen genügt es einen Udisks Wrapper zu installieren.

Firmware Programmierer und USB Virtual Comm Geräte

Diese Regel erlaubt es normalen Benutzern (in der Gruppe "users") auf den USBtinyISP Programmer für AVR Mikrocontroller zuzugreifen. Außerdem noch auf einen gewöhnlichen (SiLabs CP2102) USB zu UART Adapter und den Atmel AVr Dragon. Die Rechte müssen entsprechend angepasst werden. Funktion bestätigt am 11.02.2010.

/etc/udev/rules.d/50-embedded_devices.rules

# USBtinyISP Programmer rules
SUBSYSTEMS=="usb", ATTRS{idVendor}=="1781", ATTRS{idProduct}=="0c9f", GROUP="users", MODE="0666"
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="0479", GROUP="users", MODE="0666"
# USBasp Programmer rules http://www.fischl.de/usbasp/
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16c0", ATTRS{idProduct}=="05dc", GROUP="users", MODE="0666"

# Mdfly.com Generic (SiLabs CP2102) 3.3v/5v USB VComm adapter
SUBSYSTEMS=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", GROUP="users", MODE="0666"

#Atmel AVR Dragon (dragon_isp) rules
SUBSYSTEM=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2107", GROUP="users", MODE="0666"

Ausführen bei anstecken von USB Geräten

Siehe execute on usb insert oder devmon wrapper script .

Interne Laufwerke als normaler Benutzer einbinden

Um interne Laufwerke in GNOME oder KDE (evtl. auch in anderen Desktop-Umgebungen) als normaler Benutzer (ohne Eingabe des Superuser Passworts) mounten zu können, muss nur die folgende Datei in PolicyKit Local Authority erstellt werden.

/etc/polkit-1/localauthority/50-local.d/50-filesystem-mount-system-internal.pkla

[Mount a system-internal device]
Identity=*
Action=org.freedesktop.udisks.filesystem-mount-system-internal
ResultActive=yes

Interne SATA-Ports als eSATA-Ports markieren

Falls man eine eSATA Bay oder irgend einen anderen SATA Adapter angeschlossen hat, registriert das System das Laufwerk trotzdem noch als internes SATA Laufwerk. Gnome und KDE werden immer nach dem root Passwort fragen. Folgende Regel markiert den angegebenen SATA-Port als einen externen eSATA-Port. So können normale Benutzer an diesen Port eSATA Laufwerke anschließen ohne dass nach einem Passwort gefragt wird.

/etc/udev/rules.d/10-esata.rules

DEVPATH=="/devices/pci0000:00/0000:00:1f.2/host4/*", ENV{UDISKS_SYSTEM_INTERNAL}="0"

Hinweis: DEVPATH kann mit diesem Befehl ermittelt werden nachdem das eSATA Laufwerk angeschlossen wurde.sdb entsprechedn anpassen. # find /sys/devices/ -name sdb

Feste Device Namen vergeben

Da Udev alle Module asynchron lädt, werden sie nicht immer in der gleichen Reihenfolge geladen. Das kann dazu führen, dass Device Namen eines Gerätes zufällig wechseln. Um das zu vermeiden kann eine Udev Regel angelegt werden, die dafür sorgt, dass ein bestimmtes Gerät immer den gleichen Device Namen zugewiesen bekommt.

Netzwerkkarten

Mit zwei Netzwerkkarten, kann es zum Beispiel dazu kommen das eine Karte manchmal eth0 zugewiesen bekommt und ein anderes mal eth1. Eine Methode dies zu verhindern ist ein Udev Regel, die anhand der MAC Adressen den Karten immer die gleiche Bezeichnungen zuordnet.

/etc/udev/rules.d/10-network.rules

SUBSYSTEM=="net", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="lan0"
SUBSYSTEM=="net", ATTR{address}=="ff:ee:dd:cc:bb:aa", NAME="wlan0"
  • die MAC Adresse der Karten kann man mit diesem Befehl herausbekommen
udevadm info -a -p /sys/class/net/<yourdevice> | grep address | tr [A-Z] [a-z]
  • für die HEX Werte Kleinbuchstaben verwenden.
  • sollte es Probleme mit den klassischen Namen eth0, eth1, usw. geben, andere Namen wie z.B. "lan" und "wlan" verwenden.
  • nicht vergessen die evtl. neuen Bezeichnungen in der rc.conf anzupassen.

Hinweis: in neueren Udev Versionen sollte dieses Problem, dank dem Programm /lib/udev/write_net_rules bereits automatisch behoben werden. Das Programm ruft das 75-persistent-net-generator.rules Script auf welches die Regel 70-persistent-net.rules erstellt.


iscsi device

Ausgabe von scsi_id:

/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdb
3600601607db11e0013ab5a8e371ce111
/etc/udev/rules.d/75-iscsi.rules

# the iscsi device rules
# this will create an iscsi device for each of the targets
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM="/lib/udev/scsi_id --whitelisted --replace-whitespace /dev/$name", RESULT=="3600601607db11e0013ab5a8e371ce111",
NAME="isda"

Fehlerbehandlung

Module blacklisten

Es kann vorkommen, dass Udev Fehler macht und falsche Module lädt. Um das zu verhindern können die entsprechenden Module gebalcklistet werden. Dann wird Udev diese Module nicht mehr laden. Weder beim Booten noch im späteren Betrieb (z.B. einstecken eines USB-Sticks). Siehe: Blacklisting

Udev hängt beim Booten

Nach Umstellung auf LDAP oder aktualisieren eines LDAP Systems kann es vorkommen, dass Udev beim Booten bei der Meldung "Starting Udev Daeomn" hängen bleibt. Die Ursache dafür ist, dass Udev versucht einen Namen von LDAP zu beziehen, was aber fehlschlägt weil das Netzwerk noch nicht gestartet ist. Die Lösung ist sicherzustellen, dass alle System Gruppen Namen local vorhanden sind.

Gruppen Namen auf die in Udev Regeln zugegriffen wird und die aktuell im System vorhandenen anzeigen.

# fgrep -r GROUP /etc/udev/rules.d/ /lib/udev/rules.d | perl -nle '/GROUP\s*=\s*"(.*?)"/ && print $1;' | sort | uniq > udev_groups
# cut -f1 -d: /etc/gshadow /etc/group | sort | uniq > present_groups

Um die Unterschiede zu sehen hilft ein "side-by-side" diff:

# diff -y present_groups udev_groups
...
network						      <
nobody							      <
ntp							      <
optical							optical
power							      |	pcscd
rfkill							      <
root								root
scanner							scanner
smmsp							      <
storage							storage
...

In diesem Fall ist die Gruppe "pcscd" nicht im System vorhanden. Die fehlende Gruppe hinzufügen:

# groupadd pcscd

Außerdem muss sichergestellt werden, das lokale Quellen vorrang vor LDAP haben. /etc/nsswitch.conf sollte diese Zeile enthalten.

group: files ldap

Bekannte Hardwareprobleme

BusLogic Geräte verursachen ein Freeze beim Starten

Das ist ein Kernel Bug der noch nicht behoben wurde.

Einige Geräte werden nicht als Wechselbar behandelt, sollten aber

Eine Udev Regel erstellen in der UDISKS_SYSTEM_INTERNAL=0 gesetzt wird. Für mehr Informationen die udisks man-page lesen.

Bekannte Probleme mit automatischen Laden

CPU Frequenz Module

Die aktuelle Erkennung der verschiedenen CPU Frequenz Controller ist unzureichend. Deshalb wurde die funktionalität diese Module automatisch zu laden bis auf weiteres erst einmal entfernt. Die entsprechenden Module müssen in z.B. /etc/modules-load.d/meinemodule.conf explizit eingetragen werden.

Sound Probleme oder einige Module werden nicht automatisch geladen

Einige Nutzer konnten das Problem auf alte Einträge in /etc/modprobe.d/sound.conf zurückführen.

Hinweis: Seit Udev-171, werden die OSS Emulation Module (snd_seq_oss, snd_pcm_oss, snd_mixer_oss) standardmäßig nicht mehr automatisch geladen.


Bekannte Probleme bei eigenem Kernel

TODO

Weblinks