{{tag>sysadmin linux udev périphériques devices}}
====== udev ======
Les fichiers de règles se trouvent dans le répertoire **/etc/udev/rules.d**, le nom du fichier est suffixé par **.rules**. Les règles sont évaluées fichier par fichier par ordre alphabetique. Pour forcer l’évaluation de certaines règles en priorité on utilise des numéro en préfixe dans les nom de fichiers. Par convention les règlés personnalisées sont dans /etc/udev/rules.d/XX-local.rules ou XX correspond a un nombre de l'intervalle [0-99].
* Pour commenter, commencer la ligne avec le caractère **#**.
* Une règle sur une ligne: pas de retour chariot au milieu de la définition d'une règle.
* La règle contient une ou plusieurs clefs de correspondances et une ou plusieurs clefs d'affectation séparées par des virgules.
Ci dessous un exemple de règle
# Le retrait d'un périphérique particulier du système hôte provoque l’exécution d'un script
ACTION=="remove", ENV{ID_MODEL}=="TS2GJF110", ENV{ID_FS_UUID}=="6CE8-0F2C", RUN+="/usr/local/bin/test_remove.sh"
===== Rechercher les attributs d'un node =====
Certains attributs exportés par les pilotes dans sysfs. La commande **udevadmn** permet de lister ces attributs existants pour le périphérique. Rechercher d'abord le périphérique dans /sys:
$ find /sys -name sdb
Une fois le chemin identifié, le chemin est passé en argument à l'option **-p** de la commande **udevadmn** pour afficher l'ensemble des attributs liés au périphérique:
$ sudo udevadmn info -a -p /sys/block/sdb
Les attributs listés par la commande ci-dessus pourront être utilisés comme clefs de correspondance lors de la création de règles personnalisées.
# création d'un lien symbolique pour le node sdb
ATTRS{idVendor}=="0bda" ATTRS{idProduct}=="0158", SYMLINK+="card_reader"
On peut également utiliser directement l'option **-n** et le chemin du fichier node en argument
$ udevadm info -a -n /dev/sdb
===== Options =====
L'option **last_rule** empêche l'application des règles suivantes sur le périphérique.
KERNEL=="sda", GROUP="disk", OPTIONS+="last_rule"
===== Droits d'accès =====
udev permet de définir pour le fichier node associé au périphérique le propriétaire et les droits d’accès
===== Prise en compte des modifications =====
udev ne remonte pas automatiquement le périphérique mais se charge d'appliquer les règles lorsqu'il est détecté. C'est le noyau qui détecte les périphérique et appelle udev. Si le noyau supporte inotify, il surveille les fichiers de règles et prends en compte automatiquement les modifications apportées.
* Si la règle concerne un périphérique déjà branché, débrancher/rebrancher le périphérique pour provoquer la détection du matériel par le noyau et l'appel de udev pour l'application de la nouvelle règle.
* Si le périphérique ne peut pas être débranché facilement exécuter **udevtrigger**
$ sudo udevtrigger
===== Tester les règles =====
**udevadm** ou **udevtest** permettent de tester les nouvelles règles:
$ udevadm test -p /sys/block/sdb
Pour afficher l'environnement et les événements dans la console:
sudo udevadm monitor --environment --udev
===== Références =====
* https://doc.ubuntu-fr.org/udev
* http://reactivated.net/writing_udev_rules.html
* http://www.linuxquestions.org/questions/linux-desktop-74/udev-not-doing-remove-rules-841733/