Come posso cambiare i permessi in / sys per cambiare lo stato di un LED / luce usando `udev`?


11

Ho un Thinkpad e vorrei usare ThinkLight (la luce bianca del flash sopra lo schermo progettata per illuminare la tastiera) per le notifiche sui messaggi Jabber in arrivo.

È facile rendersi conto che basta cambiare /sys/class/leds/tpacpi::thinklight/brightnessa 255. Lo farò con un semplice script Bash, che farà lampeggiare la luce per tre volte.

Ma per poterlo fare, devo cambiare i permessi, che non solo root è in grado di cambiare questo file.
E non voglio sudo chmod o+w /sys/class/leds/tpacpi::thinklight/brightnessdopo ogni avvio.

Penso che la migliore soluzione stia usando udevper questo. Tuttavia, non ho mai usato udevprima e sono abbastanza confuso dai tutorial che ho trovato online.

Ho provato questa udevregola:

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

così come

KERNEL="thinklight", MODE="0666"

Ma non funziona Anche se non ricevo errori durante l'esecuzioneudevadm test /class/leds

Grazie per l'aiuto e i risultati. O forse altre soluzioni.


buona idea con la notifica, devo farlo anche
io

Risposte:


7

Sto usando due regole udev come segue, per dare ai membri del gruppo l' ledsaccesso a tutti i 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"

Nota: la ACTION=="change"regola è necessaria per gestire gli attributi creati dinamicamente. Ad esempio, se il trigger del LED è impostato su "timer" ( echo timer > trigger), vengono creati altri attributi delay_one delay_off. L' changeazione viene specificata in modo che questi nuovi attributi abbiano il gruppo e le autorizzazioni impostati.

Ho notato che un changeevento viene generato ogni volta che il LED viene spento scrivendo 0su /sys/class/leds/.../brightness. Ciò sembra dovuto al fatto che la cancellazione del codice del driver LED Linux si innesca ogni volta che la luminosità è impostata su 0. Ecco perché la seconda regola ha la ENV{TRIGGER}!="none"condizione, per evitare che la regola si attivi ogni volta che un LED viene spento.


1

Penso che tu abbia l'impostazione sbagliata di "KERNEL". Da questo fantastico documento per la scrittura e il debug delle regole udev:

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

Penso che tu abbia bisogno di KERNEL = luminosità e forse un SOTTOSISTEMA = led

Quindi, nel caso in cui la tua distribuzione non presenti supporto inotify. Assicurati che le tue modifiche vengano visualizzate da udevd:

# udevcontrol reload_rules
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.