无法写入文件 /sys/class/backlight/acpi_video0/brightness (ubuntu)

22 linux sudo brightness su

我试图通过覆盖此文件上的值来更改亮度:

sudo echo 5 > /sys/class/backlight/acpi_video0/brightness
-bash: /sys/class/backlight/acpi_video0/brightness: Permission denied
Run Code Online (Sandbox Code Playgroud)

即使使用 sudo 也不起作用。但是,如果我使用 su 切换到超级用户,它就可以工作。这是为什么?

小智 21

发生此错误是因为 sudo 提升了命令 ( sudo echo 5) 的权限,但没有提升写入文件 ( > /sys/class/backlight/acpi_video0/brightness)的重定向权限。实际的 bash shell 需要写入权限,这就是它使用 sudo 失败但以 root 身份运行的原因。

您可以通过tee以 root 身份运行命令来写入文件来解决此问题:

echo 5 | sudo tee /sys/class/backlight/acpi_video0/brightness
Run Code Online (Sandbox Code Playgroud)

请注意,这也会向您的终端回显“5”。这是该tee命令的正常副作用。

  • 我不能因为提出这一点而受到赞扬——这是我从谁知道的地方学到的一些 UNIX 民间传说。 (5认同)
  • 不适用于 /sys/class/drm/card0/device/pp_sclk_od 无法更改该值 (2认同)

Man*_*ger 16

正如 Arch wiki ( link ) 中所写,默认情况下,只能root通过此方法更改亮度。要允许video组中的用户更改亮度,udev可以使用如下规则(替换为<vendor>您的供应商 ID。例如acpi_video0intel_backlight):

% cat /etc/udev/rules.d/backlight.rules
ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="<vendor>", RUN+="/bin/chgrp video /sys/class/backlight/%k/brightness"
ACTION=="add", SUBSYSTEM=="backlight", KERNEL=="<vendor>", RUN+="/bin/chmod g+w /sys/class/backlight/%k/brightness"
Run Code Online (Sandbox Code Playgroud)

然后您需要将您的用户添加到video组中。

usermod -aG video <user>
Run Code Online (Sandbox Code Playgroud)

之后这应该工作:

echo 5 > /sys/class/backlight/<vendor>/brightness
Run Code Online (Sandbox Code Playgroud)