如何设置/sys/permanent的权限?

如何设置/sys/permanent的权限?

我以用户身份启动 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单位设置这将是一个解决方案(通常,将更改设置为启动过程的一部分)。

相关内容