Daftar semua aturan udev (misalnya untuk perangkat)?

10

Saya ingin tahu bagaimana saya bisa mendaftar semua aturan udev.

Saya tahu bahwa di dalamnya dapat berpotensi disimpan sebagai baris (satu baris = satu aturan) dalam *.rulesfile di direktori ini

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

Oleh karena itu saya pikir saya dapat menemukan semua aturan dengan sederhana menggabungkan semua *.rulesfile di direktori tersebut. Ini tampaknya tidak berfungsi (karena beberapa aturan dijalankan yang saya tidak dapat menemukan perangkat lunak sebagai aturan dalam direktori ini).

Paling-paling saya pikir ada perintah untuk antarmuka udevadm yang akan membiarkan saya mencetak semua aturan yang saat ini udev miliki.

Yang pasti saya melakukan review man udevadmdan terutama bagian tentang udevadm info [parameters]sepertinya tidak membuahkan hasil.

Mengingat bahwa udev memungkinkan banyak file dan aturan yang semuanya ditargetkan untuk perangkat yang sama, sangat frustasi untuk tidak mengetahui cara yang efisien / layak untuk menyusun semua aturan untuk perangkat.

humanityANDpeace
sumber
4
Sayangnya, jika Anda menggunakan systemd, itu versi udev memiliki "skema penamaan persisten" yang kompleks yang sulit dikodekan ke dalam udevd , jadi Anda benar, hanya menguraikan rules.dhal - hal itu bisa meninggalkan banyak misteri.
goldilocks

Jawaban:

11

Jika Anda menggunakan:

udevadm monitor

Anda mendapatkan entri untuk setiap tindakan yang dilakukan oleh KERNEL dan UDEV. Biasanya menambah, mengubah, menghapus. Jika Anda menyertakan --propertyopsi:

udevadm monitor --property

Anda akan mendapatkan daftar properti apa yang digunakan.


Karena seseorang dapat menguji aturan udev dengan udevadm:

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

seseorang dapat menguji sesuatu seperti ini:

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

tapi tidak yakin seberapa andal ini. Bagaimanapun, menggunakan mis video1untuk <device>itu dapat menghasilkan sesuatu seperti:

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"

Tapi coba tebak melihat tes secara keseluruhan lebih baik. Perhatikan juga pesannya:

Program ini hanya untuk debugging, tidak menjalankan program apa pun yang ditentukan oleh kunci RUN. Ini mungkin menunjukkan hasil yang salah, karena beberapa nilai mungkin berbeda, atau tidak tersedia pada simulasi.


Anda juga bisa mengatur

udev_log="debug"

in udev.confdan restart udev ( reload udev) untuk mendapatkan output yang agak lebih verbose.

Runium
sumber