Tor*_*örn 13 linux permissions udev thinkpad
我有一个 Thinkpad,想使用 ThinkLight(屏幕上方的白色闪光灯,用于点亮键盘)来接收有关传入 Jabber 消息的通知。
很容易实现,只需将其更改/sys/class/leds/tpacpi::thinklight/brightness为 255。我将使用一个简单的 Bash 脚本来实现,该脚本将让灯闪烁 3 次。
但是为了能够做到这一点,我需要更改权限,不仅 root 可以更改此文件。
而且我不想sudo chmod o+w /sys/class/leds/tpacpi::thinklight/brightness每次开机后都这样。
我认为,最好的解决方案是udev为此使用。但是,我以前从未使用udev过,并且对我在网上找到的教程感到很困惑。
我试过这个udev规则:
KERNEL=="tpacpi::thinklight", MODE="0666"
Run Code Online (Sandbox Code Playgroud)
也
KERNEL="thinklight", MODE="0666"
Run Code Online (Sandbox Code Playgroud)
但它不起作用。虽然我在运行时没有收到错误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"
Run Code Online (Sandbox Code Playgroud)
请注意,ACTION=="change"需要该规则来处理动态创建的属性。例如,如果 LED 的触发器设置为“定时器”( echo timer > trigger),则会创建额外的属性delay_on和delay_off。该change指定动作,使这些新的属性具有自己的组和权限设置。
我注意到一个change事件生成每次LED是通过写关闭的时间0来/sys/class/leds/.../brightness。这似乎是由于每当亮度设置为 时,Linux LED 驱动程序代码清除触发0。这就是为什么第二条规则具有ENV{TRIGGER}!="none"条件,以防止每次关闭 LED 时触发规则。
我的测试表明,在内核 5.4 中不再发生亮度设置为 0 时的更改事件。查看 Linux git 存储库,它看起来好像在内核 4.9 中已修复。因此对于 4.9 以上的内核,ENV{TRIGGER}!="none"不需要第二条规则的部分。
我认为您的“内核”设置错误。来自这个用于编写和调试 udev 规则的很棒的文档:
http://www.reactivated.net/writing_udev_rules.html#basic
我认为你需要 KERNEL=亮度,也许还需要 SUBSYSTEM=LED
然后,以防您的发行版缺乏 inotify 支持。确保 udevd 可以看到您的更改:
# udevcontrol reload_rules
Run Code Online (Sandbox Code Playgroud)