Alle udev-Regeln auflisten (zB für ein Gerät)?

10

Ich möchte wissen, wie ich alle udev-Regeln auflisten kann.

Ich weiß, dass sie möglicherweise als Zeilen (eine Zeile = eine Regel) in *.rulesDateien in diesen Verzeichnissen gespeichert werden können

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

Daher kann ich alle Regeln finden, indem ich einfach alle *.rulesDateien in diesen Verzeichnissen zusammenstelle. Dies scheint nicht zu funktionieren (da einige Regeln ausgeführt werden, die ich in diesen Verzeichnissen nicht als Regeln finden kann).

Bestenfalls dachte ich, dass es einen Befehl für die udevadm-Schnittstelle gibt, mit dem ich alle Regeln ausdrucken kann, die udev derzeit hat.

Um sicher zu sein, dass ich eine Überprüfung durchgeführt habe man udevadmund insbesondere der Teil über udevadm info [parameters]scheint kein Ergebnis zu liefern.

Angesichts der Tatsache, dass udev eine Vielzahl von Dateien und Regeln zulässt, die alle für dasselbe Gerät bestimmt sind, ist es frustrierend, keine effiziente / praktikable Methode zum Erstellen aller Regeln für ein Gerät zu kennen.

Menschlichkeit UND Frieden
quelle
4
Wenn Sie systemd verwenden, hat die Version von udev leider ein komplexes "beständiges Namensschema", das fest in udevd codiert ist. Sie haben also Recht, nur das Parsen des rules.dMaterials könnte viele Rätsel hinterlassen.
Goldlöckchen

Antworten:

10

Wenn du benutzt:

udevadm monitor

Sie erhalten einen Eintrag für jede Aktion von KERNEL und UDEV. In der Regel hinzufügen, ändern, entfernen. Wenn Sie die --propertyOption einschließen :

udevadm monitor --property

Sie erhalten eine Liste der verwendeten Eigenschaften.


Wie man udev Regeln mit udevadm testen kann:

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

man könnte so etwas testen:

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

aber nicht sicher, wie zuverlässig das ist. Jedenfalls könnte die Verwendung von zB video1dafür <device>etwas ergeben wie:

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"

Aber raten Sie mal, den Test als Ganzes zu betrachten, ist besser. Beachten Sie auch die Nachricht:

Dieses Programm dient nur zum Debuggen und führt kein durch einen RUN-Schlüssel angegebenes Programm aus. Möglicherweise werden falsche Ergebnisse angezeigt, da einige Werte möglicherweise unterschiedlich sind oder bei einem Simulationslauf nicht verfügbar sind.


Sie können auch einstellen

udev_log="debug"

in udev.confund starten Sie udev ( reload udev) neu, um eine etwas ausführlichere Ausgabe zu erhalten.

Runium
quelle