如何使用“ udev”更改/ sys中的权限以更改LED /灯的状态?


11

我有一个Thinkpad,并且想使用ThinkLight(屏幕上方的白色闪光灯来照亮键盘)来通知收到的Jabber消息。

这很容易实现,因为只需要更改/sys/class/leds/tpacpi::thinklight/brightness为255即可。我将使用一个简单的Bash脚本来实现,该脚本将使指示灯闪烁三下。

但是要做到这一点,我需要更改权限,不仅root能够更改此文件。
而且我不想sudo chmod o+w /sys/class/leds/tpacpi::thinklight/brightness每次启动后都这样做。

我认为,最好的解决方案是udev为此使用。但是,我从未使用udev过,并且对在线找到的教程感到非常困惑。

我尝试了以下udev规则:

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

以及

KERNEL="thinklight", MODE="0666"

但这行不通。虽然我在运行时没有出现错误udevadm test /class/leds

感谢您的帮助和帮助。也许还有其他解决方案。


通知的好主意,也必须这样做:)谢谢
K1773R

Answers:


7

我使用以下两个udev规则,以使组成员leds可以访问所有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"

注意ACTION=="change",处理动态创建的属性需要该规则。例如,如果LED的触发设置为“计时器”( echo timer > trigger),然后额外的属性delay_ondelay_off创建。该change指定动作,使这些新的属性具有自己的组和权限设置。

我注意到,change每次通过写入0来关闭LED时都会生成一个事件/sys/class/leds/.../brightness。这似乎是由于每当将亮度设置为时,Linux LED驱动程序代码清除触发器就会导致0。这就是为什么第二条规则具有ENV{TRIGGER}!="none"条件的原因,以防止每次关闭LED时触发该规则。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.