Bagaimana saya bisa mengubah izin di / sys untuk mengubah keadaan LED / cahaya menggunakan `udev`?

11

Saya punya Thinkpad dan ingin menggunakan ThinkLight (lampu kilat putih di atas layar yang dirancang untuk menyalakan keyboard) untuk notifikasi pada pesan Jabber yang masuk.

Sangat mudah untuk diwujudkan karena seseorang hanya perlu mengubah /sys/class/leds/tpacpi::thinklight/brightnesske 255. Saya akan melakukannya dengan skrip Bash sederhana, yang akan membiarkan cahaya berkedip tiga kali.

Tetapi untuk dapat melakukan ini, saya perlu mengubah izin, yang tidak hanya root dapat mengubah file ini.
Dan saya tidak ingin sudo chmod o+w /sys/class/leds/tpacpi::thinklight/brightnesssetelah setiap boot.

Saya pikir, solusi terbaik adalah menggunakan udevini. Namun, saya belum pernah menggunakan udevsebelumnya dan saya cukup bingung dengan tutorial yang saya temukan online.

Saya mencoba udevaturan ini :

KERNEL=="tpacpi::thinklight", MODE="0666"

sebaik

KERNEL="thinklight", MODE="0666"

Tapi itu tidak berhasil. Meskipun saya tidak mendapatkan kesalahan saat menjalankanudevadm test /class/leds

Terima kasih atas bantuan dan hit. Atau mungkin solusi lain.

Torbjörn
sumber
ide yang bagus dengan notifikasi, harus melakukannya juga :) terima kasih
K1773R

Jawaban:

7

Saya menggunakan dua aturan udev sebagai berikut, untuk memberikan anggota grup ledsakses ke semua LED:

SUBSYSTEM=="leds", ACTION=="add", RUN+="/bin/chgrp -R leds /sys%p", RUN+="/bin/chmod -R g=u /sys%p"
SUBSYSTEM=="leds", ACTION=="change", ENV{TRIGGER}!="none", RUN+="/bin/chgrp -R leds /sys%p", RUN+="/bin/chmod -R g=u /sys%p"

Perhatikan bahwa ACTION=="change"diperlukan aturan untuk menangani atribut yang dibuat secara dinamis. Misalnya, jika pemicu LED diatur ke "timer" ( echo timer > trigger), maka atribut tambahan delay_ondan delay_offdibuat. The changetindakan yang ditentukan sehingga atribut-atribut baru memiliki kelompok dan hak akses mereka ditetapkan.

Aku telah memperhatikan bahwa changeacara dihasilkan setiap kali LED dimatikan dengan menulis 0untuk /sys/class/leds/.../brightness. Hal ini tampaknya disebabkan oleh pemutusan kode driver Linux LED yang memicu setiap kali kecerahan diatur ke 0. Itulah sebabnya aturan kedua memiliki ENV{TRIGGER}!="none"kondisi, untuk mencegah pemicu aturan setiap kali LED dimatikan.

Craig McQueen
sumber
1

Saya pikir Anda memiliki pengaturan 'KERNEL' yang salah. Dari dokumen yang luar biasa ini untuk menulis dan men-debug aturan udev:

http://www.reactivated.net/writing_udev_rules.html#basic

Saya pikir Anda perlu KERNEL = kecerahan, dan mungkin sebuah SUBSYSTEM = led

Lalu, seandainya distro Anda kekurangan dukungan yang tidak sah. Pastikan perubahan Anda dilihat oleh udevd:

# udevcontrol reload_rules
jumlahnya banyak
sumber