如何使用udev规则更改特定文件的权限?

3
我将尝试让用户Bob拥有更改屏幕亮度的权限,也就是说:让Bob对/sys/class/backlight/intel_backlight/brightness具有读写权限。
使用:
udevadm info -a -p /sys/class/backlight/intel_backlight/

显示以下结果:

  looking at device '/devices/pci0000:00/0000:00:02.0/drm/card1/card1-eDP-1/intel_backlight':
KERNEL=="intel_backlight"
SUBSYSTEM=="backlight"
DRIVER==""
ATTR{actual_brightness}=="7500"
ATTR{bl_power}=="0"
ATTR{brightness}=="7500"
ATTR{max_brightness}=="7500"
ATTR{type}=="raw"

.
.
.

所以我在/etc/udev/rules.d/30-brightness.rules中编写了一个udev规则。

30-brightness.rules

KERNEL=="intel_backlight", SUBSYSTEM=="backlight", RUN+="/usr/bin/find /sys/class/backlight/intel_backlight/ -type f -name brightness -exec chown bob:bob {} \; -exec chmod 666 {} \;"

即使重新启动后,文件权限仍保持为-rw-r--r-- 1 root root

我的问题是如何使用udev规则更改特定文件的权限,我做错了什么?


2
需要考虑几个方面:是否有覆盖此规则的后续规则?您为find使用了完整路径,但未为chownchmod使用,它们在路径上吗?这些实际上是文件(-type f),在我的系统下,在/sys/class下的大多数内容都是符号链接或目录。 - Cupcake Protocol
我已经尝试更改文件名为90-brightness.rules,这样它将在最后运行。/etc/udev/rules.d中唯一存在的另一个规则是70-snap.core.rules,因此不应覆盖我的规则。如果我在命令行中运行/usr/bin/find /sys/class/backlight/intel_backlight/ -type f -name brightness -exec /bin/chown bob:bob {} \; -exec /bin/chmod 666 {} \;,它可以正常工作,但如果我在我的dev规则中运行它仍然不能工作。 - Guy
1个回答

3
我已解决了问题, dev-rule应该是这样的(不包括反斜杠):
KERNEL=="intel_backlight", SUBSYSTEM=="backlight", RUN+="/usr/bin/find /sys/class/backlight/intel_backlight/ -type f -name brightness -exec chown bob:bob {} ; -exec chmod 666 {} ;"

请注意,上述的RUN命令在终端命令行中无法运行(你需要使用反斜杠)。


如果您可以使用%p来匹配目标文件,则不需要使用find。只需从实际想要的命令的完整路径开始,例如:RUN + =“/bin/chmod 0666 /sys%p/brightness” - Mikko Rantalainen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接