Tutorial mengenai cara menulis peraturan udev asas di linux
- 1728
- 448
- Ronnie Hermann
Objektif
Memahami konsep asas di belakang Udev, dan belajar bagaimana menulis peraturan mudah
Keperluan
- Keizinan akar
Kesukaran
Medium
Konvensyen
- # - Memerlukan arahan Linux yang diberikan dengan keistimewaan akar sama ada
secara langsung sebagai pengguna akar atau dengan menggunakansudo
perintah - $ - Memerlukan arahan Linux yang diberikan sebagai pengguna yang tidak layak
Pengenalan
Dalam sistem GNU/Linux, sementara peranti sokongan tahap rendah dikendalikan di peringkat kernel, pengurusan peristiwa yang berkaitan dengan mereka diuruskan di ruang pengguna oleh udev
, dan lebih tepatnya oleh udevd
Daemon. Belajar Cara Menulis Peraturan yang Akan Digunakan pada Peristiwa -peristiwa yang berlaku boleh menjadi sangat berguna untuk mengubah suai tingkah laku sistem dan menyesuaikannya dengan keperluan kita.
Bagaimana peraturan diatur
Peraturan udev ditakrifkan ke dalam fail dengan .peraturan
sambungan. Terdapat dua lokasi utama di mana fail tersebut boleh diletakkan: /usr/lib/udev/peraturan.d
Ini direktori yang digunakan untuk peraturan yang dipasang sistem, /etc/udev/peraturan.d/
dikhaskan untuk peraturan yang dibuat khas.
Fail di mana peraturan ditakrifkan secara konvensional dinamakan dengan nombor sebagai awalan (e.g 50-udev-default.peraturan
) dan diproses dalam urutan leksikal secara bebas dari direktori yang mereka ada. Fail dipasang di /etc/udev/peraturan.d
, Walau bagaimanapun, mengatasi mereka dengan nama yang sama dipasang di laluan lalai sistem.
Peraturan sintaks
Sintaks peraturan udev tidak begitu rumit setelah anda memahami logik di belakangnya. Peraturan disusun oleh dua bahagian utama: bahagian "perlawanan", di mana kita menentukan syarat -syarat peraturan yang akan digunakan, menggunakan satu siri kunci yang dipisahkan oleh koma, dan bahagian "tindakan", di mana kita melakukan beberapa jenis tindakan, apabila keadaan dipenuhi.
Kes ujian
Apa cara yang lebih baik untuk menerangkan pilihan yang mungkin daripada mengkonfigurasi peraturan sebenar? Sebagai contoh, kita akan menentukan peraturan untuk melumpuhkan pad sentuh apabila tetikus disambungkan. Jelas atribut yang disediakan dalam definisi peraturan, akan mencerminkan perkakasan saya.
Kami akan menulis peraturan kami di /etc/udev/peraturan.d/99-togglemouse.peraturan
Fail dengan bantuan editor teks kegemaran kami. Definisi peraturan boleh merangkumi pelbagai baris, tetapi jika itu berlaku, backslash mesti digunakan sebelum watak baru, sebagai kesinambungan garis, sama seperti dalam skrip shell. Inilah peraturan kami:
Tindakan == "tambah" \, attrs idproduct == "c52f" \, attrs idvendor == "046d" \, env paparan = ": 0" \, env xauthority = "/Run/ Pengguna/1000/gdm/xauthority "\, run+="/usr/bin/xinput --disable 16 "
Mari analisisnya.
Pengendali
Pertama sekali, penjelasan mengenai pengendali yang digunakan dan mungkin:
== dan != pengendali
The ==
adalah pengendali kesamaan dan !=
adalah pengendali ketidaksamaan. Dengan menggunakannya, kami menegaskan bahawa untuk peraturan yang akan digunakan, kunci yang ditentukan mesti sepadan, atau tidak sepadan dengan nilai yang ditentukan masing -masing.
Pengendali tugasan: = dan: =
The =
Pengendali tugasan, digunakan untuk memberikan nilai kepada kunci yang menerima satu. Kami menggunakan : =
Pengendali, sebaliknya, apabila kita ingin memberikan nilai dan kami ingin memastikan bahawa ia tidak ditindih oleh peraturan lain: nilai yang diberikan dengan pengendali ini, secara fakta, tidak dapat diubah.
+= Dan -= operator
The +=
dan -=
pengendali digunakan masing -masing untuk menambah atau mengeluarkan nilai dari senarai nilai yang ditakrifkan untuk kunci tertentu.
Kunci yang kami gunakan
Mari kita menganalisis kunci yang kita gunakan dalam peraturan. Pertama sekali kita mempunyai TINDAKAN
Kunci: Dengan menggunakannya, kami menyatakan bahawa peraturan kami akan digunakan apabila peristiwa tertentu berlaku untuk peranti. Nilai yang sah adalah Tambah
, Keluarkan
dan ubah
Kami kemudian menggunakan Attrs
kata kunci untuk menentukan atribut yang dipadankan. Kami boleh menyenaraikan atribut peranti dengan menggunakan Maklumat Udevadm
perintah, memberikan namanya atau SYSFS
jalan:
IDEVADM INFO -AP/Peranti/PCI0000: 00/0000: 00: 1D.0/USB2/2-1/2-1.2/2-1.2: 1.1/0003: 046D: C52F.0010/input/input39 UDEVADM Maklumat bermula dengan peranti yang ditentukan oleh DevPath dan kemudian berjalan di rantai peranti induk. Ia dicetak untuk setiap peranti yang dijumpai, semua sifat yang mungkin dalam format kunci peraturan UDEV. Peraturan yang sepadan, boleh disusun oleh atribut peranti dan atribut dari satu peranti induk tunggal. Melihat peranti '/Peranti/PCI0000: 00/0000: 00: 1D.0/USB2/2-1/2-1.2/2-1.2: 1.1/0003: 046D: C52F.0010/input/input39 ': kernel == "input39" subsystem == "input" pemacu == "" attr name == "Logitech USB Receiver" attr Phys == "USB-0000: 00: 1d.0-1.2/input1 "attr properties ==" 0 "attr uniq ==" "Melihat peranti induk '/peranti/PCI0000: 00/0000: 00: 1d.0/USB2/2-1/2-1.2/2-1.2: 1.1/0003: 046D: C52F.0010 ': kernels == "0003: 046D: C52F.0010 "Subsystems ==" HID "Pemandu ==" HID-Generic "Attrs Country ==" 00 "Melihat peranti induk '/Peranti/PCI0000: 00/0000: 00: 1d.0/USB2/2-1/2-1.2/2-1.2: 1.1 ': kernel == "2-1.2: 1.1 "Subsystems ==" USB "pemacu ==" usbhid "attrs diberi kuasa ==" 1 "attrs balternatesetting ==" 0 "attrs binterfaceclass ==" 03 "attrs Binterfacenumber Attrs binterfaceProtocol == "00" attrs Binterfacesubclass == "00" attrs bnumendpoints == "01" attrs supports_autosuspend == "1" 00: 1d.0/USB2/2-1/2-1.2 ': Kernels == "2-1.2 "subsystems ==" usb "drivers ==" usb "attrs promorized ==" 1 "attrs Evole_reset_quirk ==" 0 "attrs bconfigurationvalue ==" 1 " Attrs bdeviceProtocol == "00" attrs bdevicesubclass == "00" attrs bmaxpacketSize0 == "8" attrs bmaxpower = "2" attrs bcddevice == "3000" attrs bmattributes == "a0" attrs busnum == "2" attrs configuration == "rqr30.00_b0009 "attrs devnum ==" 12 "attrs devpath ==" 1.2 "attrs idproduct ==" c52f "attrs idvendor ==" 046d "attrs ltm_capable ==" no "attrs pengeluar ==" logitech "attrs maxchild ==" 0 " == "penerima usb" attrs queirks == "0x0" attrs boleh ditanggalkan == "boleh ditanggalkan" attrs speed == "12" attrs urbnum == "1401" attrs versi == " 2.00 "[...]
Di atas adalah output dipenggal yang diterima setelah menjalankan arahan. Seperti yang anda dapat membacanya dari output itu sendiri, udevadm
bermula dengan laluan yang ditentukan yang kami berikan, dan memberi kami maklumat mengenai semua peranti induk. Perhatikan bahawa atribut peranti dilaporkan dalam bentuk tunggal (e.g Kernel
), sementara ibu bapa dalam bentuk jamak (e.g Biji
). Maklumat induk boleh menjadi sebahagian daripada peraturan tetapi hanya salah satu daripada ibu bapa yang boleh dirujuk pada satu masa: mencampurkan sifat -sifat peranti induk yang berbeza tidak akan berfungsi. Dalam peraturan yang kami tentukan di atas, kami menggunakan sifat -sifat satu peranti induk: Idproduct
dan Idvendor
.
Perkara seterusnya yang telah kami lakukan dalam peraturan kami, adalah menggunakan Env
Kata kunci: Ia boleh digunakan untuk menetapkan atau cuba memadankan pembolehubah persekitaran. Kami memberikan nilai kepada Paparan
dan Xauthority
yang ada. Pembolehubah tersebut adalah penting apabila berinteraksi dengan pelayan x secara pemrograman, untuk menyediakan beberapa maklumat yang diperlukan: dengan Paparan
pemboleh ubah, kami menentukan mesin apa yang dijalankan oleh pelayan, paparan apa dan skrin apa yang kami rujuk, dan dengan Xauthority
Kami menyediakan laluan ke fail yang mengandungi maklumat pengesahan dan kebenaran XORG. Fail ini biasanya terletak di direktori pengguna "rumah".
Akhirnya kami menggunakan Jalankan
Kata kunci: ini digunakan untuk menjalankan program luaran. Sangat penting: ini tidak dilaksanakan dengan segera, tetapi pelbagai tindakan dilaksanakan sebaik sahaja semua peraturan telah dihuraikan. Dalam kes ini kita menggunakan Xinput
utiliti untuk menukar status pad sentuh. Saya tidak akan menerangkan sintaks Xinput di sini, ia akan keluar dari konteks, hanya perhatikan bahawa 16
adalah id pad sentuh.
Setelah peraturan kami ditetapkan, kami dapat menyahpepijatnya dengan menggunakan Ujian Udevadm
perintah. Ini berguna untuk debugging tetapi ia tidak benar -benar menjalankan arahan yang ditentukan menggunakan Jalankan
Kunci:
$ udevadm test --ction = "tambah"/peranti/pci0000: 00/0000: 00: 1d.0/USB2/2-1/2-1.2/2-1.2: 1.1/0003: 046D: C52F.0010/input/input39
Apa yang kami berikan kepada arahan adalah tindakan untuk mensimulasikan, menggunakan --tindakan
pilihan, dan laluan sysfs peranti. Sekiranya tiada kesilapan dilaporkan, peraturan kami harus baik untuk pergi. Untuk menjalankannya di dunia nyata, kita mesti memuatkan semula peraturan:
# udevadm control -reload
Perintah ini akan memuatkan semula fail peraturan, bagaimanapun, akan berkuat kuasa hanya pada peristiwa yang dijana baru.
Kami telah melihat konsep asas dan logik yang digunakan untuk membuat peraturan UDEV, namun kami hanya menggaruk permukaan banyak pilihan dan tetapan yang mungkin. Manpage Udev memberikan senarai lengkap: sila rujuknya untuk pengetahuan yang lebih mendalam.
Tutorial Linux Berkaitan:
- Perkara yang hendak dipasang di Ubuntu 20.04
- Cara Mengendalikan Acara ACPI di Linux
- Perkara yang perlu dilakukan setelah memasang ubuntu 20.04 Focal Fossa Linux
- Pengenalan kepada Automasi, Alat dan Teknik Linux
- Muat turun linux
- Fail Konfigurasi Linux: 30 teratas yang paling penting
- Bolehkah linux mendapat virus? Meneroka kelemahan Linux ..
- Pembalakan Lanjutan dan Pengauditan di Linux
- Perintah Linux: Top 20 Perintah Paling Penting yang Anda Perlu ..
- Mint 20: Lebih baik daripada Ubuntu dan Microsoft Windows?
- « Cara Memasang Komposer PHP di Debian Linux
- Cara menjadualkan tugas menggunakan perintah di linux »