udev est le gestionnaire de périphériques du noyau Linux. Sa fonction principale est de gérer les périphériques et de les exposer dans le répertoire /dev
. udev fournit dynamiquement des nœuds seulement pour les périphériques réellement présents sur le système.
udev s’exécute en mode utilisateur et utilise un système évènementiel pour activer les règles liées aux périphériques.
Il prend, entre autres, en charge le montage des périphériques USB
.
Configuration de dev
La configuration de udev
se fait à travers de règles comme suit :
/etc/udev/rules.d/*.rules
: règles locales ajoutées par l’administrateur (Vous ?),/run/udev/rules.d/*.rules
: règles volatiles, généralement créées par d’autres règles,/lib/udev/rules.d/*.rules
: règles fourni par la distribution.
Pour voir l’ensemble des règles en tenant compte de l’ordre de prise en compte, vous pouvez utiliser la commande suivante :
( [ -d /etc/udev/rules.d/ ] && find /etc/udev/rules.d/*.rules ; [ -d /run/udev/rules.d/ ] && find /run/udev/rules.d/*.rules ; [ -d /lib/udev/rules.d/ ] && find /lib/udev/rules.d/*.rules ) | sort -k1.10
gPhoto² et udev
gPhoto² utilise ce mécanisme pour monter votre appareil photo. Pour trouver les règles existantes pour gPhoto² vous pouvez utiliser la commande :
( [ -d /etc/udev/rules.d/ ] && find /etc/udev/rules.d/*.rules ; [ -d /run/udev/rules.d/ ] && find /run/udev/rules.d/*.rules ; [ -d /lib/udev/rules.d/ ] && find /lib/udev/rules.d/*.rules ) | grep gphoto
ou mieux (on regarde à l’intérieur des fichiers plutôt que de ne regarder que le nom) :
while read -r F ; do
if grep --quiet gphoto2 "$F" ; then
echo "$F"
fi
done < <(
[ -d /etc/udev/rules.d/ ] && find /etc/udev/rules.d/*.rules
[ -d /run/udev/rules.d/ ] && find /run/udev/rules.d/*.rules
[ -d /lib/udev/rules.d/ ] && find /lib/udev/rules.d/*.rules
)
Cette dernière solution permet également de détecter des règles obsolètes ou des doublons, ce qui semble arriver, au moins, lorsqu’on installe successivement une version depuis le dépôt et une version depuis le code source. Voir le billet sur l’[installation de gPhoto²]((/post/2019/08/06.installation-gphoto2.html).
Nettoyer ces règles inutiles ne peut qu’accélérer votre système. Il ne faut cependant pas effacer n’importe quoi non plus…
Premier exemple
-
Exemple de doublons
Dans un cas :
while read -r F ; do grep --with-filename ' libgphoto2 ' "$F" ; done < <( [ -d /etc/udev/rules.d/ ] && find /etc/udev/rules.d/*.rules ; [ -d /run/udev/rules.d/ ] && find /run/udev/rules.d/*.rules ; [ -d /lib/udev/rules.d/ ] && find /lib/udev/rules.d/*.rules )
avait comme résultat :
/etc/udev/rules.d/90-libgphoto2.rules:# libgphoto2 2.5.23 all camlibs, gcc, ltdl, EXIF /lib/udev/rules.d/60-libgphoto2-6.rules:# libgphoto2 2.5.16 all camlibs, gcc, ltdl, EXIF
On comprend que l’installation faite à partir à générer le fichier
/lib/udev/rules.d/60-libgphoto2-6.rules
que n’a pas supprimé la procédure de désinstallation. Le fichier/etc/udev/rules.d/90-libgphoto2.rules
venant de la version installée depuis le code source de gPhoto².La correction, dans ce cas, se fait simplement à l’aide de :
sudo rm /lib/udev/rules.d/60-libgphoto2-6.rules
Seconde exemple
-
Autre exemple de doublons
Sur une installation de récente
while read -r F ; do if grep --quiet gphoto2 "$F" ; then echo "$F" fi done < <( [ -d /etc/udev/rules.d/ ] && find /etc/udev/rules.d/*.rules [ -d /run/udev/rules.d/ ] && find /run/udev/rules.d/*.rules [ -d /lib/udev/rules.d/ ] && find /lib/udev/rules.d/*.rules )
donnait
/etc/udev/rules.d/90-libgphoto2.rules /lib/udev/rules.d/60-libgphoto2-6.rules
En comparant le contenu des fichiers :
kdiff3 /etc/udev/rules.d/90-libgphoto2.rules /lib/udev/rules.d/60-libgphoto2-6.rules
il est possible de déduire assez simplement que
/lib/udev/rules.d/60-libgphoto2-6.rules
est une nouvelle version de/etc/udev/rules.d/90-libgphoto2.rules
avec quelques corrections et une ligne en plus…et là, on sait qu’il est possible de supprimer l’ancien fichier :
sudo rm /etc/udev/rules.d/90-libgphoto2.rules
Références
- Les autres billets sur gPhoto²,
- Tutorial on how to write basic udev rules in Linux [EN]
- Une introduction à udev
- udev sur wikipedia
ᦿ