linux – 如何使用`udev`更改/ sys中的权限以改变LED /灯的状态?

我有一台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时没有收到错误

感谢您的帮助和点击.或者其他解决方案.

解决方法:

我正在使用以下两个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 ==“更改”规则来处理动态创建的属性.例如,如果LED的触发器设置为“定时器”(echo timer>触发器),则创建额外属性delay_on和delay_off.指定更改操作,以便这些新属性设置其组和权限.

我注意到每次关闭LED时都会产生一个更改事件,方法是将0写入/sys/class/leds/…/brightness.这似乎是由于每当亮度设置为0时,Linux LED驱动程序代码清除触发器.这就是为什么第二条规则具有ENV {TRIGGER}!=“none”条件,以防止每次LED转动时触发规则关闭.

上一篇:VMware安装出现"已将该虚拟机配置为使用 64 位客户机操作系统"


下一篇:程序员写代码都用什么样的笔记本?