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.

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) :

lsusb -v | grep -E 'idVendor|idProduct|Serial'

Exemple de sortie :

idVendor           0781  SanDisk Corp.
idProduct          5583  Ultra USB 3.0
Serial            1234567890ABCDEF

Pour localiser un périphérique à partir de cet identifiant, utilisez :

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 :

Options des règles Udev

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 :

Actions prises en charge par Udev

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 :

Variables dynamiques

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 :

udevadm info --attribute-walk --name=/dev/sdb

Exemple d’attributs :

KERNEL=="sdb"
SUBSYSTEM=="block"
ATTRS{idVendor}=="0781"
ATTRS{idProduct}=="5583"
ATTRS{serial}=="1234567890ABCDEF"
  1. Créez la règle /etc/udev/rules.d/85-usb-key.rules :

KERNEL=="sd[b-z]*", SUBSYSTEM=="block", ATTRS{idVendor}=="0781", ATTRS{idProduct}=="5583", ATTRS{serial}=="1234567890ABCDEF", SYMLINK+="usb-key"
  1. Rechargez les règles et déconnectez/reconnectez la clé USB :

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 :

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"
  1. Créez le script /path/to/script.sh :

#!/bin/bash
ACTION="$1"
DEVNAME="$2"
logger "Action udev détectée : $ACTION pour le périphérique $DEVNAME"
  1. Rendez le script exécutable :

chmod +x /path/to/script.sh
  1. Rechargez les règles :

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 :

tail -f /var/log/syslog

Meta

Auteur : Cbillet Date : 26/11/2024