我试图通过覆盖此文件上的值来更改亮度:
sudo echo 5 > /sys/class/backlight/acpi_video0/brightness
-bash: /sys/class/backlight/acpi_video0/brightness: Permission denied
即使使用sudo也不起作用。但是,如果我使用su切换为超级用户,则可以使用。这是为什么?
我试图通过覆盖此文件上的值来更改亮度:
sudo echo 5 > /sys/class/backlight/acpi_video0/brightness
-bash: /sys/class/backlight/acpi_video0/brightness: Permission denied
即使使用sudo也不起作用。但是,如果我使用su切换为超级用户,则可以使用。这是为什么?
Answers:
发生错误是因为sudo提升了命令(sudo echo 5
)的权限,但没有提升写入文件(> /sys/class/backlight/acpi_video0/brightness
)的重定向。实际的bash shell需要写权限,这就是为什么它在sudo下失败但以root身份工作的原因。
您可以通过以tee
超级用户身份运行命令以写入文件来解决此问题:
echo 5 | sudo tee /sys/class/backlight/acpi_video0/brightness
请注意,这也会在终端上回显“ 5”。这是该tee
命令的正常副作用。
tee
解决方案
如Arch Wiki(link)中所写,默认情况下只能root
通过此方法更改亮度。为了让用户的video
组来改变亮度,udev
如可以使用下列规则(更换<vendor>
你的供应商ID例如。acpi_video0
,intel_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
acpi_video0
通过intel_backlight
。
以下解决方案对我来说很好。
我将其发布为答案,以便其他人可以获得帮助:
更改权限:
sudo chmod a+rw /sys/class/backlight/intel_backlight/brightness
现在更改亮度:
echo 400 > /sys/class/backlight/intel_backlight/brightness
在您的情况下,它将是: /sys/class/backlight/acpi_video0/brightness
The reason that this is set at su permissions is that a virus could conceivably make your screen dim and go bright at incredible speed ultimately damaging your hardware display. In the 90's I encountered a virus that would adjust the screen refresh Hertz so rapidly that your monitor would fry.