Contrôle de luminosité des écrans LCD

La luminosité des écrans LCD est variable par le biais de la puissance appliquée sur le rétroéclairage. On suppose dans ce qui suit, que le réglage de la luminosité n'est pas sous le contrôle exclusif du bios et est accessible au système d'exploitation à travers sysfs

Sommaire

Références :

1- sysfs

ls /sys/class/backlight/
intel_backlight

Le nom du répertoire est fonction du type d'afficheur, intel, radeon, .... Dans le cas présent, il s'agit d'une carte intel et le nom du répertoire est intel_backlight.

$ ls /sys/class/backlight/intel_backlight/
actual_brightness brightness max_brightness subsystem uevent
bl_power device power type
$ cat /sys/class/backlight/intel_backlight/max_brightness
4882
$ cat /sys/class/backlight/intel_backlight/actual_brightness
2441

Dans l'exemple ci-dessus, la luminosité est donc réglée à 50% du maximum (4882/2441).

# udevadm info -a -p /sys/class/backlight/intel_backlight |head -16

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

looking at device '/devices/pci0000:00/0000:00:02.0/drm/card0/card0-LVDS-1/intel_backlight':
KERNEL=="intel_backlight"
SUBSYSTEM=="backlight"
DRIVER==""
ATTR{max_brightness}=="4882"
ATTR{type}=="raw"
ATTR{brightness}=="2441"
ATTR{bl_power}=="0"
ATTR{actual_brightness}=="2441"

2 - Réglage de la luminosité

2.1 - En ligne de commande

Pour modifier la luminosité en ligne de commande, rentrer la nouvelle valeur (par exemple 2800) dans le fichier brightness :

# echo 2800 >/sys/class/backlight/intel_backlight/brightness

Vérification :

$ cat /sys/class/backlight/intel_backlight/actual_brightness
2800

2.2 - Via les touches de fonction

Vérifier que le réglage de la luminosité fonctionne à travers les touches de fonction dédiées, en mode console et en mode graphique.

La présence d'un pilote spécifique à la plateforme peut-être nécessaire pour que les touches de fonction soient prises en compte.

Note : Dans l'environnement graphique X11, les codes de touche "standards" pour le réglage de la luminosité sont :

xmodmap -pke |grep -i brightness
keycode 232 = XF86MonBrightnessDown NoSymbol XF86MonBrightnessDown
keycode 233 = XF86MonBrightnessUp NoSymbol XF86MonBrightnessUp
keycode 237 = XF86KbdBrightnessDown NoSymbol XF86KbdBrightnessDown
keycode 238 = XF86KbdBrightnessUp NoSymbol XF86KbdBrightnessUp

Ils peuvent ou non être utilisés par les touches de fonction.

2.3 - Mémorisation du réglage par systemd

Par défaut, lors de l'arrêt du système, systemd mémorise la valeur courante du rétroéclairage et la restitue lors du redémarrage. Le nom du service est fonction de la carte d'affichage. Dans le cas d'une carte intel, il s'agit de systemd-backlight@backlight:intel_backlight.service :

# systemctl status systemd-backlight@backlight:intel_backlight.service 
● systemd-backlight@backlight:intel_backlight.service - Load/Save Screen Backlight Brightness of backlight:intel_backlight
Loaded: loaded (/lib/systemd/system/systemd-backlight@.service; static)
Active: active (exited) since lun. 2016-12-26 18:33:15 CET; 11s ago
Docs: man:systemd-backlight@.service(8)
....

2.4 - Réglage par udev

Pour fixer la valeur de la luminosité à une valeur fixe, lors du démarrage du PC et / ou de la connexion / déconnexion du secteur et passage sur batterie :

# systemctl mask systemd-backlight@backlight:intel_backlight.service 
Created symlink from /etc/systemd/system/systemd-backlight@backlight:intel_backlight.service to /dev/null
# udevadm monitor
monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

KERNEL[3254.196010] change /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/ACPI0003:00/power_supply/AC0 (power_supply)
UDEV [3254.197457] change /devices/LNXSYSTM:00/LNXSYBUS:00/PNP0A08:00/ACPI0003:00/power_supply/AC0 (power_supply)
# cat /etc/udev/rules.d/75-backlight.rules

# Fixer la valeur au démarrage
SUBSYSTEM=="backlight", ACTION=="add",ATTR{brightness}="2441"

# Fixer la valeur en cas de modification de l'alimentation
SUBSYSTEM=="power_supply", ACTION=="change", RUN+="/bin/sh -c 'echo 2441 >/sys/$

Pour faire prendre en compte la nouvelle règle sans redémarrer le système :

# udevadm control --reload
# udevadm trigger
$ cat /sys/class/backlight/intel_backlight/actual_brightness
2441