J’ai récemment fait l’acquisition d’un nouveau PC portable de l’excellent fabriquant portugais Obsidian-PC qui propose des machines basées sur des barebones Clevo. Mon choix s’est porté sur le nouveau modèle N151ZU (le même que le 150 en finition aluminium). J’ai rencontré une petite difficulté car le rétro-éclairage du clavier est en bleu par défaut et Obsidian ne fournit pas encore d’utilitaire Linux pour le modifier (contrairement à Windows pour lequel ils fournissent d’excellents utilitaires qui font références en la matière). Après quelques recherches, je suis tombé sur ce dépôt github de Tuxedo qui propose les sources d’un module d’extension du noyau pour ses machines. Il s’avère que ce code marche très bien avec ma machine et j’imagine que ça doit être le cas avec toutes machines basées sur le N150ZU ou N151ZU de Clevo. Obsidian m’a d’ailleurs confirmé travailler sur un code similaire à celui de Tuxedo.

Installer Tuxedo backlit kernel module depuis les sources

La première étape consiste à compiler le module d’extension du kernel, fournit par Tuxedo. Comme je suis sous eOS (elementary), j’ai choisi d’utiliser DKMS pour charger le module. Dans la doc Tuxedo, c’est expliqué dans le paragraphe The DKMS route.

Voici en quelques lignes de consoles comment procéder pour récupérer les sources, compiler et installer le module. Attention, j’utilise sudo -i pour ne pas avoir à faire sudo à chaque ligne car je suis un gros feignant.

git clone https://github.com/tuxedocomputers/tuxedo-keyboard.git
cd tuxedo-keyboard
make clean
sudo -i
cp -R . /usr/src/tuxedo_keyboard-1
dkms add -m tuxedo_keyboard -v 1
dkms install -m tuxedo_keyboard -v 1
echo tuxedo_keyboard >> /etc/modules

Utiliser les touches de règlage du rétro-éclairage

Grâce à l’installation de ce module, vous pouvez désormais utiliser les 4 touches dédiées du pavé numérique pour régler le rétro-éclairage :

Touches du pavé numérique gérant le rétro-éclairage

Ce sont les touches /, *, – et + qu’il faut utiliser avec Fn.

« / » permet de lancer en boucle les différents modes de rétro-éclairage. Pas très utile au quotidien, sauf pour découvrir les modes disponibles.

« * » permet d’allumer et d’éteindre le rétro-éclairage.

« – » et « + » permettent d’augmenter et réduire l’intensité du rétro-éclairage.

Changer la couleur par défaut au démarrage

Cependant, la couleur par défaut est toujours le bleu. Nous allons voir par exemple comment passer au blanc (plus élégant). La démarche est la même pour d’autres couleurs, il suffit d’ajuster les valeurs hexadécimales.

sudo -i
echo "options tuxedo_keyboard mode=0 brightness=255 state=1 color_left=0xffffff color_center=0xffffff color_right=0xffffff" > /etc/modprobe.d/tuxedo_keyboard.conf

Pour modifier ce réglage ensuite, il suffit de modifier le fichier suivant.

sudo vim /etc/modprobe.d/tuxedo_keyboard.conf

« mode » permet de choisir le mode par défaut. La liste de tous les modes est disponible ici. Si vous voulez choisir une couleur fixe, utilisez la valeur 0. C’est l’équivalent de la touche « / ».

« brightness » permet de fixer l’intensité du rétro-éclairage (0 = éteint, 255 = max), équivalent des touches « + » et « -« .

« state » permet d’allumer ou d’éteindre le rétro-éclairage, équivalent de la touche « * ».

Il faudra cependant redémarrer la machine pour que les modifications soient prises en compte, puisque chargées dans le module du noyau.

Conserver le réglage lors de la mise en veille

Il reste cependant un problème, le choix du réglage n’est pas conservé en cas de mise en veille du PC, notamment en hibernation. Heureusement, grâce à ce bon samaritain, une solution existe.

Il suffit de placer ce script dans un fichier nommé tuxedo_keyboard dans le dossier des hooks d’hibernation de systemd (/lib/systemd/system-sleep/), et de le rendre exécutable :

#!/bin/sh
case $1 in
  (pre)
    for file in color_center color_left color_right color_extra mode brightness state;
    do
      filepath="/sys/devices/platform/tuxedo_keyboard/$file"
      if [ -e $filepath ]
      then
        case $file in
          (color_*)
            prefix="0x"
            ;;
          (*)
            prefix=""
            ;;
        esac
        echo "$file ${prefix}$(cat $filepath)" >> /tmp/tuxedo_keyboard_conf
      fi
    done
    ;;
  (post)
    if [ -e /tmp/tuxedo_keyboard_conf ];
    then
      awk '{ print $2 >("/sys/devices/platform/tuxedo_keyboard/" $1) }' /tmp/tuxedo_keyboard_conf
      rm /tmp/tuxedo_keyboard_conf
    fi
    ;;
esac

Ce script enregistre l’état du clavier dans /tmp/tuxedo_keyboard_conf quand l’ordinateur passe en veille et recharge l’état du clavier au réveil. Cela ne marche pas pour un reboot, par contre cela fonctionne pour tous les modes de veille (hibernation, veille etc.).

Conclusion

Nous avons désormais une gestion élémentaire mais complète du rétro-éclairage de notre Clevo N150/151ZU : gestion manuelle par les touches du pavé numérique, modification de l’état par défaut et conservation lors de la mise en veille.

Bonus : contrôler la vitesse du ventilateur

Tout d’abord un grand merci (quoique tardif !) à François qui a posté en commentaire une solution pour limiter les déclenchements du ventilateur.

Le bios du N151ZU n’est pas optimisé et déclenche brutalement le ventilateur dès que le processeur atteint 51°C. Or la famille des processeurs intel core i7-85**U fonctionne jusqu’à 100°C. Il n’est donc pas utile de déclencher le ventilateur à pleine puissance dès 51°C, sans compter le bruit que cela produit.

Tout est dans cette page gitlab : https://gitlab.com/francois.kneib/clevo-N151ZU-fan-controller

Pour ceux d’entre vous totalement réfractaires à la langue de Shakespeare, je traduis ici les étapes de l’installation :

Pré-requis (Ubuntu)

sudo apt install -y git gcc build-essential

Téléchargement des sources

Clonage du dépôt git (cela crée un dossier clevo-N151ZU-fan-controller contenant les sources) :

git clone https://gitlab.com/francois.kneib/clevo-N151ZU-fan-controller.git

Installation

cd clevo-N151ZU-fan-controller
sudo make all

Ce que fait le make :

  • Compile les sources C++ en un exécuable N151ZU-fan-controller,
  • copie le binaire N151ZU-fan-controller dans /usr/local/bin,
  • copie le descripteur de service N151ZU-fan-controller.service dans /etc/systemd/system/,
  • active le service au démarrage du PC,
  • lance le service immédiatement.

Vérification que tout fonctionne

La commande :

systemctl status -n20 N151ZU-fan-controller.service

produit une sortie ressemblant à :

N151ZU-fan-controller.service – Clevo_N151ZU-based laptop automatic fan control
Loaded: loaded (/etc/systemd/system/N151ZU-fan-controller.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2019-05-30 12:53:55 CEST; 13min ago
Main PID: 2673 (N151ZU-fan-cont)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/N151ZU-fan-controller.service
└─2673 /usr/local/bin/N151ZU-fan-controller

mai 30 13:06:37 N151ZU N151ZU-fan-controller[2673]: T:48°C | set fan to 0%
mai 30 13:06:38 N151ZU N151ZU-fan-controller[2673]: T:51°C | set fan to 20%
mai 30 13:06:40 N151ZU N151ZU-fan-controller[2673]: T:48°C | set fan to 0%
mai 30 13:06:41 N151ZU N151ZU-fan-controller[2673]: T:51°C | set fan to 20%

J’ai modifié les valeurs des trois constantes suivantes dans le fichier N151ZU-fan-controller.cpp afin de mieux coller à mon usage du PC (je l’ai souvent sur le genoux, alors 70°C c’est un peu chaud pour déclencher le ventilo 🙂 :

//#define FAN_OFF_TEMP          70     // Original
#define FAN_OFF_TEMP            51     // Modifié
//#define FAN_MAX_TEMP          90     // Original
#define FAN_MAX_TEMP            70     // Modifié
//#define FAN_MIN_VALUE         100    // Original
#define FAN_MIN_VALUE           50     // Modifié
  • FAN_OFF_TEMP : température en dégrés à partir de laquelle le ventilateur commence à se déclencher.
  • FAN_MAX_TEMP : température en degrés à partir de laquelle le ventilateur tourne à pleine vitesse.
  • FAN_MIN_VALUE : vitesse à laquelle le ventilateur va commencer à tourner quand la température atteint FAN_OFF_TEMP (0=ventilateur arrêté, 255=ventilateur à la vitesse maximum).