Backlight
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.
Contents
Overview
There are many ways to control brightness. According to this discussion and this wiki page [1] the control method could 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/
intel_backlight
A backlight to adjust example: is managed by an Intel graphics card. It is called acpi_video0
on an ATI card. In the following example, acpi_video0
is used.
The directory contains the following files and folders:
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.
/sys/class/backlight/acpi_video0/max_brightness
15
The brightness can be set by writing a number to brightness
. It is not possible to go any higher than the maximum brightness.
# 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 register its own acpi_video0
backlight even if one already exists (such as intel_backlight
), which results in non working backlight keys. You can try adding the following kernel parameters in your bootloader to stop ACPI from registering its own backlight interface if one already exists:
video.use_native_backlight=1
If that does not work, you can try to adjust the list of supported OS interfaces:
acpi_osi="!Windows 2012"
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"
The systemd-backlight service restores the previous backlight brightness level at boot, whereas this rule sets it to a fixed value. If you want to use this rule, it is necessary to mask the system-backlight service, as explained in #systemd-backlight service.
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 Backlight#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.
Backlight utilities
xbacklight
You can adjust the backlight through the xorg-server command xbacklight
. The utility is provided by the xorg-xbacklight package in the extra repository.
A useful demonstration was posted by gotbletu on YouTube. He suggests the following commands to adjust the backlight up and down:
xbacklight -inc 40 xbacklight -dec 40
power-backlight
Set screen backlight brightness dependent on power source type; with udev rule backlight is adjusted on change of power source. Requires graphic driver support for ACPI in /sys/class/backlight
. Install with the AUR package power-backlight-git.
light
Light is a program used to easily control a screens backlight-controllers. It is the successor of LightScript, and is also its official C-port.
Light has 2 different packages on the AUR, light for the latest tagged version, or light-git for the absolutely latest version with the most features. Patches are frequently committed to the git repository so it is recommended to use the light-git package to make sure you have the latest features/bug-fixes.
More information can be found on the GitHub page.
relight
relight is available in Xyne's repos and as package relight 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.
- Stable version: calise
- Development version: calise-git
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 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
KDE users can adjust the backlight via System Settings > Power Management > Energy Saving. If you want to set backlight before kdm just put in /usr/share/config/kdm/Xsetup :
xbacklight -inc 10
Color correction
xcalib
The package xcalib (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.
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
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.)
Specific models
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.