Difference between revisions of "Backlight"

From ArchWiki
Jump to: navigation, search
(Updated intel_gpu_tools commands (https://lists.x.org/archives/xorg-announce/2015-June/002613.html))
 
(158 intermediate revisions by 55 users not shown)
Line 1: Line 1:
 
[[Category:Laptops]]
 
[[Category:Laptops]]
 
[[Category:Power management]]
 
[[Category:Power management]]
Screen brightness can often be tricky to control. On many machines, physical hardware switches are missing and software solutions may or may not work well. Make sure to find a working method for your hardware! Too bright screens can cause eye strain.
+
[[ru:Backlight]]
 +
[[ja:バックライト]]
 +
Screen brightness might be tricky to control. On some machines physical hardware switches are missing and software solutions may not work well. However, it is generally possible; be sure to use a method that works for your hardware.
  
 
There are many ways to adjust the screen backlight of a monitor, laptop or integrated panel (such as the iMac) using software, but depending on hardware and model, sometimes only some options are available. This article aims to summarize all possible ways to adjust the backlight.
 
There are many ways to adjust the screen backlight of a monitor, laptop or integrated panel (such as the iMac) using software, but depending on hardware and model, sometimes only some options are available. This article aims to summarize all possible ways to adjust the backlight.
  
==Overview==
+
== Overview ==
There are many ways to control brightness. According to this discussion[https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/397617] and this wiki page [https://wiki.ubuntu.com/Kernel/Debugging/Backlight], the control method could be divided into these categories:
+
* brightness is controlled by vendor specified hotkey. And there is no interface for OS to adjust brightness.
+
* brightness is controlled by OS:
+
** brightness could be controlled by ACPI
+
** brightness could be controlled by graphic driver.
+
All methods expose themselves to the user by /sys/class/brightness. And xrandr/xbacklight could use this folder and choose one method to control brightness. But it is still not very clear which one xbacklight prefers by default.
+
''See FS#27677 for xbacklight, if you get "No outputs have backlight property."'' There is a temporary fix if xrandr/xbacklight does not choose the right directory in /sys/class/brightness: You can specify the one you want in xorg.conf by setting the "Backlight" option of the Device section to the name of that directory (see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=651741 at the bottom of the page for details).
+
* brightness is controlled by HW register throught setpci
+
  
==ACPI==
+
There are many ways to control brightness. According to this [https://bugs.launchpad.net/ubuntu/+source/xserver-xorg-video-intel/+bug/397617 discussion] and this  [https://wiki.ubuntu.com/Kernel/Debugging/Backlight wiki page] the control method can be divided into these categories:
It is often possible to adjust the backlight by ACPI. This controls the actual LEDs or cathodes of the screen. When this ACPI option is available, the illumination is controllable using a GUI slider in the Display/Screen system settings or by simple commands on the CLI.
+
 
 +
* brightness is controlled by vendor-specified hotkey and there is no interface for the OS to adjust the brightness.
 +
* brightness is controlled by either the ACPI or the graphic driver.
 +
* brightness is controlled by HW register through setpci.
 +
 
 +
All methods are exposed to the user through {{ic|/sys/class/backlight}} and xrandr/xbacklight can choose one method to control brightness. It is still not very clear which one xbacklight prefers by default.
 +
 
 +
== ACPI ==
 +
 
 +
The brightness of the screen backlight is adjusted by setting the power level of the backlight LEDs or cathodes. The power level can often be controlled using the ACPI kernel module for video. An interface to this module is provided via a folder in the sysfs at {{ic|/sys/class/backlight}}.
 +
 
 +
The name of the folder depends on the graphics card model.
  
Different cards might manage this differently. Check {{ic|/sys/class/backlight}} to find out:
 
 
{{hc|# ls /sys/class/backlight/|
 
{{hc|# ls /sys/class/backlight/|
intel_backlight
+
acpi_video0
 
}}
 
}}
  
So this particular backlight is managed by an Intel card. It is called {{ic|acpi_video0}} on an ATI card. In the following example, acpi_video0 is used.
+
In this case, the backlight is managed by an ATI graphics card. In the case of an Intel card it is called {{ic|intel_backlight}}. In the following example, {{ic|acpi_video0}} is used.
  
 
The directory contains the following files and folders:
 
The directory contains the following files and folders:
  
actual_brightness  brightness        max_brightness    subsystem/    uevent             
+
{{hc|# ls /sys/class/backlight/acpi_video0/|
bl_power          device/            power/            type
+
actual_brightness  brightness        max_brightness    subsystem/    uevent             
 +
bl_power          device/            power/            type
 +
}}
  
The maximum brightness (often 15) can be found by running {{ic|cat}}:
+
The maximum brightness can be found by reading from {{ic|max_brightness}}, which is often 15.
  
# cat /sys/class/backlight/acpi_video0/max_brightness
+
{{hc|# cat /sys/class/backlight/acpi_video0/max_brightness|
15
+
15
 +
}}
  
Brightness can then be set (as root) with {{ic|echo}}. Obviously you cannot go any higher than your screen's maximum brightness. The values for maximum brightness and brightness in general vary wildly among cards.  
+
The brightness can be set by writing a number to {{ic|brightness}}. Attempting to set a brightness greater than the maximum results in an error.
  
  # echo 5 > /sys/class/backlight/acpi_video0/brightness
+
  # tee /sys/class/backlight/acpi_video0/brightness <<< 5
  
Sometimes ACPI does not work well due to different motherboard implementations and ACPI quirks. This include some models with dual graphics (e.g. Nvidia-optimus/Radeon with intel (i915)) and some examples with this problem in notebooks such as Dell Studio, Dell XPS 14/15/17 and some Lenovo series, Kamal Mostafa kernel developer make [https://launchpad.net/~kamalmostafa/+archive/linux-kamal-mjgbacklight patches] for solved this problem included after 3.1 kernel version. You can try adding the following kernel parameters in your bootloader(grub, syslinux...) to adjust ACPI model:
+
=== Kernel command-line options ===
  
acpi_osi=Linux acpi_backlight=vendor
+
Sometimes, ACPI does not work well due to different motherboard implementations and ACPI quirks. This includes some laptops with dual graphics (e.g. Nvidia/Radeon dedicated GPU with Intel/AMD integrated GPU). On Nvidia Optimus laptops, the kernel parameter nomodeset can interfere with the ability to adjust the backlight. Additionally, ACPI sometimes needs to register its own {{ic|acpi_video0}} backlight even if one already exists (such as {{ic|intel_backlight}}), which can be done by adding one of the following kernel parameters in your [[bootloader]]:
  
or
+
acpi_backlight=video
 +
acpi_backlight=vendor
 +
acpi_backlight=native
 +
acpi_backlight=none
  
acpi_osi=Linux acpi_backlight=legacy
+
{{Note|
''acpi_backlight=vendor will prefer vendor specific driver (e.g. thinkpad_acpi, sony_acpi, etc.) instead of the ACPI video.ko driver.''
+
* If you find that changing the {{ic|acpi_video0}} backlight does not actually change the brightness, you may need to use {{ic|1=acpi_backlight=none}}.
 +
* On an Asus notebooks you might also need to do: {{bc|# modprobe asus-nb-wmi}}
 +
* Disabling legacy boot on Dell XPS13 breaks backlight support.
 +
}}
 +
 
 +
=== Udev rule ===
 +
 
 +
If the ACPI interface is available, the backlight level can be set at boot using a udev rule:
 +
 
 +
{{hc|/etc/udev/rules.d/81-backlight.rules|<nowiki>
 +
# Set backlight level to 8
 +
SUBSYSTEM=="backlight", ACTION=="add", KERNEL=="acpi_video0", ATTR{brightness}="8"</nowiki>}}
 +
 
 +
{{Note|The systemd-backlight service restores the previous backlight brightness level at boot. To prevent conflicts for the above rules, see [[#systemd-backlight service]].}}
 +
 
 +
{{Tip|To set the backlight depending on power state, see [[Power management#Using a script and an udev rule]] and use your favourite [[#Backlight utilities|backlight utility]] in the script.}}
  
==Switching off the backlight==
+
== Switching off the backlight ==
  
 
Switching off the backlight (for example when one locks the notebook) can be useful to conserve battery energy. Ideally the following command inside of a graphical session should work:
 
Switching off the backlight (for example when one locks the notebook) can be useful to conserve battery energy. Ideally the following command inside of a graphical session should work:
Line 59: Line 84:
 
For example, this can be put to use when closing the notebook lid as outlined in the entry for [[Acpid#Laptop_Monitor_Power_Off|Acipd]].
 
For example, this can be put to use when closing the notebook lid as outlined in the entry for [[Acpid#Laptop_Monitor_Power_Off|Acipd]].
  
 +
== systemd-backlight service ==
  
==Backlight utilities==
+
The [[systemd]] package includes the service {{ic|systemd-backlight@.service}}, which is enabled by default and "static". It saves the backlight brightness level at shutdown and restores it at boot. The service uses the ACPI method described in [[#ACPI]],  generating services for each folder found in {{ic|/sys/class/backlight/}}. For example, if there is a folder named {{ic|acpi_video0}}, it generates a service called {{ic|systemd-backlight@backlight:acpi_video0.service}}. When using other methods of setting the backlight at boot, it is recommended to [[mask]] the service {{ic|systemd-backlight@.service}}.
===xbacklight===
+
You can adjust the backlight through the xorg-server command {{ic|xbacklight}}. The utility is provided by the {{Pkg|xorg-xbacklight}} package in [extra].
+
  
A useful demonstration was posted by [http://www.youtube.com/watch?v=_pi3iKMAJcY gotbletu on YouTube]. He suggests the following commands to adjust the backlight:
+
Some laptops have multiple video cards (e.g. Optimus) and the backlight restoration fails. Try [[systemd#Using units|masking]] an ''instance'' of the service, e.g. {{ic|systemd-backlight@backlight\:acpi_video1}} for {{ic|acpi_video1}}.
  
* brighten up:
+
{{Style|Poor wording, needs to be merged with the previous paragraphs.}}
xbacklight -inc 40
+
  
* dim down:
+
From the systemd-backlight@.service man page:
xbacklight -dec 40
+
  
===xcalib===
+
systemd-backlight understands the following kernel command line parameter:
The program [http://xcalib.sourceforge.net/ xcalib] can be downloaded from [https://aur.archlinux.org/packages.php?ID=10969 AUR] and used to dim the screen. Again, the user gotbletu posted a demonstration on [http://www.youtube.com/watch?v=A9xsvntT6i4 Youtube]. This program can correct gamma, invert colors and reduce contrast, the latter of which we use in this case:
+
  
* dim down:
+
  systemd.restore_state=
  xcalib -co 40 -a
+
  
This program uses ICC technology to interact with X11 and while the screen is dimmed, you may find that the mouse cursor is just as bright as before.
+
Takes a boolean argument. Defaults to "1".
  
===redshift===
+
If "0", does not
The program [http://jonls.dk/redshift/ redshift] in the community repository uses {{ic|randr}} to adjust the screen brightness depending on the time of day and your geographic position. It can also do RGB gamma corrections and set color temperatures. As with {{ic|xcalib}}, this is very much a software solution and the look of the mouse cursor is unaffected. To execute a single quick adjustment of the brightness, try something like this:
+
restore the backlight settings on boot. However, settings will
 +
still be stored on shutdown.
  
redshift -o -l 0:0 -b 0.8 -t 6500:6500
+
== Backlight utilities ==
  
{{Tip|If your longitude is west or your latitude is south, you should input it as negative.
+
=== xbacklight ===
Example for Berkeley, CA:
+
 
  gtk-redshift -l 37.8717:-122.2728
+
Brightness can alternatively be set using the {{Pkg|xorg-xbacklight}} package.
}}
+
 
 +
$ xbacklight -set 50  # sets brightness to 50% of maximum
 +
 
 +
Increments can be used instead of absolute values, for example:
 +
 
 +
$ xbacklight -inc 10  # increase brightness by 10%
 +
$ xbacklight -dec 10  # decrease brightness by 10%
 +
 
 +
Gamma can be set using either the {{Pkg|xorg-xrandr}} or {{Pkg|xorg-xgamma}} package. The following commands create the same effect.
 +
 
 +
$ xrandr --output LVDS1 --gamma 1.0:1.0:1.0
 +
$ xgamma -rgamma 1 -ggamma 1 -bgamma 1
 +
 
 +
{{Tip|These commands can be bound to keyboard keys as described in [[Extra keyboard keys in Xorg]].}}
 +
 
 +
If you get the "No outputs have backlight property" error, it is because xrandr/xbacklight does not choose the right directory in {{ic|/sys/class/backlight}}. You can specify the directory by setting the {{ic|Backlight}} option of the device section in xorg.conf. For instance, if the name of the directory is {{ic|intel_backlight}}, the device section can be configured as follows:
 +
 
 +
{{hc|/etc/X11/xorg.conf|
 +
Section "Device"
 +
    Identifier "Card0"
 +
    Driver      "intel"
 +
    Option      "Backlight"  "intel_backlight"
 +
EndSection}}
 +
 
 +
See {{Bug|27677}} and [https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=651741] for details.
 +
{{Note|This only works with intel. Radeon does not support the RandR backlight property}}
 +
 
 +
=== light ===
 +
 
 +
Light is the successor and C-port of ''LightScript''.
 +
 
 +
[[Install]] {{AUR|light}} for the latest tagged version, or {{AUR|light-git}} for the latest development version. Patches are frequently committed to the git repository so it is recommended to use the {{AUR|light-git}} package.
 +
 
 +
See the [http://haikarainen.github.io/light/ GitHub page] for more information.
 +
 
 +
=== acpilight ===
 +
 
 +
{{AUR|acpilight}} contains an "xbacklight" compatibile utility that uses the sys filesystem to set the display brightness. Since it doesn't use X at all, it can also be used on the console.
 +
 
 +
See the [https://github.com/wavexx/acpilight/ acpilight repository] for more information.
 +
 
 +
=== relight ===
 +
 
 +
[http://xyne.archlinux.ca/projects/relight relight] is available in [http://xyne.archlinux.ca/repos Xyne's repos] and as package {{AUR|relight}} in the [[AUR]]. The package provides {{ic|relight.service}}, a [[systemd]] service to automatically restore previous backlight settings during reboot along using the ACPI method explained above, and ''relight-menu'', a dialog-based menu for selecting and configuring backlights for different screens.
  
===relight===
+
=== setpci (use with great care) ===
[http://xyne.archlinux.ca/projects/relight relight] is available in [http://xyne.archlinux.ca/repos Xyne's repos] and [https://aur.archlinux.org/packages.php?ID=66487 the AUR]. The package provides a service to automatically restore previous backlight settings during reboot along using the ACPI method explained above. The package also contains a dialog-based menu for selecting and configuring backlights for different screens.
+
  
===setpci (use with great care)===
 
 
It is possible to set the register of the graphic card to adjust the backlight. It means you adjust the backlight by manipulating the hardware directly, which can be risky and generally is not a good idea. Not all of the graphic cards support this method.
 
It is possible to set the register of the graphic card to adjust the backlight. It means you adjust the backlight by manipulating the hardware directly, which can be risky and generally is not a good idea. Not all of the graphic cards support this method.
  
Line 99: Line 161:
 
  # setpci -s 00:02.0 F4.B=0
 
  # setpci -s 00:02.0 F4.B=0
  
===Calise===
+
=== Calise ===
 +
 
 
The software [http://calise.sourceforge.net/wordpress/ calise] can be found in AUR.
 
The software [http://calise.sourceforge.net/wordpress/ calise] can be found in AUR.
 
* Stable version: {{AUR|calise}}
 
* Stable version: {{AUR|calise}}
Line 107: Line 170:
 
For more information, calise has its own wiki: [http://calise.sourceforge.net/mediawiki/index.php/Main_Page Calise wiki].
 
For more information, calise has its own wiki: [http://calise.sourceforge.net/mediawiki/index.php/Main_Page Calise wiki].
  
The main features of this program are that it's very precise, very light on resource usage, and with the daemon version (.service file for systemd users available too), it has practically no impact on battery life.
+
The main features of this program are that it is very precise, very light on resource usage, and with the daemon version (.service file for systemd users available too), it has practically no impact on battery life.
  
===brightd===
+
=== brightd ===
Macbook-inspired {{AUR|brightd}} automatically dims (but doesn't put to standby) the screen when there is no user input for some time. A good companion of [[Display Power Management Signaling]] so that the screen doesn't blank out in a sudden.
+
  
== KDE ==
+
Macbook-inspired {{AUR|brightd}} automatically dims (but does not put to standby) the screen when there is no user input for some time. A good companion of [[Display Power Management Signaling]] so that the screen does not blank out in a sudden.
[[KDE]] users can adjust the backlight via System Settings -> Power Management -> Power Profiles.
+
If you want set backlight before kdm just put in /usr/share/config/kdm/Xsetup :
+
  
  xbacklight -inc 10
+
== Color correction ==
 +
 
 +
=== xcalib ===
 +
 
 +
{{Note|''xcalib'' does ''not'' change the backlight power, it just modifies the video LUT table: this means that your battery life will be unaffected by the change. Nevertheless, it could be useful when no backlight control is available (Desktop PCs). Use {{ic|xcalib -clear}} to reset the LUT.}}
 +
 
 +
The package {{AUR|xcalib}} ([http://xcalib.sourceforge.net/ upstream URL]) is available in the [[AUR]] and can be used to dim the screen. A demonstration video is available on [https://www.youtube.com/watch?v=A9xsvntT6i4 YouTube]. This program can correct gamma, invert colors, and reduce contrast, the latter of which we use in this case. For example, to dim down:
 +
 
 +
  $ xcalib -co 40 -a
 +
 
 +
This program uses ICC technology to interact with X11 and while the screen is dimmed, you may find that the mouse cursor is just as bright as before.
 +
 
 +
=== Xflux ===
 +
 
 +
Xflux is the [http://justgetflux.com f.lux] port for the X-Windows system. It fluctuates your screen between blue during the day and yellow or orange at night. This helps you adapt to the time of day and stop staying up late because of your bright computer screen.
 +
 
 +
Various packages exist in the AUR that use ''f.lux''.[https://aur.archlinux.org/packages/?O=0&K=xflux] The "main" package is {{AUR|xflux}} which handles the command line functionality of ''f.lux''. Various daemons exist to handle the automatic startup of the xflux package.
 +
 
 +
=== redshift ===
 +
 
 +
The program [[redshift]] in the official repositories uses {{ic|randr}} to adjust the screen brightness depending on the time of day and your geographic position. It can also do RGB gamma corrections and set color temperatures. As with {{ic|xcalib}}, this is very much a software solution and the look of the mouse cursor is unaffected. To execute a single quick adjustment of the brightness, try something like this:
 +
 
 +
redshift -o -l 0:0 -b 0.8 -t 6500:6500
 +
 
 +
{{Tip|If your longitude is west or your latitude is south, you should input it as negative.
 +
Example for Berkeley, CA:
 +
redshift-gtk -l 37.8717:-122.2728
 +
}}
 +
 
 +
=== NVIDIA settings ===
  
== NVIDIA Settings ==
 
 
Users of [[NVIDIA|NVIDIA's proprietary drivers]] users can change display brightness via the nvidia-settings utility under "X Server Color Correction." However, note that this has absolutely nothing to do with backlight (intensity), it merely adjusts the color output. (Reducing brightness this way is a power-inefficient last resort when all other options fail; increasing brightness spoils your color output completely, in a way similar to overexposed photos.)
 
Users of [[NVIDIA|NVIDIA's proprietary drivers]] users can change display brightness via the nvidia-settings utility under "X Server Color Correction." However, note that this has absolutely nothing to do with backlight (intensity), it merely adjusts the color output. (Reducing brightness this way is a power-inefficient last resort when all other options fail; increasing brightness spoils your color output completely, in a way similar to overexposed photos.)
  
== Backlight PWM modulation frequency (Intel i915 only) ==
+
== Troubleshooting ==
 +
 
 +
=== Backlight PWM modulation frequency (Intel i915 only) ===
 +
 
 
Laptops with LED backlight are known to have screen flicker sometimes. The reason for this, is that it is hard enough to dim LEDs by limiting direct current flowing through. It is easier to control brightness by switching LEDs on and off fast enough.
 
Laptops with LED backlight are known to have screen flicker sometimes. The reason for this, is that it is hard enough to dim LEDs by limiting direct current flowing through. It is easier to control brightness by switching LEDs on and off fast enough.
  
Line 128: Line 219:
 
If you have an Intel i915 GPU, then it may be possible to adjust PWM modulation frequency to eliminate flicker.
 
If you have an Intel i915 GPU, then it may be possible to adjust PWM modulation frequency to eliminate flicker.
  
Install intel-gpu-tools from community repo
+
Install {{Pkg|intel-gpu-tools}} from the official repositories. Get value of the register, that determines PWM modulation frequency
  
# pacman -S intel-gpu-tools
+
{{hc|# intel_reg read 0xC8254|
 +
0xC8254 : 0x12281228
 +
}}
  
Get value of the register, that determines PWM modulation frequency
+
The value returned represents period of PWM modulation. So to increase PWM modulation frequency, value of the register has to be reduced. For example, to double frequency from the previous listing, execute:
  
  # intel_reg_read 0xC8254
+
  # intel_reg write 0xC8254 0x09140914
0xC8254 : 0x12281228
+
 
+
The value returned represents period of PWM modulation. So to increase PWM modulation frequency, value of the register has to be reduced. For example, to double frequency from the previous listing, execute
+
 
+
# intel_reg_write 0xC8254 0x09140914
+
  
 
You can use online calculator to calculate desired value http://devbraindom.blogspot.com/2013/03/eliminate-led-screen-flicker-with-intel.html
 
You can use online calculator to calculate desired value http://devbraindom.blogspot.com/2013/03/eliminate-led-screen-flicker-with-intel.html
  
 
Refer to dedicated topic for details https://bbs.archlinux.org/viewtopic.php?pid=1245913
 
Refer to dedicated topic for details https://bbs.archlinux.org/viewtopic.php?pid=1245913
 +
 +
If you are using the Intel GM45 chipset use address 0x61254 instead of 0xC8254.
 +
 +
=== Inverted Brightness (Intel i915 only) ===
 +
 +
Symptoms:
 +
* after installing {{ic|xf86-video-intel}} systemd-backlight.service turns off the backlight during boot
 +
** possible solution: mask systemd-backlight.service
 +
* switching from X to another VT turns the backlight off
 +
* the brightness keys are inverted (i.e. turning up the brightness makes the screen darker)
 +
 +
This problem may be solved by adding {{ic|i915.invert_brightness&#61;1}} to the list of [[kernel parameters]].
 +
 +
=== sysfs modified but no brightness change ===
 +
 +
{{Note|This behavior and their workarounds have been confirmed on the Dell M6700 with Nvidia K5000m (BIOS version prior to A10) and Clevo P750ZM (Eurocom P5 Pro Extreme) with Nvidia 980m.}}
 +
 +
On some systems, the brighness hotkeys on your keyboard correctly modify the values of the acpi interface in {{ic|/sys/class/backlight/acpi_video0/actual_brightness}} but the brightness of the screen is not changed. Brigthness applets from [[desktop environments]] may also show changes to no effect.
 +
 +
If you have tested the recommended kernel parameters and only {{ic|xbacklight}} works, then you may be facing an incompatibility between your BIOS and kernel driver.
 +
 +
In this case the only solution is to wait for a fix either from the BIOS or GPU driver manufacturer.
 +
 +
A workaround is to use the inotify kernel api to trigger {{ic|xbacklight}} each time the value of {{ic|/sys/class/backlight/acpi_video0/actual_brightness}} changes.
 +
 +
First [[install]] {{Pkg|inotify-tools}}. Then create a script around inotify that will be launched upon each boot or through [[autostart]].
 +
 +
{{hc|/usr/local/bin/xbacklightmon|<nowiki>
 +
#!/bin/sh
 +
 +
path=/sys/class/backlight/acpi_video0
 +
 +
luminance() {
 +
    read -r level < "$path"/actual_brightness
 +
    factor=$((max / 100))
 +
    printf '%d\n' "$((level / factor))"
 +
}
 +
 +
read -r max < "$path"/max_brightness
 +
 +
xbacklight -set "$(luminance)"
 +
 +
inotifywait -me modify --format '' "$path"/actual_brightness | while read; do
 +
    xbacklight -set "$(luminance)"
 +
done
 +
</nowiki>}}

Latest revision as of 16:21, 30 April 2016

Screen brightness might be tricky to control. On some machines physical hardware switches are missing and software solutions may not work well. However, it is generally possible; be sure to use a method that works for your hardware.

There are many ways to adjust the screen backlight of a monitor, laptop or integrated panel (such as the iMac) using software, but depending on hardware and model, sometimes only some options are available. This article aims to summarize all possible ways to adjust the backlight.

Overview

There are many ways to control brightness. According to this discussion and this wiki page the control method can be divided into these categories:

  • brightness is controlled by vendor-specified hotkey and there is no interface for the OS to adjust the brightness.
  • brightness is controlled by either the ACPI or the graphic driver.
  • brightness is controlled by HW register through setpci.

All methods are exposed to the user through /sys/class/backlight and xrandr/xbacklight can choose one method to control brightness. It is still not very clear which one xbacklight prefers by default.

ACPI

The brightness of the screen backlight is adjusted by setting the power level of the backlight LEDs or cathodes. The power level can often be controlled using the ACPI kernel module for video. An interface to this module is provided via a folder in the sysfs at /sys/class/backlight.

The name of the folder depends on the graphics card model.

# ls /sys/class/backlight/
acpi_video0

In this case, the backlight is managed by an ATI graphics card. In the case of an Intel card it is called intel_backlight. In the following example, acpi_video0 is used.

The directory contains the following files and folders:

# ls /sys/class/backlight/acpi_video0/
actual_brightness  brightness         max_brightness     subsystem/    uevent             
bl_power           device/            power/             type

The maximum brightness can be found by reading from max_brightness, which is often 15.

# cat /sys/class/backlight/acpi_video0/max_brightness
15

The brightness can be set by writing a number to brightness. Attempting to set a brightness greater than the maximum results in an error.

# tee /sys/class/backlight/acpi_video0/brightness <<< 5

Kernel command-line options

Sometimes, ACPI does not work well due to different motherboard implementations and ACPI quirks. This includes some laptops with dual graphics (e.g. Nvidia/Radeon dedicated GPU with Intel/AMD integrated GPU). On Nvidia Optimus laptops, the kernel parameter nomodeset can interfere with the ability to adjust the backlight. Additionally, ACPI sometimes needs to register its own acpi_video0 backlight even if one already exists (such as intel_backlight), which can be done by adding one of the following kernel parameters in your bootloader:

acpi_backlight=video
acpi_backlight=vendor
acpi_backlight=native
acpi_backlight=none
Note:
  • If you find that changing the acpi_video0 backlight does not actually change the brightness, you may need to use acpi_backlight=none.
  • On an Asus notebooks you might also need to do:
    # modprobe asus-nb-wmi
  • Disabling legacy boot on Dell XPS13 breaks backlight support.

Udev rule

If the ACPI interface is available, the backlight level can be set at boot using a udev rule:

/etc/udev/rules.d/81-backlight.rules
# Set backlight level to 8
SUBSYSTEM=="backlight", ACTION=="add", KERNEL=="acpi_video0", ATTR{brightness}="8"
Note: The systemd-backlight service restores the previous backlight brightness level at boot. To prevent conflicts for the above rules, see #systemd-backlight service.
Tip: To set the backlight depending on power state, see Power management#Using a script and an udev rule and use your favourite backlight utility in the script.

Switching off the backlight

Switching off the backlight (for example when one locks the notebook) can be useful to conserve battery energy. Ideally the following command inside of a graphical session should work:

sleep 1 && xset dpms force off

The backlight should switch on again on mouse movement or keyboard input. If the previous command does not work, there is a chance that vbetool works. Note, however, that in this case the backlight must be manually activated again. The command is as follows:

vbetool dpms off

To activate the backlight again:

vbetool dpms on

For example, this can be put to use when closing the notebook lid as outlined in the entry for Acipd.

systemd-backlight service

The systemd package includes the service systemd-backlight@.service, which is enabled by default and "static". It saves the backlight brightness level at shutdown and restores it at boot. The service uses the ACPI method described in #ACPI, generating services for each folder found in /sys/class/backlight/. For example, if there is a folder named acpi_video0, it generates a service called systemd-backlight@backlight:acpi_video0.service. When using other methods of setting the backlight at boot, it is recommended to mask the service systemd-backlight@.service.

Some laptops have multiple video cards (e.g. Optimus) and the backlight restoration fails. Try masking an instance of the service, e.g. systemd-backlight@backlight\:acpi_video1 for acpi_video1.

Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements.Tango-edit-clear.png

Reason: Poor wording, needs to be merged with the previous paragraphs. (Discuss in Talk:Backlight#)

From the systemd-backlight@.service man page:

systemd-backlight understands the following kernel command line parameter:

systemd.restore_state=

Takes a boolean argument. Defaults to "1".

If "0", does not restore the backlight settings on boot. However, settings will still be stored on shutdown.

Backlight utilities

xbacklight

Brightness can alternatively be set using the xorg-xbacklight package.

$ xbacklight -set 50  # sets brightness to 50% of maximum

Increments can be used instead of absolute values, for example:

$ xbacklight -inc 10  # increase brightness by 10%
$ xbacklight -dec 10  # decrease brightness by 10%

Gamma can be set using either the xorg-xrandr or xorg-xgamma package. The following commands create the same effect.

$ xrandr --output LVDS1 --gamma 1.0:1.0:1.0
$ xgamma -rgamma 1 -ggamma 1 -bgamma 1
Tip: These commands can be bound to keyboard keys as described in Extra keyboard keys in Xorg.

If you get the "No outputs have backlight property" error, it is because xrandr/xbacklight does not choose the right directory in /sys/class/backlight. You can specify the directory by setting the Backlight option of the device section in xorg.conf. For instance, if the name of the directory is intel_backlight, the device section can be configured as follows:

/etc/X11/xorg.conf
Section "Device"
    Identifier  "Card0"
    Driver      "intel"
    Option      "Backlight"  "intel_backlight"
EndSection

See FS#27677 and [1] for details.

Note: This only works with intel. Radeon does not support the RandR backlight property

light

Light is the successor and C-port of LightScript.

Install lightAUR for the latest tagged version, or light-gitAUR for the latest development version. Patches are frequently committed to the git repository so it is recommended to use the light-gitAUR package.

See the GitHub page for more information.

acpilight

acpilightAUR contains an "xbacklight" compatibile utility that uses the sys filesystem to set the display brightness. Since it doesn't use X at all, it can also be used on the console.

See the acpilight repository for more information.

relight

relight is available in Xyne's repos and as package relightAUR in the AUR. The package provides relight.service, a systemd service to automatically restore previous backlight settings during reboot along using the ACPI method explained above, and relight-menu, a dialog-based menu for selecting and configuring backlights for different screens.

setpci (use with great care)

It is possible to set the register of the graphic card to adjust the backlight. It means you adjust the backlight by manipulating the hardware directly, which can be risky and generally is not a good idea. Not all of the graphic cards support this method.

When using this method, you need to use lspci first to find out where your graphic card is.

# setpci -s 00:02.0 F4.B=0

Calise

The software calise can be found in AUR.

It basically computes ambient brightness, and set screen's correct backlight, simply making captures from the webcam, for laptop without light sensor. For more information, calise has its own wiki: Calise wiki.

The main features of this program are that it is very precise, very light on resource usage, and with the daemon version (.service file for systemd users available too), it has practically no impact on battery life.

brightd

Macbook-inspired brightdAUR automatically dims (but does not put to standby) the screen when there is no user input for some time. A good companion of Display Power Management Signaling so that the screen does not blank out in a sudden.

Color correction

xcalib

Note: xcalib does not change the backlight power, it just modifies the video LUT table: this means that your battery life will be unaffected by the change. Nevertheless, it could be useful when no backlight control is available (Desktop PCs). Use xcalib -clear to reset the LUT.

The package xcalibAUR (upstream URL) is available in the AUR and can be used to dim the screen. A demonstration video is available on YouTube. This program can correct gamma, invert colors, and reduce contrast, the latter of which we use in this case. For example, to dim down:

$ xcalib -co 40 -a

This program uses ICC technology to interact with X11 and while the screen is dimmed, you may find that the mouse cursor is just as bright as before.

Xflux

Xflux is the f.lux port for the X-Windows system. It fluctuates your screen between blue during the day and yellow or orange at night. This helps you adapt to the time of day and stop staying up late because of your bright computer screen.

Various packages exist in the AUR that use f.lux.[2] The "main" package is xfluxAUR which handles the command line functionality of f.lux. Various daemons exist to handle the automatic startup of the xflux package.

redshift

The program redshift in the official repositories uses randr to adjust the screen brightness depending on the time of day and your geographic position. It can also do RGB gamma corrections and set color temperatures. As with xcalib, this is very much a software solution and the look of the mouse cursor is unaffected. To execute a single quick adjustment of the brightness, try something like this:

redshift -o -l 0:0 -b 0.8 -t 6500:6500
Tip: If your longitude is west or your latitude is south, you should input it as negative.

Example for Berkeley, CA:

redshift-gtk -l 37.8717:-122.2728 

NVIDIA settings

Users of NVIDIA's proprietary drivers users can change display brightness via the nvidia-settings utility under "X Server Color Correction." However, note that this has absolutely nothing to do with backlight (intensity), it merely adjusts the color output. (Reducing brightness this way is a power-inefficient last resort when all other options fail; increasing brightness spoils your color output completely, in a way similar to overexposed photos.)

Troubleshooting

Backlight PWM modulation frequency (Intel i915 only)

Laptops with LED backlight are known to have screen flicker sometimes. The reason for this, is that it is hard enough to dim LEDs by limiting direct current flowing through. It is easier to control brightness by switching LEDs on and off fast enough.

However, frequency of the switching (so-called PWM modulation frequency) is not high enough actually, and some people may notice flicker either explicitly or by feeling headache and eyestrain.

If you have an Intel i915 GPU, then it may be possible to adjust PWM modulation frequency to eliminate flicker.

Install intel-gpu-tools from the official repositories. Get value of the register, that determines PWM modulation frequency

# intel_reg read 0xC8254
0xC8254 : 0x12281228

The value returned represents period of PWM modulation. So to increase PWM modulation frequency, value of the register has to be reduced. For example, to double frequency from the previous listing, execute:

# intel_reg write 0xC8254 0x09140914

You can use online calculator to calculate desired value http://devbraindom.blogspot.com/2013/03/eliminate-led-screen-flicker-with-intel.html

Refer to dedicated topic for details https://bbs.archlinux.org/viewtopic.php?pid=1245913

If you are using the Intel GM45 chipset use address 0x61254 instead of 0xC8254.

Inverted Brightness (Intel i915 only)

Symptoms:

  • after installing xf86-video-intel systemd-backlight.service turns off the backlight during boot
    • possible solution: mask systemd-backlight.service
  • switching from X to another VT turns the backlight off
  • the brightness keys are inverted (i.e. turning up the brightness makes the screen darker)

This problem may be solved by adding i915.invert_brightness=1 to the list of kernel parameters.

sysfs modified but no brightness change

Note: This behavior and their workarounds have been confirmed on the Dell M6700 with Nvidia K5000m (BIOS version prior to A10) and Clevo P750ZM (Eurocom P5 Pro Extreme) with Nvidia 980m.

On some systems, the brighness hotkeys on your keyboard correctly modify the values of the acpi interface in /sys/class/backlight/acpi_video0/actual_brightness but the brightness of the screen is not changed. Brigthness applets from desktop environments may also show changes to no effect.

If you have tested the recommended kernel parameters and only xbacklight works, then you may be facing an incompatibility between your BIOS and kernel driver.

In this case the only solution is to wait for a fix either from the BIOS or GPU driver manufacturer.

A workaround is to use the inotify kernel api to trigger xbacklight each time the value of /sys/class/backlight/acpi_video0/actual_brightness changes.

First install inotify-tools. Then create a script around inotify that will be launched upon each boot or through autostart.

/usr/local/bin/xbacklightmon
#!/bin/sh

path=/sys/class/backlight/acpi_video0

luminance() {
    read -r level < "$path"/actual_brightness
    factor=$((max / 100))
    printf '%d\n' "$((level / factor))"
}

read -r max < "$path"/max_brightness

xbacklight -set "$(luminance)"

inotifywait -me modify --format '' "$path"/actual_brightness | while read; do
    xbacklight -set "$(luminance)"
done