Menu Fermer

Comment créer les règles udev (rules)

udev est le gestionnaire de périphériques de Linux.
Il a pour rôle de détecter et installer les nouveaux périphériques.
L’utilisateur peut interagir avec ce dernier avec des règles udev (rules).
Par exemple :

  • changer ou figer le nom assigné par défaut à un périphérique
  • attribuer des permissions et autorisations sur l’utilisation d’un périphérique
  • exécuter un script lors de la connexion ou déconnexion d’un périphérique

Ce tutoriel vous explique le fonctionnement des règles udev et comment créer des règles udev.

Comment créer les règles udev (rules)

Le fonctionnement des règles udev

Les règles udev permettent de définir et modifier le comportement du service lors de la détection d’un nouveau périphérique.

Les règles Udev sont définies dans des fichiers avec l’extension .rules.
Ces fichiers peuvent être placés à deux emplacements principaux:

  • /usr/lib/udev/rules.d c’est le répertoire utilisé pour les règles installées par le système
  • /etc/udev/rules.d/ est réservé aux règles personnalisées

Les fichiers dans lesquels les règles sont définies sont classiquement nommés avec un numéro comme préfixe.
Par exemple 50-udev-default.rules.
Ils sont traités dans l’ordre lexical indépendamment du répertoire dans lequel ils se trouvent.

A lire :

Créer et comprendre les règles udev

Voici un exemple de règle udev sur un serveur OVH se trouvant dans /etc/udev/rules.d/70-persistent-net.rules

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="3c:ec:ef:40:d6:d1", NAME="eno1"

C’est une règle réseau qui vise à ajouter une interface en01 pour l’interface réseau avec l’adresse MAC 3c:ec:ef:40:d6:d1.

Elles se composent de :

  • Valeurs : sont entre “, donc ici net, add, ?*, eno1
  • Clé : USBSYSTEM, ACTION, DRIVERS, ATTR{address}
  • Opérateurs : ==, =, !=

Chaque ligne du fichier de règles contient au moins une paire clé-valeur.
Si toutes les clés de correspondance correspondent à leurs valeurs, la règle est appliquée et les clés d’affectation reçoivent les valeurs spécifiées attribuées.

Les opérateurs

Les règles fonctionnent avec des opérateurs ==, !=, etc.
Pour que la règle soit appliquée, les clés définies doivent correspondre ou ne pas correspondre à la valeur définie respectivement.

OpérateursDescription
==Comparer pour l’égalité
!=Comparer pour l’inégalité
=Attribuer une valeur à une clé. Les clés qui représentent une liste sont réinitialisées et seule cette valeur unique est affectée.
-=Supprimer la valeur d’une clé contenant une liste d’entrées.
:=Attribuer enfin une valeur à une clé; interdire toute modification ultérieure.
Les opérateurs des règles udev

Les valeurs

Les valeurs sont écrites sous forme de chaînes entre guillemets, telles que (“chaîne”).
Si vous devez spécifier une valeur contenant un “, il faut l’échapper avec \.

Les clés

Voici les règles que l’on peut utiliser sur les périphériques.

CléDescription
ACTIONFaites correspondre le nom de l’action d’événement.
DEVPATHFaites correspondre le nom de l’action d’événement. DEVPATH
KERNELFaites correspondre le chemin de développement du périphérique d’événement. NOYAU
NAMEFaites correspondre le nom du périphérique événementiel. NOM
SYMLINKFaites correspondre le nom d’une interface réseau ou périphérique. Il peut être utilisé une fois que la clé NAME a été définie dans l’une des règles précédentes.
SUBSYSTEMCorrespond au nom d’un lien symbolique ciblant le nœud. Il peut être utilisé une fois qu’une clé SYMLINK a été définie dans l’une des règles précédentes. Il peut y avoir plusieurs liens symboliques; un seul doit correspondre.
DRIVERFaites correspondre le sous-système du périphérique événementiel.
ATTR{filename}Faites correspondre le nom du pilote du périphérique événementiel. Définissez cette clé uniquement pour les périphériques liés à un pilote au moment de la génération de l’événement.
SYSCTL{kernel parameter}Faites correspondre les valeurs d’attribut sysfs du périphérique d’événement. Les espaces de fin dans les valeurs d’attribut sont ignorés sauf si la valeur de correspondance spécifiée elle-même contient des espaces de fin.
KERNELSCorrespond à une valeur de paramètre de noyau
SUBSYSTEMSRecherchez le chemin de développement vers le haut pour un nom d’appareil correspondant.
DRIVERSRecherchez le chemin de développement vers le haut pour un nom de sous-système de périphérique correspondant.
ATTRS{filename}Recherchez le chemin de développement vers le haut pour un nom de pilote de périphérique correspondant.
TAGSRecherchez le chemin de développement vers le haut pour un périphérique avec des valeurs d’attribut sysfs correspondantes. Si plusieurs correspondances ATTRS sont spécifiées, elles doivent toutes correspondre sur le même périphérique. Les espaces de fin dans les valeurs d’attribut sont ignorés sauf si la valeur de correspondance spécifiée elle-même contient des espaces de fin.
ENV{key}Recherchez le chemin de développement vers le haut pour un périphérique avec la balise correspondante.
CONST{key}Correspondance avec une valeur de propriété de périphérique.
TEST{octal mode mask}Correspondance avec une balise d’appareil.
PROGRAMTestez l’existence d’un fichier. Un masque de mode octal peut être spécifié si nécessaire.
RESULTExécutez un programme pour déterminer s’il existe une correspondance; la clé est vraie si le programme revient avec succès. Les propriétés de l’appareil sont mises à la disposition du programme exécuté dans l’environnement
Les clés pour les périphériques

udevadm : gérer ses règles udev

udevadm est l’utilitaire qui permet de gérer les règles udev.
Par exemple pour tester et débugueur une règle udev, on peut utiliser l’option test.

udevadm test --action="add" /devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2/2-1.2:1.1/0003:046D:C52F.0010/input/input39

Pour forcer la relecture des règles udev après une modification ou ajout :

udevadm control --reload-rules

Exemples de règles udev

Enfin cette règle udev fixe la persistance des disques /dev/sda* en /dev/disk/by_id/I_BUS-ID_SERIAL

KERNEL=="sd*[0-9]|dasd*[0-9]", ENV{ID_SERIAL}=="?*", \
        SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n"

Cette règle udev fait correspondre /dev/sdb en /dev/mon_super_disque

KERNEL == "sdb", NAME = "mon_super_disque"

La règle suivant créé un /dev/cdrom à partir de /dev/hdc

KERNEL=="hdc", SYMLINK+="cdrom cdrom0"

Fixer la persistance d’un disque dur externe USB ou une clé USB selon son numéro ou la marque.

SUBSYSTEMS=="usb", ATTRS{serial}=="00000000000116", NAME="cle_1Go", Mode=="0777"
SUBSYSTEMS=="usb", ATTRS{manufacturer}=="Sony", ATTRS{product}=="Sony Handycam", NAME="camescope", Mode=="0777"
SUBSYSTEMS=="usb", ATTRS{product}=="USB TO IDE", NAME="hd-externe", Mode=="0777"

Liens