212

To work around bug #1005495 (changing LCD brightness via hotkeys impossible), I'd like to have one command line query for increasing and one for reducing the brightness of my LCD. I could then map a hotkey to each one of this queries.

The problem is: I don't know how to increase and reduce the LCD brightness on the command line. Do you?

Pablo Bianchi
  • 14,308
  • 4
  • 74
  • 117
user69748
  • 2,333
  • 2
  • 17
  • 14
  • 1
    possible duplicate of [Unable to change brightness in a Lenovo laptop](http://askubuntu.com/questions/57236/unable-to-change-brightness-in-a-lenovo-laptop) – Lekensteyn Jun 10 '12 at 17:30
  • 2
    Thanks, Lekensteyn, but it's not a duplicate since lsmod | grep ^i915 gives me no output (see accepted solution). Still looking for a solution. – user69748 Dec 14 '12 at 11:56

18 Answers18

186

Open your terminal and type this

xrandr -q | grep " connected"

it will gives you the output as

LVDS1 connected 1680x1050+0+0 (normal left inverted right x axis y axis) 331mm x 207mm

There LVDS1 Stands for your display. So now you have to do as

xrandr --output LVDS1 --brightness 0.5

there 0.5 stands for brightness level and it ranges from 0.0 to 1.0 . 0.0 -> Full black .so you have to choose the required value of brightness .

This doesn't change brightness at a hardware level. From randr manual:

--brightness brightness Multiply the gamma values on the crtc currently attached to the output to specified floating value. Useful for overly bright or overly dim outputs. However, this is a software only modification, if your hardware has support to actually change the brightness, you will probably prefer to use xbacklight.

Pablo Bianchi
  • 14,308
  • 4
  • 74
  • 117
Raja G
  • 100,643
  • 105
  • 254
  • 328
  • 2
    Thanks for you answer but what I'd need is something like xrandr --increase 10 to increase the brightness by 10 percent. Is that possible, too? – user69748 Dec 14 '12 at 11:50
  • @user69748 well, you could use my first answer for that purpose . – Raja G Dec 14 '12 at 17:21
  • thanks but that doesn't work for me as written there. – user69748 Jan 17 '13 at 16:01
  • 61
    this doesn't seem to change the brightness at a hardware level – erjoalgo Oct 18 '13 at 06:29
  • Elaborate the issue please – Raja G Oct 18 '13 at 06:36
  • In my case, the `xrandr --output eDP1 --brightness 0.2` approach works fine while `xbacklight -set 20` fails. And I have the same question as @user69748: is it possible to use `xrandr` to change brightness by +/-0.05? – landroni Apr 27 '14 at 07:37
  • @landroni lemme look – Raja G Apr 27 '14 at 08:48
  • @landroni xbacklight not having full support for some hardware. – Raja G Apr 28 '14 at 05:26
  • Ah, OK, thanks! So there is no way to +/-0.05 brightness for `xrandr` users? – landroni Apr 28 '14 at 06:22
  • 1
    Regarding user84207'c comment, then I fear the same: It seems that at 0.0, the screen is all black, but still lit up, making it seems that the screen lights are still firing away, wasting battery. So is the brightness just changed on the graphical level, comparable to changing the brightness of a photo or in a game? – Rasmus Oct 02 '14 at 08:23
  • 15
    Too bad this answer got so many votes. My laptop screen "emulates" darkness so to say by making things appear darker (just as when you play a video with a night scene, that has nothing to do with the screen lightness but rather with pixels masking the background light). The lightness is exactly the same, wasting even more battery than before because of the pixels than now are darker. – Mephisto Nov 16 '14 at 15:47
  • @Mephisto All Laptops are not same. All answers are not same. – Raja G Nov 17 '14 at 05:05
  • @Raja I have a question [here](http://askubuntu.com/questions/664693/is-there-an-app-that-can-make-my-desktop-dimmer) that I think could use your input, Thanks – xtrchessreal Aug 23 '15 at 21:30
  • 7
    It fakes the brightness. The brightness does not change, it is rendered by software. – Eathen Nutt Apr 01 '16 at 20:58
  • @user1970939 I will try to update my answer. But please remember this answer was posted 4 years ago. – Raja G Apr 02 '16 at 04:49
  • 2
    I can confirm that this only emulates the brightness and does not change the brightness of the display's background light. Interestingly, the brightness of the mouse pointer is not changed, leaving it much brighter than the rest of the desktop. – nyi Apr 14 '16 at 08:24
  • Just what i needed `xrandr --output LVDS-1 --brightness 0.08` for night – Neil Sep 06 '16 at 14:53
  • @Neil did you mean `0.8` rather than `0.08`? – WinEunuuchs2Unix Jul 05 '18 at 01:42
  • 1
    In one line: `xrandr --output $(xrandr -q | grep " connected" | col1 | tail -1) --brightness 0.9` – Pablo Bianchi Jan 04 '19 at 22:50
  • "it ranges from 0.0 to 1.0 . 0.0 " is not true. 20.04 I can change it to 1.1 – BaTycoon Jan 14 '22 at 18:25
  • Exactly, this does not change the brightness on the hardware level just like I can change it using the keyboard keys. xbacklight doesn't work for me either because I have Radeon GPU. – Vin Raghav Apr 09 '22 at 03:12
165

The following works for me:

echo 400 | sudo tee /sys/class/backlight/intel_backlight/brightness

I guess the maximum possible value is in the /sys/class/backlight/intel_backlight/max_brightness file.

Replace intel_backlight with an asterisk to apply to all backlights.

Pablo Bianchi
  • 14,308
  • 4
  • 74
  • 117
palacsint
  • 2,119
  • 1
  • 15
  • 9
  • 1
    This is useful information but it doesn't work for me. Permission denied, even if I `sudo`. I also tried to `vim` the file and edit it, but it won't let me, saying something like "Fsync failed". – Ray Nov 27 '15 at 09:25
  • 18
    @Ray Try this: `echo 400 | sudo tee /sys/class/backlight/intel_backlight/brightness`. – Mygod Nov 28 '15 at 17:39
  • Oh wow it works! I'm not really Linux-savvy so as far as I'm concerned right now this is magic. – Ray Nov 30 '15 at 09:45
  • 11
    @Ray when you do `sudo echo 400 > /sys/class . .. ./brightness` redirection is done by shell , not by echo. And shell still runs as your regular user, not as sudo. That's why it gives permission denied. You need to have a utility that will write to file with root permissions, which is why `tee` works. – Sergiy Kolodyazhnyy Mar 09 '16 at 19:37
  • 4
    `echo 400 | sudo tee /sys/class/backlight/radeon_bl0/brightness` for radeon APUs and cards – Suici Doga Apr 01 '16 at 11:40
  • 14
    This is ridiculously low-level, but in fact seems to be the only thing that reliably works. It gets a bit less ugly if you `sudo chmod 0646` the `brightness` file, so `sudo` isn't needed for setting brightness anymore. – leftaroundabout May 24 '16 at 21:00
  • 14
    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. So be careful tweaking the permissions on this. – RyanNerd Oct 21 '16 at 16:21
  • 2
    echo '30000' | sudo tee /sys/class/backlight/gmux_backlight/brightness for me – Colin Nov 05 '16 at 02:38
  • 3
    Instead of changing the permissions of the file, you can add a script to the sudoers as a NOPASSWD entry (and change the script's permissions to require root to edit it). From there you can implement timeouts and any other protections you see fit. Alternatively you could write a daemon to periodically copy the brightness setting from a writable local brightness file to the live one. Either method means you can bind keys to modify the brightness without entering a password or leaving the master unsecured. – John P Jan 23 '17 at 15:16
  • RyanNerd , really because monitors anyways change the brightness really quickly to make it dimmer or brighter using PWM. Also lightboost does change it really quickly too so i think that it does no damage – Suici Doga May 19 '17 at 10:43
  • I do `sudo nano /sys/ ... /brightness` then I can change the value and apply it with `Ctrl O`. On my system, if I set it to anything above 976 I get an "invalid argument" error. This seems to be the max brightness here. – Rolf Jan 01 '18 at 23:26
  • for me this worked well as `su` (not `sudo`) – Casper Gerritsen Feb 01 '18 at 07:51
  • 2
    Brilliant, thank you. With Ubuntu Server, or any headless system, you don't want to install an window manager just to get access to `xrandr` or have `xbacklight` work. This works perfectly on my MacBook Air running Ubuntu Server 19.04 without any extra packages required. – DanielSmedegaardBuus May 14 '19 at 15:44
  • `sudo bash -c "echo 400 > /sys/class/backlight/intel_backlight/brightness"` to give permission to bash managing redirection to file. – astasiak Feb 29 '20 at 01:38
  • …bypainstakingly narrowing down the interval I 'learned' that 4437 is the highest brightness level on my lenovo laptop. (4438 will get you an 'invalied argument' – Frank N Apr 11 '21 at 14:43
  • 1
    Thanks, +1. This works on Wayland too. The screen on my Dell Latitude 5590 didn't respond to any other control, and was nearly unreadable, at a value of 375 out of a maximum of 7500. – Jos Mar 24 '23 at 11:35
162

Note: xbacklight only works with Intel, not properly on Radeon and not at all with modesetting driver (source). It also only works on X11, not Wayland.


One more way we have to do this is with another new program named as xbacklight , open your terminal and type this

sudo apt-get install xbacklight

then type this xbacklight -set 50

there 50 stands for brightness range we can get it upto 100 from 0 .

you can also increase and decrease the brightness from present value to specified level.as you mentioned if you want to increase to 10% from current value of brightness then you can give this

xbacklight -inc 10

and to decrease 10% you can give this

xbacklight -dec 10 
Nico Schlömer
  • 1,892
  • 3
  • 17
  • 25
Raja G
  • 100,643
  • 105
  • 254
  • 328
  • Looks like a really simple command but what I'd need is something like xbacklight -increase 10 to increase the brightness by 10 percent. Is that possible, too? – user69748 Aug 24 '12 at 09:31
  • @user69748 answer edited – Raja G Aug 24 '12 at 10:47
  • 1
    Yes you can. I've already mention that . so you can get that by xbacklight -inc 10 – Raja G Aug 24 '12 at 16:53
  • 44
    That really looks simple, but unfortunatelly it doesn't work for me. Brightness simply doesn't change, not with -dec and not with -set. I guess I'll have to hope the bug gets fixed any time soon. Thanks nevertheless. – user69748 Sep 04 '12 at 14:38
  • This works better than the `xrandr` thing on my Ubuntu 14.04 Lenovo laptop. setting the brightness via `xrandr` changes a different brightness setting, but xbacklight seems to change the same setting that the keyboard brightness buttons change – Michael Butler Jun 06 '15 at 18:26
  • It is very simple and thanks for that. It is working for me(Ubuntu 14.04, HP DV6), But it does not increase by the amount of 10%. I have used custom shortcut for the increase and decrease command, but they reach the 100 in just 4 clicks. and difference between the 3rd and 4rth times key press, there is more difference in the brightness compared to 1st, 2nd, 3rd key presses(when i start from lowest brightness). Can anybody tell me the reason behind it or point towards right direction. – hunch Jun 24 '15 at 17:05
  • Why is this answer not the accepted answer ? I have just tested on LTS 14.04 and it works like a charm. I like very much xbacklight -dec 1 to decrease from 1 unit until get get what you need. You get also get the current value. -get. – Rudy Vissers Feb 02 '16 at 06:56
  • 2
    Additionally, there's a shorthand you can use: `xbacklight +10; xbacklight -10; xbacklight =50;` – Fordi Mar 09 '16 at 18:48
  • worked great for me on 16.04.1-gnome. also hooked the +10/-10 up to my keyboard shortcuts that were previously not working using the gnome Keyboard app. – Joe Bergevin Oct 05 '16 at 17:44
  • My `lubuntu 16.4.` does not work with the `--inc`. I have two aliases: `alias x+='xbacklight -set 40'` (which is quite light) and `alias x-='xbacklight -dec 10'` – Timo Dec 09 '17 at 19:18
  • I have Radeon GPU and Intel processor. xbacklight has no effect on the brightness. – Vin Raghav Apr 09 '22 at 03:12
23

Using D-Bus with GNOME

You can increase/decrease brightness with gdbus:

# Step up
gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepUp

# Step down
gdbus call --session --dest org.gnome.SettingsDaemon.Power --object-path /org/gnome/SettingsDaemon/Power --method org.gnome.SettingsDaemon.Power.Screen.StepDown

Notes

Pablo Bianchi
  • 14,308
  • 4
  • 74
  • 117
13

For Laptops,

sudo setpci -s 00:02.0 F4.B=80

Change 80 by [0-FF] to get lowest-highest brightness. The value specified is in hex, so 80 will give you a 50% of max brightness.

For Desktops to make a gamma correction (not tested by me),

xgamma -gamma .75
Pablo Bianchi
  • 14,308
  • 4
  • 74
  • 117
Gaurav Gandhi
  • 1,610
  • 1
  • 16
  • 26
  • Thanks for you answer but what I'd need is something like setpci --increase 10 to increase the brightness by 10 percent. Is that possible, too? – user69748 Dec 14 '12 at 11:50
  • 1
    This was the only answer that worked for me on a Samsung NB30 Plus. – OSE Oct 21 '13 at 18:33
  • I can't seem to get this to work.. Should I change some parameters, perhaps, and if so, how do I find the appropriate values? – Rasmus Oct 02 '14 at 08:27
  • Thanks I'm on a laptop, `setpci` didn't work but `xgamma` did. – Philip Kirkbride May 02 '18 at 13:26
  • If you want to use a [0-255] range you can use `$(echo "obase=16; ibase=10; 128" | bc)` (for ~50%). The `ibase=10;` is optional. – Pablo Bianchi Nov 05 '20 at 17:56
4

KDE 4.12:

qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/BrightnessControl setBrightness 55

KDE Plasma Version: 5.14.3:

The above code is still valid. It will only work if you are a KDE user. However in that case it will require no additional piece of software. It will have the exact same behavior as when using the "battery and brightness" widget. AFAIK it changes the physical backlight, in contrast with xrandr which does does not.

Beware that the 55 above is not a fraction of 100, the latter being the max brightness. Instead it is related to max_brightness:

qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/BrightnessControl brightnessMax

There is also a "silent" version that you might prefer in a script:

qdbus org.kde.Solid.PowerManagement /org/kde/Solid/PowerManagement/Actions/BrightnessControl setBrightnessSilent 2000

Refs: qdbus, solid, brightness

int_ua
  • 8,394
  • 12
  • 78
  • 144
4

Make this script:

set-brightness.sh

#!/bin/bash
TARGET="acpi_video0"
cd /sys/class/backlight
MAX="$(cat "${TARGET}/max_brightness")"
# The `/1` at the end forced bc to cast the result 
# to an integer, even if $1 is a float (which it 
# should be)
LOGIC="$(echo "($1 * ${MAX})/1" | bc)"
for i in */; do
    if [[ "${TARGET}/" != "$i" && -e "${i}brightness" ]]; then
        cat "${i}max_brightness" > "${i}brightness"
    fi
done
echo "$LOGIC" > "${TARGET}/brightness"

Run it as root, with any value between 0 and 1.

sudo ./set-brightness.sh 0.5
  • If your system doesn't have an /sys/class/backlight/acpi_video0, there should be at least one directory in there, which may be device-specific (I also have a radeon_bl0, for example).
  • If you have others, keep in mind their values stack (hence the loop; pushing all the other values to 1.0, then setting the target one to the desired amount).
  • While acpi_video0 should always work, it doesn't always have the full range of physical brightnesses available. Try each one, and use the one with the largest gamut as your "TARGET"
muru
  • 193,181
  • 53
  • 473
  • 722
Fordi
  • 289
  • 2
  • 5
  • 4
    Consider using `/sys/class/backlight/*/brightness` instead of trying to hard-code `acpi_video0` into the script. It will allow for generalizing the path to file, which can be different - i for example have `intel_backlight`, not `acpi_video0`. That's what I've used in my [script here](http://askubuntu.com/a/743141/295286) – Sergiy Kolodyazhnyy Mar 09 '16 at 19:41
3

To set absolute brightness (for laptop users):

BRIGHTNESS=50 # 0 to 100

dbus-send \
--session \
--type=method_call \
--dest="org.gnome.SettingsDaemon.Power" \
/org/gnome/SettingsDaemon/Power \
org.freedesktop.DBus.Properties.Set \
string:"org.gnome.SettingsDaemon.Power.Screen" \
string:"Brightness" \
variant:int32:$BRIGHTNESS
nvd
  • 1,130
  • 9
  • 7
3

Try this in terminal:

xrandr --output LVDS1 --brightness 0.9

You can change the last value as you like, eg. 0.2

Eric Carvalho
  • 53,609
  • 102
  • 137
  • 162
  • 4
    1) Output is not always LVDS1, but user can find out with xrandr --verbose 2) Doesn't change backlight intensity – erjoalgo Oct 18 '13 at 06:31
3

Here's a short line that can help you relax your eyes. Just create a crontaab with the line or make a script

xrandr --output VGA1 --brightness 0.5; sleep 20; xrandr --output VGA1 --brightness 1
3

As @palacsint said, echo 244 > /sys/class/backlight/intel_backlight/brightness path works for me.

But max and min values are resent in /sys/class/backlight/intel_backlight/max_brightness and /sys/class/backlight/intel_backlight/bl_power files respectively.

Also, the actual brightness that your computer is running now is present in /sys/class/backlight/intel_backlight/actual_brightness

user281989
  • 237
  • 1
  • 5
  • 13
3

ddccontrol is another option for controlling backlighting for external monitors. Here I can set the backlight of my external monitor to 50% of its power with:

ddccontrol -p -r 0x10 -w 50

I looked in possible solutions for this problem to improve the way Redshift handles brightness changes. Through there I found that there is a patchset for the Linux kernel to improve compatibility across devices, so that laptops and external screens could work similarly, through sysfs.

In the meantime, ddccontrol is the only thing that works for me here. As usual, the Arch wiki has good overall documentation on the topic as well.

anarcat
  • 151
  • 6
2

I am using i3 as my window manager and I had uninstalled gnome, so the gnome solution didn't work for me. And the other software based approaches just made the screen look more black. So, after a bit of reading, I came across brightctl. Install it using apt install.


sudo apt install brightctl

You will need permissions to modify the display device, which only members of the group video(and obviously root) can do. So, make sure you add the current user to the video group. You can do this like so :


sudo usermod $(whoami) -a -G video

After installation, I can increase/decrease brightness using the below commands by 10 -- this is very gradual and gives me more control. :


#Increase brightness
/usr/bin/brightnessctl -d intel_backlight set +10

#Reduce brightness
/usr/bin/brightnessctl -d intel_backlight set 10-

I have added keybindings in my i3 config. Here is a snippet of the keybinding.


#Increase brightness
bindsym XF86MonBrightnessUp exec  /usr/bin/brightnessctl -d intel_backlight set +10

#Reduce brightness
bindsym XF86MonBrightnessDown exec /usr/bin/brightnessctl -d intel_backlight set 10-
MidwayNomad
  • 430
  • 2
  • 6
2

Using the above answers, I created this script (saved in my home directory as brightness.sh) to modify display brightness (as the laptop's keyboard suffered a spilled tea issue and became unusable). Feel free to use it (if you have the designated files... otherwise tinkering to point to your variation of them will be necessary).

#!/bin/bash
function main_menu {
  sudo clear

  cursetting=$(cat /sys/class/backlight/intel_backlight/brightness)
  maxsetting=$(cat /sys/class/backlight/intel_backlight/max_brightness)
  powersave=$((maxsetting/5))
  conservative=$((powersave*2))
  medium=$((powersave*3))
  performance=$((powersave*4))

  echo ""
  echo "----------------------- Brightness -----------------------"
  echo " 1. Set Display to Minimum (Powersave) brightness setting."
  echo " 2. Set Display to Low (Conservative) brightness setting."
  echo " 3. Set Display to Medium brightness setting."
  echo " 4. Set Display to High (Performance) brightness setting."
  echo " 5. Set Display to Maximum brightness setting."
  echo " 6. Exit."
  echo "----------------------------------------------------------"

  if [ $cursetting -eq $powersave ]; then
    cursetting='Minimum'
  else
    if [ $cursetting -eq $conservative ]; then
      cursetting='Conservative'
    else
      if [ $cursetting -eq $medium ]; then
        cursetting='Medium'
      else
        if [ $cursetting -eq $performance ]; then
          cursetting='Performance'
        else
          if [ $cursetting -eq $maxsetting ]; then
            cursetting='Maximum'
          fi
        fi
      fi
    fi
  fi

  echo "        Current Display Setting - "$cursetting;
  choice=7
  echo ""
  echo -e "Please enter your choice: \c"
}

function press_enter {
  echo ""
  echo -n "Press Enter to continue."
  read
  main_menu
}

main_menu
while [ $choice -eq 7 ]; do
  read choice
  
  if [ $choice -eq 1 ]; then
    echo $powersave | sudo tee /sys/class/backlight/intel_backlight/brightness
    main_menu
  else
    if [ $choice -eq 2 ]; then
      echo $conservative | sudo tee /sys/class/backlight/intel_backlight/brightness
      main_menu
    else
      if [ $choice -eq 3 ]; then
        echo $medium | sudo tee /sys/class/backlight/intel_backlight/brightness
        main_menu
      else
        if [ $choice -eq 4 ]; then
          echo $performance | sudo tee /sys/class/backlight/intel_backlight/brightness
          main_menu
        else
          if [ $choice -eq 5 ]; then
            echo $maxsetting | sudo tee /sys/class/backlight/intel_backlight/brightness
            main_menu
          else
            if [ $choice -eq 6 ]; then
              exit;
            else
              echo -e "Please enter the NUMBER of your choice: \c"
              choice = 7
            fi
          fi
        fi
      fi
    fi
  fi
done
Pablo Bianchi
  • 14,308
  • 4
  • 74
  • 117
  • You could do better than just nesting a lot of if conditions, like `elif` or even better `case`. Also I suggest reading a style guide like https://google.github.io/styleguide/shell.xml and trying a linter like shellcheck as it helps you create better code. I wish someone told me this when I started scripting years ago. :) – LiveWireBT Jan 02 '19 at 05:38
1

Based on placsint's answer

cd /sys/class/backlight/intel_backlight/
cat max_brightness | sudo tee brightness
Rolf
  • 1,911
  • 1
  • 15
  • 12
1

To increase brightness using xdotool, run the following command:

$ xdotool key XF86MonBrightnessUp

To decrease brightness using xdotool, run the following command:

$ xdotool key XF86MonBrightnessDown 

Since xdotool simulates real hardware keypresses, this is a hardware level change of brightness.

Source: https://linuxhint.com/display_brightness_commandline/

podcast
  • 56
  • 3
  • This is great. My laptop screen brightness has gone below 5% so I went to another monitor in run in terminal a couple of times. – hrvoj3e Jul 04 '23 at 11:43
1

Interactive ncurses-like UI using xbacklight

A poor man's ncurses. Hit h and it goes down 10%, hit l and it goes up 10%. Then show the current luminosity.

xback() (
  done=false;
  echo "less: h, more: l, quit: q"
  while ! $done; do
    read -rsn1 key
    if [ "$key" = h ]; then
      xbacklight -dec 10
    elif [ "$key" = l ]; then
      xbacklight -inc 10
    elif [ "$key" = q ]; then
      done=true
    fi
    printf "\r$(xbacklight -get) "
  done
)
Ciro Santilli OurBigBook.com
  • 26,663
  • 14
  • 108
  • 107
0

You can set the x% brightness of display on follow way:

Syntax:

sudo brightnessctl -d intel_backlight set [your wanted value in % of max]

Install brightctl:

sudo apt install brightctl

Set the brightness to one % value in a range of 0 - 100 %:

sudo brightnessctl -d intel_backlight set 60%
Alfred.37
  • 279
  • 2
  • 15