Tutorial mengenai cara menulis peraturan udev asas di linux

Tutorial mengenai cara menulis peraturan udev asas di linux

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 menggunakan sudo 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?