11.6. Création de liens symboliques personnalisés vers les appareils

11.6.1. Liens symboliques pour les CD-ROM

Certains logiciels que vous voudriez installer plus tard (par exemple divers lecteurs multimédia) s'attendent à ce que les liens /dev/cdrom et /dev/dvd existent. Aussi, il peut être intéressant d'ajouter des références à ces liens dans /etc/fstab. Pour chaqun de vos lecteurs CD-ROM, trouvez le répertoire correspondant dans /sys (par exemple cela peut être /sys/block/hdd) et lancez la commande suivante :

udevadm test /sys/block/hdd

Regardez les lignes contenant la sortie de divers programmes *_id.

Il y a deux approches pour créer les liens symboliques. La première est d'utiliser le nom du modèle et numéro de série, la deuxième est basée sur l'emplacement du périphérique sur le bus. Si vous allez utiliser la première approche, créez un fichier similaire à ce qui suit :

cat >/etc/udev/rules.d/82-cdrom.rules << EOF

# Custom CD-ROM symlinks
SUBSYSTEM=="block", ENV{ID_MODEL}=="SAMSUNG_CD-ROM_SC-148F", \
    ENV{ID_REVISION}=="PS05", SYMLINK+="cdrom"
SUBSYSTEM=="block", ENV{ID_MODEL}=="PHILIPS_CDD5301", \
    ENV{ID_SERIAL}=="5VO1306DM00190", SYMLINK+="cdrom1 dvd"

EOF
[Note]

Note

Bien que les exemples du livre fonctionnent correctement, soyez avertit que Udev ne reconnait pas l'anti-slash comme caractère pour continuer une ligne. Si vous modifiez les règles Udev avec un éditeur, assurez-vous de laisser chaque règle sur une seule ligne physique.

De cette manière, les liens symboliques resteront corrects même si vous déplacez les périphériques à des positions différentes sur le bus IDE, mais le lien symbolique /dev/cdrom ne sera pas remplace si le vieux lecteur est remplacé par un nouveau.

La clef SUBSYSTEM=="block" est requise pour éviter de correspondre aux périphériques SCSI génériques. Sans cela, dans le cas des lecteurs CD-ROM SCSI, les liens symboliques pointeront parfois vers /dev/srX (correct) et parfois vers /dev/sgX, ce qui est incorrect.

La seconde approche fonctionne ainsi :

cat >/etc/udev/rules.d/82-cdrom.rules << EOF

# Custom CD-ROM symlinks
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", \
    ENV{ID_PATH}=="pci-0000:00:07.1-ide-0:1", SYMLINK+="cdrom"
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", \
    ENV{ID_PATH}=="pci-0000:00:07.1-ide-1:1", SYMLINK+="cdrom1 dvd"

EOF

De cette manière, les liens symboliques resteront correctes même si vous remplacez les périphériques avec d'autres modèles, mais que vous gardez la position sur le bus IDE. La clef ENV{ID_TYPE}=="cd" s'assure que le lien symbolique disparraisse après que vous mettez autre chose qu'un lecteur CD-ROM à cette position sur le bus.

Bien sûr il est possible de mélanger les deux approches.

11.6.2. Gérer les périphériques multiples

Comme expliqué dans Section 11.5, « Manipulation des périphériques et modules », l'ordre dans lequel les périphériques avec les mêmes fonctions apparaissent dans /dev est surtout aléatoire. Par exemple si vous avez un webcam USB et un tuner TV, parfois /dev/video0 sera la caméra et /dev/video1 le tunner, et parfois après un redémarrage l'ordre est inversé. Pour toutes les classes de matériels sauf les cartes sons et les les cartes réseau, cela est correctible en créant des règles udev pour des liens persistants. Le cas des cartes réseau est couvert séparément dans Networking Configuration et la configuration des cartes sons peut être trouvée dans CBLFS.

Pour chaque périphérique qui pourrait avoir ce problème, (même si le problème n'existe pas dans votre distribution Linux actuelle), trouvez le répertoire correspondant dans /sys/class ou /sys/block. Pour les périphériques vidéo, cela peut être /sys/class/video4linux/videoX. Toruvez les attributs qui identifient ces périphériques uniquement (typiquement, les ID du fabriquant et du produit ou le numéro de série) :

udevadm info -a -p /sys/class/video4linux/video0

Ensuite écrivez des règles qui créent les liens symboliques, par exemple :

cat >/etc/udev/rules.d/83-duplicate_devs.rules << EOF

# Persistent symlinks for webcam and tuner
KERNEL=="video*", SYSFS{idProduct}=="1910", SYSFS{idVendor}=="0d81", \
    SYMLINK+="webcam"
KERNEL=="video*", SYSFS{device}=="0x036f", SYSFS{vendor}=="0x109e", \
    SYMLINK+="tvtuner"

EOF

Le résultat est que /dev/video0 et /dev/video1 réfèrent toujours soit au tuner soit à la webcam de manière aléatoire (et donc ne devraient pas être utilisés directement), mais les liens symboliques /dev/tvtuner et /dev/webcam pointent toujours vers le bon périphérique.