我以用户身份启动 X,需要将键盘亮度设置为/sys/class/leds/asus\:\:kbd_backlight/brightness
.重新启动后会重新创建目录/sys/
,因此权限也会重置。如何设置它以便我不需要在每次启动后使所有用户都可写该文件?
我使用 Archlinux 和 SDDM 作为登录管理器,KDE 作为 DE。
答案1
不,你不能,sysfs 的权限是在内核空间中定义的,不能使用用户空间工具进行更改(除非有内核端支持)。
但对于你自己的问题,你可以设置一个 sudo 条目,允许每个人写入该路径,即ALL ALL = (ALL) NOPASSWD: /usr/bin/tee /sys/class/leds/asus\:\:kbd_backlight/brightness
当您写入该目录时,请使用这样的脚本,echo 1 | sudo /usr/bin/tee "/sys/class/leds/asus::kbd_backlight/brightness"
答案2
归档权限更改的其他方法是使用 udev 规则:
$ cat /etc/udev/rules.d/99-asus.rules
# allow keyboard brightness control for everyone
ACTION=="add", SUBSYSTEM=="leds", KERNEL=="asus::kbd_backlight", RUN+="/bin/chmod a+w /sys/class/leds/%k/brightness"
udevadm test /sys/class/leds/asus::kbd_backlight
要测试报告中尝试使用的规则,您应该会看到指定的运行命令。
并触发它使用
sudo udevadm trigger --verbose --action=add /sys/class/leds/asus::kbd_backlight
基于这个答案
答案3
我遇到了类似的问题,我需要在运行nodered服务之前设置权限。根据金发姑娘的评论,我创建了这个 systemd 脚本:
$ cat /etc/systemd/system/setledspermissions.service
[Unit]
Description=Set leds writable to everybody
Before=nodered.service
[Service]
Type=oneshot
User=root
ExecStart=/bin/bash -c "/bin/chmod a+w /sys/class/leds/led0/*"
[Install]
WantedBy=multi-user.target
编写服务文件后,我启用了它
$ sudo systemctl enable setledspermissions.service
$ sudo systemctl start setledspermissions.service
$ sudo systemctl status setledspermissions.service
答案4
Linux 中的目录/sys
是假的,它是伪装成文件的内核视图。因此,永久更改其中的权限意味着破解内核,这是不明智的。正如评论所说,也许一个systemd
单位设置这将是一个解决方案(通常,将更改设置为启动过程的一部分)。