Wie kann ich die Berechtigungen in / sys ändern, um den Status einer LED / eines Lichts mit `udev` zu ändern?

11

Ich habe ein Thinkpad und möchte das ThinkLight (das weiße Blitzlicht über dem Bildschirm zum Aufleuchten der Tastatur) für Benachrichtigungen bei eingehenden Jabber-Nachrichten verwenden.

Es ist leicht zu realisieren, da man nur /sys/class/leds/tpacpi::thinklight/brightnessauf 255 wechseln muss. Ich mache es mit einem einfachen Bash-Skript, das das Licht dreimal blinken lässt.

Aber um dies zu tun, muss ich die Berechtigungen ändern, damit nicht nur root diese Datei ändern kann.
Und ich möchte nicht sudo chmod o+w /sys/class/leds/tpacpi::thinklight/brightnessnach jedem Boot.

Ich denke, die beste Lösung ist udevdafür. Ich habe es jedoch noch nie benutzt udevund bin ziemlich verwirrt über die Tutorials, die ich online gefunden habe.

Ich habe diese udevRegel ausprobiert :

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

ebenso gut wie

KERNEL="thinklight", MODE="0666"

Aber es funktioniert nicht. Obwohl ich beim Laufen keine Fehler bekommeudevadm test /class/leds

Vielen Dank für jede Hilfe und Treffer. Oder vielleicht andere Lösungen.

Torbjörn
quelle
Gute Idee mit der Benachrichtigung, muss das auch tun :) Danke
K1773R

Antworten:

7

Ich verwende zwei udev-Regeln wie folgt, um Mitgliedern der Gruppe ledsZugriff auf alle LEDs zu gewähren :

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"

Beachten Sie, dass die ACTION=="change"Regel benötigt wird, um dynamisch erstellte Attribute zu verarbeiten. Zum Beispiel, wenn der Auslöser LED ist auf „Timer“ ( echo timer > trigger), dann zusätzliche Attribute delay_onund delay_offerstellt werden . Die changeAktion wird so angegeben, dass für diese neuen Attribute ihre Gruppe und Berechtigungen festgelegt sind.

Ich habe festgestellt, dass changejedes Mal ein Ereignis generiert wird, wenn die LED durch Schreiben 0an ausgeschaltet wird /sys/class/leds/.../brightness. Dies scheint auf das Löschen des Linux-LED-Treibercodes zurückzuführen zu sein, wenn die Helligkeit eingestellt ist 0. Aus diesem Grund hat die zweite Regel die ENV{TRIGGER}!="none"Bedingung, dass die Regel nicht jedes Mal ausgelöst wird, wenn eine LED ausgeschaltet wird.

Craig McQueen
quelle
1

Ich denke, Sie haben die falsche 'KERNEL'-Einstellung. Aus diesem fantastischen Dokument zum Schreiben und Debuggen von udev-Regeln:

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

Ich denke, Sie brauchen KERNEL = Helligkeit und vielleicht ein SUBSYSTEM = LEDs

Für den Fall, dass Ihre Distribution keine Unterstützung mehr hat. Stellen Sie sicher, dass Ihre Änderungen von udevd angezeigt werden:

# udevcontrol reload_rules
Polynom
quelle