Elencare tutte le regole udev (ad es. Per un dispositivo)?


10

Voglio sapere come posso elencare tutte le regole di udev.

So che in essi possono essere potenzialmente memorizzati come linee (una riga = una regola) nei *.rulesfile in queste directory

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

Pertanto, sebbene io possa trovare tutte le regole concedendo semplicemente tutti i *.rulesfile in quelle directory. Questo sembra non funzionare (perché vengono eseguite alcune regole che non riesco a trovare alcun software come regole in queste directory).

Nella migliore delle ipotesi, ho pensato che ci fosse un comando per l'interfaccia di udevadm che mi avrebbe permesso di stampare tutte le regole che udev attualmente ha.

A dire il vero, ho fatto una revisione man udevadme soprattutto la parte udevadm info [parameters]non sembra dare alcun risultato.

Dato che udev consente una moltitudine di file e regole tutti destinati allo stesso dispositivo, è frustrante non conoscere un modo efficiente / fattibile per comporre tutte le regole per un dispositivo.


4
Sfortunatamente, se stai usando systemd, la sua versione di udev ha un complesso "schema di denominazione persistente" che è codificato in udevd , quindi hai ragione, analizzare il rules.dmateriale potrebbe lasciare molti misteri.
Riccioli d'oro,

Risposte:


11

Se usi:

udevadm monitor

ricevi una voce per ogni azione intrapresa da KERNEL e UDEV. In genere aggiungi, modifica, rimuovi. Se includi l' --propertyopzione:

udevadm monitor --property

Otterrai un elenco di quali proprietà vengono utilizzate.


Come si possono testare le regole udev con udevadm:

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

si potrebbe provare qualcosa come questo:

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

ma non sono sicuro di quanto sia affidabile. Ad ogni modo, usare eg video1per <device>questo potrebbe produrre qualcosa di simile a:

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"

Ma indovinare guardando il test nel suo insieme è meglio. Nota anche il messaggio:

Questo programma è solo per il debug, non esegue alcun programma specificato da una chiave RUN. Potrebbe mostrare risultati errati, poiché alcuni valori potrebbero essere diversi o non disponibili in una corsa di simulazione.


Puoi anche impostare

udev_log="debug"

in udev.confe udev riavvio ( reload udev) per ottenere un po 'più dettagliato di uscita.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.