Rétro-éclairage du clavier

J’utilise un portable Asus Zenbook UX410UA-GV351R.

Les touches F3 & F4, servant à régler le rétro-éclairage du clavier, ne fonctionnent pas.

Si je fais Fn+F3 ou Fn+F4, le logo du rétro-éclairage s’affiche au centre de l’écran, mais le niveau du rétro-éclairage ne change pas.

J’ai cherché un peu, et j’ai changé la ligne GRUB_CMDLINE_LINUX_DEFAULT="quiet" du fichier /etc/default/grub en GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi_osi=" : cela a eu pour effet de désactiver le réglage de la luminosité de l’écran, et n’a pas arrangé mon problème.

Comment faire pour contrôler cette luminosité ?


Pour info :

$ uname -a
Linux giljourdan 4.18.0-2-amd64 #1 SMP Debian 4.18.10-2 (2018-10-07) x86_64 GNU/Linux

Bonjour,

C’est soit égal à 0 ou 1 voire une autre valeur mais là, le = tombe sur rien.

J’ai essayé acpi_osi=0 et acpi_osi=1 : cela ne change rien. Mais les autres touches de fonction (son et luminosité de l’écran) fonctionnent toujours : c’est déjà ça.

Alors des recherches indiquent que l’on peut utiliser Windows ou Linux comme paramètre.
Les résultats ne sont pas toujours ceux escomptés ou alors complets.
Et ça parle un peu d’erreurs ACPI subies.

Je laisse la suite à d’autres qui ont connu ce type de réglage.

acpi_osi=       [HW,ACPI] Modify list of supported OS interface strings
                        acpi_osi="string1"      # add string1
                        acpi_osi="!string2"     # remove string2
                        acpi_osi=!*             # remove all strings
                        acpi_osi=!              # disable all built-in OS vendor
                                                  strings
                        acpi_osi=!!             # enable all built-in OS vendor
                                                  strings
                        acpi_osi=               # disable all strings

http://redsymbol.net/linux-kernel-boot-parameters/

J’ai testé acpi_osi = linux et ça ne change rien.

En revanche, je constate ne pas avoir de dossier /etc/acpi : étrange, non ?

acpi_osi=Linux me semble plus correct.

root@n40l:~# ls /etc/acpi/
events	powerbtn-acpi-support.sh
root@n40l:~# 

Je ne sais pas quoi te dire.

root@n40l:~# apt-cache policy acpi
acpi:
  Installé : 1.7-1+b1
  Candidat : 1.7-1+b1
 Table de version :
 *** 1.7-1+b1 800
        800 http://ftp2.fr.debian.org/debian stretch/main amd64 Packages
        100 /var/lib/dpkg/status
root@n40l:~# apt-cache policy acpid
acpid:
  Installé : 1:2.0.28-1+b1
  Candidat : 1:2.0.28-1+b1
 Table de version :
 *** 1:2.0.28-1+b1 800
        800 http://ftp2.fr.debian.org/debian stretch/main amd64 Packages
        100 /var/lib/dpkg/status
root@n40l:~#

J’ai un autre portable : un Acer Swift 5 SF514-51-53WW, dont le réglage de la luminosité du clavier fonctionne parfaitement.

Je constate que son fichier /etc/default/grub n’a que la ligne GRUB_CMDLINE_LINUX_DEFAULT="quiet".

Par ailleurs, acpid n’est installé sur aucun de ces portables :

$ sudo apt-cache policy acpid
acpid:
  Installé : (aucun)
  Candidat : 1:2.0.28-1+b1
 Table de version :
     1:2.0.28-1+b1 700
        700 http://ftp.fr.debian.org/debian buster/main amd64 Packages
        600 http://http.us.debian.org/debian unstable/main amd64 Packages

Du coup, je me demande : dois-je installer acpid pour tenter de faire fonctionner le contrôleur du rétro-éclairage du clavier ? Ou chercher une autre solution, puisque l’expérience prouve que cela peut fonctionner sans acpid ?

Mais ? Si un ordi fonctionne sans acpid, il fonctionne avec quoi ?

Je n’y comprends rien, mais il y a des modules acpi actifs :

$ lsmod | grep acpi
snd_soc_acpi           16384  1 snd_soc_skl
acpi_als               16384  0
kfifo_buf              16384  1 acpi_als
industrialio           81920  2 acpi_als,kfifo_buf
acpi_thermal_rel       16384  1 int3400_thermal
acpi_pad               24576  0

Par ailleurs, et au cas où, quelques infos sur le hardware :

$ lspci
00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers (rev 08)
00:02.0 VGA compatible controller: Intel Corporation UHD Graphics 620 (rev 07)
00:04.0 Signal processing controller: Intel Corporation Skylake Processor Thermal Subsystem (rev 08)
00:14.0 USB controller: Intel Corporation Sunrise Point-LP USB 3.0 xHCI Controller (rev 21)
00:14.2 Signal processing controller: Intel Corporation Sunrise Point-LP Thermal subsystem (rev 21)
00:15.0 Signal processing controller: Intel Corporation Sunrise Point-LP Serial IO I2C Controller #0 (rev 21)
00:15.1 Signal processing controller: Intel Corporation Sunrise Point-LP Serial IO I2C Controller #1 (rev 21)
00:15.2 Signal processing controller: Intel Corporation Sunrise Point-LP Serial IO I2C Controller #2 (rev 21)
00:16.0 Communication controller: Intel Corporation Sunrise Point-LP CSME HECI #1 (rev 21)
00:17.0 SATA controller: Intel Corporation Sunrise Point-LP SATA Controller [AHCI mode] (rev 21)
00:1c.0 PCI bridge: Intel Corporation Sunrise Point-LP PCI Express Root Port (rev f1)
00:1c.7 PCI bridge: Intel Corporation Sunrise Point-LP PCI Express Root Port #8 (rev f1)
00:1f.0 ISA bridge: Intel Corporation Intel(R) 100 Series Chipset Family LPC Controller/eSPI Controller - 9D4E (rev 21)
00:1f.2 Memory controller: Intel Corporation Sunrise Point-LP PMC (rev 21)
00:1f.3 Audio device: Intel Corporation Sunrise Point-LP HD Audio (rev 21)
00:1f.4 SMBus: Intel Corporation Sunrise Point-LP SMBus (rev 21)
02:00.0 Network controller: Intel Corporation Wireless 8265 / 8275 (rev 78)

En fait, les packages acpi et acpid n’étaient pas installés. Ils le sont à présent, et j’ai récupéré un dossier /etc/acpi. En voici le contenu :

$ ls /etc/acpi/
always-mute.sh              ejectbtn.sh      lid.sh                    power.sh             sonybright.sh     voldownbtn.sh
asus-keyboard-backlight.sh  events           mutebtn.sh                sleep_suspendbtn.sh  tosh-wireless.sh  volupbtn.sh
asus-wireless.sh            ibm-wireless.sh  powerbtn-acpi-support.sh  sleep_suspend.sh     undock.sh

Ça me plaît beaucoup. Le fichier /etc/acpi/asus-keyboard-backlight.sh contient ceci :

$ cat /etc/acpi/asus-keyboard-backlight.sh 
#!/bin/sh

# this directory is a symlink on my machine:
KEYS_DIR=/sys/class/leds/asus\:\:kbd_backlight

test -d $KEYS_DIR || exit 0

MIN=0
MAX=$(cat $KEYS_DIR/max_brightness)
VAL=$(cat $KEYS_DIR/brightness)

if [ "$1" = down ]; then
	VAL=$((VAL-1))
else
	VAL=$((VAL+1))
fi

if [ "$VAL" -lt $MIN ]; then
	VAL=$MIN
elif [ "$VAL" -gt $MAX ]; then
	VAL=$MAX
fi

echo $VAL > $KEYS_DIR/brightness

J’ai bien un répertoire /sys/class/leds/ :

$ ls /sys/class/leds/
asus::kbd_backlight  asus::lightbar  asus-wireless::airplane  input0::capslock  input0::numlock  input0::scrolllock  phy0-led

Si je tape echo 0 | sudo tee /sys/class/leds/asus::kbd_backlight/brightness, le rétroéclairage du clavier est coupé ! Et je le réactive avec echo 1 | etc., ou echo 2, ou echo 3 selon la luminosité désirée.

Je n’ai plus qu’à faire correspondre ces commandes aux touches F3 et F4 !

Dans /etc/acpi/events/, j’ai ceci :

$ ls /etc/acpi/events/
ac                            asus-wireless-on    lidbtn                 sony-eject        suspendbtn            thinkpad-wireless-wlan
asus-keyboard-backlight-down  asus-wireless-wlan  powerbtn-acpi-support  sony-mute         thinkpad-cmos         tosh-wireless
asus-keyboard-backlight-up    battery             sleepbtn               sony-sleep        thinkpad-mute
asus-media-eject              ibm-wireless        sony-brightness-down   sony-volume-down  thinkpad-volume-down
asus-wireless-off             lenovo-undock       sony-brightness-up     sony-volume-up    thinkpad-volume-up

Le fichier /etc/acpi/events/asus-keyboard-backlight-down contient ceci :

$ cat /etc/acpi/events/asus-keyboard-backlight-down 
# /etc/acpi/events/asus-keyboard-backlight-down
# This is called when the user presses the key brightness 
# down button and calls /etc/acpi/asus-keyboard-backlight.sh for
# further processing.

event=hotkey ATKD 000000c5
action=/etc/acpi/asus-keyboard-backlight.sh down

Je teste donc la touche F3 à l’aide de la commande acpi_listen :

$ acpi_listen
 0B3CBB35-E3C2-45� 000000ff 00000000

Problème : la touche F4 renvoie exactement la même valeur, à savoir 0B3CBB35-E3C2-45� 000000ff 00000000 (et le caractère ne me dit rien de bon). Et cette valeur ne correspond pas à celle requise par le script, à savoir hotkey ATKD 000000c5. Comment modifier cela ?

J’ai testé avec acpi_listen des touches qui fonctionnent :

$ acpi_listen
button/volumeup VOLUP 00000080 00000000 K
button/volumedown VOLDN 00000080 00000000 K

Dans /etc/acpi/ j’ai trouvé le script contrôlant l’augmentation du volume : volupbtn.sh :

#!/bin/sh

test -f /usr/share/acpi-support/key-constants || exit 0

. /usr/share/acpi-support/key-constants
acpi_fakekey $KEY_VOLUMEUP

J’ai donc ouvert le fichier /usr/share/acpi-support/key-constants et cherché ce qui correspondait au volume :

$ emacs /usr/share/acpi-support/key-constants
...
KEY_VOLUMEDOWN=114
KEY_VOLUMEUP=115
...

J’ai ensuite lancé xev pour voir ce que renvoyaient ces touches, et je n’ai rien trouvé de correspondant : nulle valeur 115, nulle key volumeup. Flop.

Mais ce qui m’étonne, c’est que presser les touches Fn + F3 genère l’affichage à l’écran du pictogramme correspondant au réglage de luminosité du clavier : cela prouve bien que le système détecte un événement quelconque, non ?

Bonjour Pathe

Les évènements des touches multimédia spécifiques à ma machine
sont détectés et gérés par asus-nb-wmi


ACPI n’est pas non plus installé sur ma machine ASUS G53SW
et les raccourcis clavier Fn+F3 et Fn+F3
permettent de modifier la luminosité du rétro-éclairage du clavier de ma machine


xev détecte les événements clavier au niveau du serveur X (serveur graphique)

Mais sur ta machine, les touches qui sont utilisées en combinaison avec la touche Fn
sont des touches spécifiques à ta machine ASUS qui sont gérées à un niveau matériel
inaccessible à un quelconque système d’exploitation qui chercherais à accéder au clavier
en utilisant la méthode standardisée


Il devrait être possible d’accéder au rétro-éclairage du clavier depuis le compte rooten envoyant une valeur numérique vers les liens qui ont été associés à ce matériel.

Sur mon PC portable ASUS G53SW la valeur maximum qu’il est possible d’envoyer
est retournée par la ligne de commande suivante :

root@debg53sw:~# cat /sys/class/leds/asus::kbd_backlight/max_brightness
3
root@debg53sw:~# 

Je peux lire la valeur actuelle du rétro-éclairage
en lançant la ligne de commande suivante :

root@debg53sw:~# cat /sys/class/leds/asus::kbd_backlight/brightness
3
root@debg53sw:~# 

et je peux modifier cette valeur
en lançant une des lignes de commandes suivantes :

root@debg53sw:~# echo 0 > /sys/class/leds/asus::kbd_backlight/brightness
root@debg53sw:~# echo 1 > /sys/class/leds/asus::kbd_backlight/brightness
root@debg53sw:~# echo 2 > /sys/class/leds/asus::kbd_backlight/brightness
root@debg53sw:~# echo 3 > /sys/class/leds/asus::kbd_backlight/brightness

Est-ce que tu obtiens ces retours avec un appui sur la seule touche F3 ou F4
ou alors avec la combinaison des touches Fn+F3 ou Fn+F4 ?

C’est la combinaison de la touche Fn et des touches F3 ou F4 qui donne ce résultat.

Et oui, je peux m’en sortir avec
# echo 3 > /sys/class/leds/asus::kbd_backlight/brightness
; mais un raccourci clavier serait quand même plus pratique.

Pis ça m’intéresserait de comprendre ce qui se passe.

en lançant plusieurs fois de suite, depuis le compte root
la ligne de commande suivante,
ça devrait faire augmenter la luminosité du rétro-éclairage

/etc/acpi/asus-keyboard-backlight.sh

et la ligne de commande suivante devrait en faire diminuer la luminosité

/etc/acpi/asus-keyboard-backlight.sh down

Il faudrait voir ce que retourne
la ligne de commande suivante

acpi_listen | hd

quand on appuie ensuite sur Fn+F3
puis sur Fn+F4


Je ne sais pas comment rechercher ce qui déclenche l’affichage
du logo du rétro-éclairage (cité dans ton premier message de ce fil de discussion)
qui s’affiche au centre de l’écran,
mais affiche-t-il un curseur correspondant à l’augmentation ou la diminution d’une valeur ?

Hélas non.

En appuyant sur Fn+F4 :

$ acpi_listen | hd
00000000  20 30 42 33 43 42 42 33  35 2d 45 33 43 32 2d 34  | 0B3CBB35-E3C2-4|
00000010  35 ff 20 30 30 30 30 30  30 66 66 20 30 30 30 30  |5. 000000ff 0000|

Et sur Fn+F3 :

$ acpi_listen | hd
00000000  20 30 42 33 43 42 42 33  35 2d 45 33 43 32 2d 34  | 0B3CBB35-E3C2-4|
00000010  35 ff 20 30 30 30 30 30  30 66 66 20 30 30 30 30  |5. 000000ff 0000|

… ça m’a l’air assez similaire.

ce sont effectivement exactement les mêmes retours.
On aura juste appris que le caractère qui ne pouvait pas être représenté a pour code ASCII 255 <=> ff en hexadecimal.

Le problème reste le même : que mettre dans le champ event qui pourrait correspondre à ce que la commande acpi_listen a retourné ?

Car, même si les deux combinaisons de touches retournent la même chose,
si on pouvait faire en sorte de déclencher le lancement d’un script,
il suffirait de faire faire à ce script une boucle de d’incrémentation suivie d’une décrémentation.

Oui, une boucle serait très bien : il n’y a que quatre niveaux d’illumination, ça suffit amplement.

Mais comment faire ?

Par ailleurs, j’ai un peu cherché, mais je ne vois pas comment signaler ce dysfonctionnement aux développeurs de asus-nb-wmi. C’est curieux : je croyais me souvenir que github permettait justement cela.

Bon, ben… croyez-moi si vous voulez, mais je viens de ré-essayer les boutons du clavier permettant de régler la luminosité du clavier et ILS FONCTIONNENT !

Je ne comprends pas pourquoi. Mais plus besoin de echo 0 > /sys/class/leds/asus::kbd_backlight/brightness !