==================================== Udev - Guide d'utilisation et Règles ==================================== udev est un gestionnaire dynamique de périphériques sous Linux. Il automatise la gestion des périphériques en exécutant des actions prédéfinies lors d'événements tels que l'ajout, la suppression ou le changement d'état d'un périphérique. Cela inclut la configuration des permissions, l'exécution de scripts personnalisés et la création de noms persistants pour les périphériques. Ce guide couvre : - Les commandes utiles pour identifier et gérer les périphériques. - La création et le test des règles udev. - Les meilleures pratiques pour configurer des périphériques utilisateur.. udev est un outil clé pour garantir une gestion cohérente et automatisée des périphériques dans un environnement Linux. .. contents:: :depth: 2 :local: :backlinks: top Commandes Utiles ---------------- Identifier un périphérique USB avec `lsusb` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ La commande `lsusb` affiche les périphériques USB connectés. Elle est utile pour identifier un périphérique par son identifiant `idVendor`, `idProduct`, et parfois son numéro de série (`Serial`) : .. code-block:: bash lsusb -v | grep -E 'idVendor|idProduct|Serial' Exemple de sortie : .. code-block:: text idVendor 0781 SanDisk Corp. idProduct 5583 Ultra USB 3.0 Serial 1234567890ABCDEF Pour localiser un périphérique à partir de cet identifiant, utilisez : .. code-block:: bash udevadm info --query=property --name=/dev/bus/usb/001/004 Cela fournit des informations détaillées sur le périphérique. Explications des options des règles Udev ----------------------------------------- Options des règles ~~~~~~~~~~~~~~~~~~ Voici les principales options utilisées dans les règles udev et leur signification : .. list-table:: Options des règles Udev :header-rows: 1 * - Option - Description * - `SUBSYSTEM==` - Spécifie le type de périphérique concerné (ex. `usb`, `block`, `net`). * - `ACTION==` - Définit l'action à laquelle la règle doit répondre (`add`, `remove`, `change`). * - `ATTR{}` - Attribut spécifique d'un périphérique (ex. `idVendor`, `idProduct`, `serial`). * - `ENV{}` - Variable d'environnement associée au périphérique. * - `RUN+=` - Exécute une commande ou un script. * - `SYMLINK+=` - Crée un lien symbolique vers le périphérique. * - `OWNER=` - Définit le propriétaire du fichier de périphérique. * - `GROUP=` - Définit le groupe du fichier de périphérique. * - `MODE=` - Définit les permissions du fichier de périphérique. Actions Udev ~~~~~~~~~~~~ Les actions courantes dans udev sont : .. list-table:: Actions prises en charge par Udev :header-rows: 1 * - Action - Description * - `add` - Déclenchée lorsque le périphérique est connecté. * - `remove` - Déclenchée lorsque le périphérique est retiré. * - `change` - Déclenchée lorsque le périphérique change d'état (ex. un volume monté). Explication des paramètres `%k` et autres ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Dans les règles udev, certaines variables dynamiques peuvent être utilisées : .. list-table:: Variables dynamiques :header-rows: 1 * - Variable - Description * - `%k` - Nom du périphérique du noyau (ex. `sda`, `ttyUSB0`). * - `%p` - Chemin physique du périphérique dans `/sys`. * - `%n` - Numéro du périphérique (ex. `1` pour `sda1`). * - `%b` - Nom du périphérique de base (ex. `sda` pour `sda1`). Créer des Règles Udev --------------------- Exemple 1 : Attribuer un nom statique à une clé USB ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Si une clé USB est connectée sous `/dev/sdb` mais change de nom à chaque démarrage, vous pouvez créer une règle udev pour lui attribuer un lien symbolique statique. 1. Identifiez les attributs de la clé USB : .. code-block:: bash udevadm info --attribute-walk --name=/dev/sdb Exemple d'attributs : .. code-block:: text KERNEL=="sdb" SUBSYSTEM=="block" ATTRS{idVendor}=="0781" ATTRS{idProduct}=="5583" ATTRS{serial}=="1234567890ABCDEF" 2. Créez la règle `/etc/udev/rules.d/85-usb-key.rules` : .. code-block:: text KERNEL=="sd[b-z]*", SUBSYSTEM=="block", ATTRS{idVendor}=="0781", ATTRS{idProduct}=="5583", ATTRS{serial}=="1234567890ABCDEF", SYMLINK+="usb-key" 3. Rechargez les règles et déconnectez/reconnectez la clé USB : .. code-block:: bash sudo udevadm control --reload-rules sudo udevadm trigger Exemple 2 : Exécuter un script lors de l'ajout ou du retrait d'un périphérique USB ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Pour exécuter un script lorsque certains événements (`add`, `remove`) se produisent sur un périphérique USB, suivez ces étapes : 1. Créez la règle `/etc/udev/rules.d/99-usb-scripts.rules` : .. code-block:: text ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0781", ATTR{idProduct}=="5583", ATTRS{serial}=="1234567890ABCDEF", RUN+="/path/to/script.sh add %k" ACTION=="remove", SUBSYSTEM=="usb", RUN+="/path/to/script.sh remove %k" 2. Créez le script `/path/to/script.sh` : .. code-block:: bash #!/bin/bash ACTION="$1" DEVNAME="$2" logger "Action udev détectée : $ACTION pour le périphérique $DEVNAME" 3. Rendez le script exécutable : .. code-block:: bash chmod +x /path/to/script.sh 4. Rechargez les règles : .. code-block:: bash sudo udevadm control --reload-rules sudo udevadm trigger Remarque importante : Gestion des événements `remove` ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Lors d'un événement `remove`, les attributs du périphérique (comme `idVendor`, `idProduct` ou `serial`) ne sont plus disponibles. Vous devez utiliser les informations disponibles avant la suppression ou les variables dynamiques comme `%k`. Débogage et Bonnes Pratiques ---------------------------- Logs pour udev ~~~~~~~~~~~~~~ Pour suivre les journaux udev, consultez `/var/log/syslog` ou `/var/log/messages` : .. code-block:: bash tail -f /var/log/syslog **Meta** -------------- Auteur : Cbillet Date : 26/11/2024