Tutorial tentang Cara Menulis Aturan Udev Dasar di Linux

Tutorial tentang Cara Menulis Aturan Udev Dasar di Linux

Objektif

Memahami konsep dasar di balik Udev, dan pelajari cara menulis aturan sederhana

Persyaratan

  • Izin root

Kesulitan

SEDANG

Konvensi

  • # - mensyaratkan perintah linux yang diberikan untuk dieksekusi dengan hak istimewa root
    langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
  • $ - mensyaratkan perintah Linux yang diberikan untuk dieksekusi sebagai pengguna biasa

Perkenalan

Dalam sistem GNU/Linux, sementara perangkat dukungan tingkat rendah ditangani di tingkat kernel, manajemen peristiwa yang terkait dengan mereka dikelola dalam ruang pengguna oleh Udev, dan lebih tepatnya oleh udevd Daemon. Mempelajari cara menulis aturan yang akan diterapkan pada yang terjadi dari peristiwa tersebut dapat sangat berguna untuk memodifikasi perilaku sistem dan menyesuaikannya dengan kebutuhan kita.

Bagaimana aturan diatur

Aturan udev didefinisikan ke dalam file dengan .aturan perpanjangan. Ada dua lokasi utama di mana file -file tersebut dapat ditempatkan: /usr/lib/udev/aturan.D itu adalah direktori yang digunakan untuk aturan yang dipasang sistem, /etc/udev/aturan.D/ dicadangkan untuk aturan yang dibuat khusus.

File di mana aturan didefinisikan secara konvensional dinamai dengan angka sebagai awalan (e.G 50-udev-default.aturan) dan diproses dalam urutan leksikal secara independen dari direktori tempat mereka berada. File yang diinstal di /etc/udev/aturan.D, Namun, ganti nama dengan nama yang sama diinstal di jalur default sistem.



Sintaks aturan

Sintaks aturan udev tidak terlalu rumit setelah Anda memahami logika di baliknya. Suatu aturan disusun oleh dua bagian utama: bagian "kecocokan", di mana kami menentukan kondisi untuk aturan yang akan diterapkan, menggunakan serangkaian kunci yang dipisahkan oleh koma, dan bagian "tindakan", di mana kami melakukan beberapa jenis tindakan, saat kondisinya terpenuhi.

Kasus uji

Cara yang lebih baik untuk menjelaskan opsi yang mungkin daripada mengkonfigurasi aturan yang sebenarnya? Sebagai contoh, kita akan mendefinisikan aturan untuk menonaktifkan touchpad saat mouse terhubung. Jelas atribut yang disediakan dalam definisi aturan, akan mencerminkan perangkat keras saya.

Kami akan menulis aturan kami di /etc/udev/aturan.D/99-kambang.aturan file dengan bantuan editor teks favorit kami. Definisi aturan dapat menjangkau beberapa baris, tetapi jika itu masalahnya, backslash harus digunakan sebelum karakter garis baru, sebagai lanjutan garis, seperti pada skrip shell shell. Inilah aturan kami:

Action == "Tambahkan" \, attrs idProduct == "c52f" \, attrs idVendor == "046d" \, env display = ": 0" \, env xauthority = "/run/ Pengguna/1000/GDM/XAUTHORITY "\, run+="/usr/bin/xinput - -disemable 16 " 

Ayo menganalisisnya.

Operator

Pertama -tama, penjelasan operator yang digunakan dan kemungkinan:

== dan != operator

Itu == adalah operator kesetaraan dan != adalah operator ketidaksetaraan. Dengan menggunakannya, kami menetapkan bahwa agar aturan tersebut diterapkan, tombol yang ditentukan harus cocok, atau tidak sesuai dengan nilai yang ditentukan masing -masing.

Operator penugasan: = dan: =

Itu = operator penugasan, digunakan untuk menetapkan nilai ke kunci yang menerima satu. Kami menggunakan : = Operator, sebaliknya, ketika kami ingin menetapkan nilai dan kami ingin memastikan bahwa itu tidak ditimpa oleh aturan lain: nilai -nilai yang ditetapkan dengan operator ini, pada fakta, tidak dapat diubah.

Operator += dan -=

Itu += Dan -= Operator masing -masing digunakan untuk menambah atau menghapus nilai dari daftar nilai yang ditentukan untuk kunci tertentu.



Kunci yang kami gunakan

Sekarang mari kita analisis kunci yang kami gunakan dalam aturan. Pertama -tama kami memiliki TINDAKAN Kunci: Dengan menggunakannya, kami menentukan bahwa aturan kami harus diterapkan saat peristiwa tertentu terjadi untuk perangkat. Nilai yang valid adalah menambahkan, menghapus Dan mengubah

Kami kemudian menggunakan Attrs Kata kunci untuk menentukan atribut yang akan dicocokkan. Kami dapat mencantumkan atribut perangkat dengan menggunakan Info udevadm perintah, memberikan namanya atau sysfs jalur:

Info udevadm -ap/perangkat/PCI0000: 00/0000: 00: 1D.0/USB2/2-1/2-1.2/2-1.2: 1.1/0003: 046D: C52F.0010/input/input39 info udevadm dimulai dengan perangkat yang ditentukan oleh devpath dan kemudian berjalan di rantai perangkat induk. Itu mencetak untuk setiap perangkat yang ditemukan, semua atribut yang mungkin dalam format utama aturan UDEV. Aturan yang cocok, dapat disusun oleh atribut perangkat dan atribut dari satu perangkat induk tunggal. Melihat Perangkat '/Perangkat/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" driver == "" attr name == "Logitech USB penerima" attr Phys == "USB-0000: 00: 1D.0-1.2/input1 "attr properties ==" 0 "attr uniq ==" "Melihat perangkat induk '/perangkat/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 "driver ==" HID-Generic "ATTRS country ==" 00 "Melihat Perangkat Induk '/Perangkat/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 "driver ==" usbHid "attrs disahkan ==" 1 "attrs BalternateSetting ==" 0 "attrs binterfaceclass ==" 03 "attrs binterfacenumber ==" 01 "" Attrs binterfaceprotocol == "00" attrs binterfacesubclass == "00" attrs bnumendPoints == "01" attrs supports_autosuspend == "1" Melihat perangkat induk/perangkat/perangkat/pci0000: 0000/00/00/0000: 00: 1d.0/USB2/2-1/2-1.2 ': kernel == "2-1.2 "subsystems ==" USB "driver ==" usb "attrs disahkan ==" 1 "attrs hindari_reset_quirk ==" 0 "attrs bconfigurationValue ==" 1 "attrs bdeviceClass ==" 00 " Attrs bdeviceprotocol == "00" attrs bdevicesubclass == "00" attrs bmaxpacketsize0 == "8" attrs bmaxpower == "98MA" attrs bnumonfigurations == "1" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" "" nATFACES BNUMONFIGURATIONS BMAXPOWER BMAXPOWER BMAXPOWER 1 " = "2" attrs bcddevice == "3000" attrs bmattributes == "a0" attrs busnum == "2" attrs configuration == "rqr30.00_b0009 "attrs devnum ==" 12 "attrs devpath ==" 1.2" ATTRSidProduct=="c52f" ATTRSidVendor=="046d" ATTRSltm_capable=="no" ATTRSmanufacturer=="Logitech" ATTRSmaxchild=="0" ATTRSproduct  == "USB Receiver" ATTRS Quirks == "0x0" ATRS Removable == "Removable" ATRS speed == "12" ATRS urbnum == "1401" ATRS Versi == " 2.00 "[…] 


Di atas adalah output terpotong yang diterima setelah menjalankan perintah. Karena Anda dapat membacanya dari output itu sendiri, udevadm dimulai dengan jalur yang ditentukan yang kami berikan, dan memberi kami informasi tentang semua perangkat induk. Perhatikan bahwa atribut perangkat dilaporkan dalam bentuk tunggal (e.G INTI), sedangkan yang induk dalam bentuk jamak (e.G Kernel). Informasi orang tua dapat menjadi bagian dari aturan tetapi hanya satu orang tua yang dapat direferensikan pada suatu waktu: mencampur atribut perangkat induk yang berbeda tidak akan berfungsi. Dalam aturan yang kami tetapkan di atas, kami menggunakan atribut satu perangkat induk: produk identitas Dan Idvendor.

Hal berikutnya yang telah kami lakukan dalam aturan kami, adalah menggunakan Env Kata kunci: dapat digunakan untuk mengatur atau mencoba mencocokkan variabel lingkungan. Kami memberikan nilai pada MENAMPILKAN Dan Xauthority satu. Variabel -variabel tersebut sangat penting saat berinteraksi dengan X Server secara terprogram, untuk mengatur beberapa informasi yang diperlukan: dengan MENAMPILKAN variabel, kami menentukan mesin apa yang dijalankan server, tampilan apa dan layar apa yang kami rujuk, dan dengan Xauthority Kami menyediakan jalur ke file yang berisi informasi otentikasi dan otorisasi Xorg. File ini biasanya terletak di direktori "home" pengguna.

Akhirnya kami menggunakan BERLARI Kata kunci: Ini digunakan untuk menjalankan program eksternal. Sangat penting: ini tidak segera dieksekusi, tetapi berbagai tindakan dieksekusi setelah semua aturan telah diuraikan. Dalam hal ini kami menggunakan xinput utilitas untuk mengubah status touchpad. Saya tidak akan menjelaskan sintaks XInput di sini, itu akan di luar konteks, perhatikan saja itu 16 adalah ID dari Touchpad.

Setelah aturan kami ditetapkan, kami dapat men -debug dengan menggunakan Tes Udevadm memerintah. Ini berguna untuk debugging tetapi tidak benar -benar menjalankan perintah yang ditentukan menggunakan BERLARI kunci:

$ udevadm test --action = "add"/devices/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 perintah tersebut adalah tindakan untuk disimulasikan, menggunakan --tindakan opsi, dan jalur sysfs perangkat. Jika tidak ada kesalahan yang dilaporkan, aturan kami harus baik untuk pergi. Untuk menjalankannya di dunia nyata, kita harus memuat ulang aturan:

# Kontrol udevadm - -Reload

Perintah ini akan memuat ulang file aturan, bagaimanapun, akan memiliki efek hanya pada acara baru yang dihasilkan.

Kami telah melihat konsep dasar dan logika yang digunakan untuk membuat aturan UDEV, namun kami hanya menggaruk permukaan banyak opsi dan kemungkinan pengaturan. Udev Manpage menyediakan daftar lengkap: silakan merujuknya untuk pengetahuan yang lebih mendalam.

Tutorial Linux Terkait:

  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Cara menangani acara ACPI di Linux
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Unduh Linux
  • File Konfigurasi Linux: 30 Teratas Paling Penting
  • Can Linux mendapatkan virus? Menjelajahi kerentanan Linux…
  • Pencatatan dan audit lanjutan di Linux
  • Perintah Linux: 20 perintah terpenting teratas yang Anda butuhkan untuk…
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?