Can't write to file /sys/class/backlight/acpi_video0/brightness (ubuntu)
I am trying to change the brightness by overwriting the value on this file:
sudo echo 5 > /sys/class/backlight/acpi_video0/brightness
-bash: /sys/class/backlight/acpi_video0/brightness: Permission denied
It doesn't work even when using sudo. However if I switch to super-user with su, it works. Why is that?
The error happens because sudo elevates permissions for the command (sudo echo 5
) but not the redirection to write the file (> /sys/class/backlight/acpi_video0/brightness
). The actual bash shell needs permission to write, which is why it fails with sudo but works as root.
You can work around this by running the tee
command as root to write to the file:
echo 5 | sudo tee /sys/class/backlight/acpi_video0/brightness
Note that this will also echo "5" to your terminal. This is a normal side effect of the tee
command.
As written in the Arch wiki (link), by default, only root
can change the brightness by this method. To allow users in the video
group to change the brightness, a udev
rule such as the following can be used (replace the <vendor>
with your vendor id. E.g. 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"
Then you need to add your user to the video
group.
usermod -aG video <user>
After that this should work:
echo 5 > /sys/class/backlight/<vendor>/brightness
If you didn't want 5 to be echoed this also works:
sudo sh -c 'echo 5 > /sys/class/backlight/acpi_video0/brightness'