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

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

我正在尝试通过覆盖此文件的值来改变亮度:

sudo echo 5 > /sys/class/backlight/acpi_video0/brightness
-bash: /sys/class/backlight/acpi_video0/brightness: Permission denied

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

答案1

发生此错误的原因是 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

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

答案2

正如 Arch Wiki 所写(关联),默认情况下,只能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"

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

usermod -aG video <user>

之后这应该可以工作:

echo 5 > /sys/class/backlight/<vendor>/brightness

答案3

如果你不想回显 5,也可以这样做:

sudo sh -c 'echo 5 > /sys/class/backlight/acpi_video0/brightness'

答案4

下面的解决方案对我来说很好用。

我将其作为答案发布,以便其他人可以获得帮助:

更改权限:

sudo chmod a+rw /sys/class/backlight/intel_backlight/brightness

现在改变亮度:

echo 400 > /sys/class/backlight/intel_backlight/brightness

在你的情况下将是:/sys/class/backlight/acpi_video0/brightness

相关内容