Jak mogę zmienić uprawnienia w / sys, aby zmienić stan diody / światła za pomocą `udev`?

11

Mam Thinkpad i chciałbym używać ThinkLight (biała lampa błyskowa nad ekranem zaprojektowanym do podświetlania klawiatury) do powiadamiania o przychodzących wiadomościach Jabber.

Jest to łatwe do zrealizowania, ponieważ wystarczy zmienić /sys/class/leds/tpacpi::thinklight/brightnessna 255. Zrobię to za pomocą prostego skryptu Bash, który pozwoli trzy razy mrugnąć lampką.

Ale żeby móc to zrobić, muszę zmienić uprawnienia, aby nie tylko root mógł zmienić ten plik.
I nie chcę sudo chmod o+w /sys/class/leds/tpacpi::thinklight/brightnesspo każdym rozruchu.

Myślę, że udevdo tego celu służy najlepsze rozwiązanie . Jednak nigdy wcześniej nie korzystałem udevi jestem dość zdezorientowany samouczkami, które znalazłem w Internecie.

Wypróbowałem tę udevzasadę:

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

jak również

KERNEL="thinklight", MODE="0666"

Ale to nie działa. Chociaż nie dostaję błędów podczas działaniaudevadm test /class/leds

Dzięki za wszelką pomoc i trafienia. A może inne rozwiązania.

Torbjörn
źródło
dobry pomysł z powiadomieniem, też muszę to zrobić :) dzięki
K1773R

Odpowiedzi:

7

Używam dwóch reguł udev w następujący sposób, aby dać członkom grupy ledsdostęp do wszystkich diod 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"

Uwaga: ACTION=="change"reguła jest potrzebna do obsługi dynamicznie tworzonych atrybutów. Na przykład, jeśli spust diody LED jest ustawiona na „Timer” ( echo timer > trigger), a następnie dodatkowych atrybutów delay_oni delay_offsą tworzone. changeAkcja jest określona tak, że te nowe atrybuty mają swoje grupy i uprawnienia ustawione.

Zauważyłem, że changezdarzenie jest generowane za każdym razem, gdy dioda LED jest wyłączana, pisząc 0na adres /sys/class/leds/.../brightness. Wydaje się, że dzieje się tak z powodu usuwania kodu sterownika LED systemu Linux, ilekroć ustawiana jest jasność 0. Dlatego druga reguła ma ENV{TRIGGER}!="none"warunek, aby zapobiec uruchamianiu reguły za każdym razem, gdy dioda LED jest wyłączana.

Craig McQueen
źródło
1

Myślę, że masz złe ustawienie „KERNEL”. Z tego wspaniałego dokumentu do pisania i debugowania reguł udev:

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

Myślę, że potrzebujesz KERNEL = jasność, a być może SUBSYSTEM = diody led

Następnie na wypadek, gdyby Twoja dystrybucja nie była obsługiwana. Upewnij się, że zmiany są widoczne przez udevd:

# udevcontrol reload_rules
wielomian
źródło