Udev: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
(9 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
{{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 | 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 | 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 | 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 48: | Zeile 49: | ||
* 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 | * 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; | ==== 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 ( | 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 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/ | 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 | ||
}} | }} | ||
=== 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 | 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 | 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 | ==== 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 | 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 | 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