Liste toutes les règles udev (par exemple pour un périphérique)?


10

Je veux savoir comment lister toutes les règles udev.

Je sais qu'ils peuvent être potentiellement stockés sous forme de lignes (une ligne = une règle) dans des *.rulesfichiers de ces répertoires

/etc/udev/rules.d
/lib/udev/rules.d
/run/udev/rules.d
/var/run/udev/rules.d

Par conséquent, je pense que je peux trouver toutes les règles en concaténant simplement tous les *.rulesfichiers dans ces répertoires. Cela ne semble pas fonctionner (car certaines règles sont exécutées et je ne trouve aucun logiciel comme règles dans ces répertoires).

Au mieux, je pensais qu'il y avait une commande à l'interface udevadm qui me permettrait d'imprimer toutes les règles que udev a actuellement.

Pour être certain, j'ai fait une revue man udevadmet surtout la partie sur udevadm info [parameters]ne semble pas donner de résultat.

Étant donné que udev permet une multitude de fichiers et de règles tous ciblés pour le même appareil, il est frustrant de ne pas connaître un moyen efficace / réalisable de composer toutes les règles d'un appareil.


4
Malheureusement, si vous utilisez systemd, sa version d'udev a un "schéma de nommage persistant" complexe qui est codé en dur dans udevd , donc vous avez raison, le simple fait d'analyser les rules.dchoses pourrait laisser beaucoup de mystères.
goldilocks

Réponses:


11

Si tu utilises:

udevadm monitor

vous obtenez une entrée pour chaque action entreprise par KERNEL et UDEV. Généralement, ajoutez, modifiez, supprimez. Si vous incluez l' --propertyoption:

udevadm monitor --property

Vous obtiendrez une liste des propriétés utilisées.


Comme on peut tester les règles udev avec udevadm:

udevadm test $(udevadm info -q path -n <device>)

on pourrait tester quelque chose comme ceci:

udevadm test $(udevadm info -q path -n <device>) 2>&1 | \
sed -n 's/.* \(\/[^ ]*\)\.rules:\([0-9]\+\)/\1.rules \2/p' | \
while read -r f n; do printf "%03d:%-50s " $n "$f"; sed -n ${n}p $f; done

mais je ne sais pas à quel point c'est fiable. Quoi qu'il en soit, utiliser par exemple video1pour <device>cela pourrait produire quelque chose comme:

031:/lib/udev/rules.d/50-udev-default.rules            SUBSYSTEM=="video4linux", GROUP="video"
007:/lib/udev/rules.d/60-persistent-v4l.rules          IMPORT{program}="v4l_id $devnode"
009:/lib/udev/rules.d/60-persistent-v4l.rules          SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id"
010:/lib/udev/rules.d/60-persistent-v4l.rules          KERNEL=="video*", ENV{ID_SERIAL}=="?*", SYMLINK+="v4l/by-id/$env{ID_BUS}-$env{ID_SERIAL}-video-index$attr{index}"
016:/lib/udev/rules.d/60-persistent-v4l.rules          IMPORT{builtin}="path_id"
017:/lib/udev/rules.d/60-persistent-v4l.rules          ENV{ID_PATH}=="?*", KERNEL=="video*|vbi*", SYMLINK+="v4l/by-path/$env{ID_PATH}-video-index$attr{index}"
015:/lib/udev/rules.d/73-seat-late.rules               TAG=="uaccess", ENV{MAJOR}!="", RUN{builtin}+="uaccess"
006:/etc/udev/rules.d/83-webcam.rules                  KERNEL=="video[0-9]", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0c45", SYMLINK+="video-webcam1"

Mais devinez que regarder le test dans son ensemble est mieux. Notez également le message:

Ce programme est destiné au débogage uniquement, il n'exécute aucun programme spécifié par une clé RUN. Il peut afficher des résultats incorrects, car certaines valeurs peuvent être différentes ou non disponibles lors d'une simulation.


Vous pouvez également définir

udev_log="debug"

dans udev.confet redémarrez udev ( reload udev) pour obtenir une sortie un peu plus détaillée.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.