Inspiron 6000 et i8kutils : un peu de silence !

Correction du 31/10/08 : oubli du “set config(auto) 1″dans /etc/i8kmon

Aujourd’hui je vais vous parler de notebook.

Mon portable est un Dell Inspiron 6000 dont je suis ravi : je l’avais acheté alors que je ne connaissais que Windows, mais coup de bol, c’est une plate-forme en or pour GNU/Linux.

En effet, Centrino jusqu’au bout des ongles, il est 100% Intel.
Je suis loin de vouer un culte à cette marque, mais elle a l’excellente politique de proposer des drivers libres pour son matos, mon portable tourne donc uniquement avec du driver libre.

Ça n’est pas qu’une question d’idéologie, le fait est que techniquement, tout marche beaucoup mieux avec du driver libre, c’est simple et sans soucis.

Mais ça n’est pas ce qui m’intéresse aujourd’hui : lorsque je tournais sous Windows, j’utilisais avec bonheur le programme i8kfan, qui me permettait d’ajuster au mieux la gestion des ventilateurs de mon petit portable.
Cette gestion n’est pas catastrophique d’origine, mais il est possible de faire bien mieux et d’arriver à un réglage où tous les ventilateurs sont éteints lorsque l’on fait des tâches légères, comme de la navigation web.

Par défaut, le ventilateur tourne modérément en permanence, et il s’excite si le processeur devient vraiment très chaud (été, calcul intensif, …).
Même si il n’est pas très bruyant, c’est un peu bête, car les excellentes facultés d’économie d’énergie du Pentium M lui permettent de tourner sans ventilateur la majorité du temps.

Étant passé sous GNU/Linux, j’ai fini par vouloir retrouver le même silence sous mon OS favori.

Ce qui suit est valable pour Debian et pour un Inspiron 6000. Ça devrait être la même chose pour Ubuntu et les autres debianoïdes, mais il faudra sûrement adapter pour les autres distributions.
Pour les autres inspirons compatibles, c’est la même chose, au nombre de ventilateurs près.

Le but

Éteindre complètement le ventilateur lorsque le processeur est à moins de 60°C,  température que supporte très bien ce vaillant petit processeur, et qui ne sera jamais atteinte lors de tâches légères, permettant un surf dans un silence quasi complet :D

On va donc définir 3 zones de températures :

  1. Jusqu’à 60°C, le ventilateur ne tourne pas (régime 0). Si cette valeur est dépassée, on passe en zone 2.
  2. Le ventilateur tourne au régime 1, qui est modérément bruyant. Si la température retombe en dessous de 50°C, on repasse en zone 1. Si elle excède 70°C, on passe en zone 3.
  3. Le ventilateur donne tout ce qu’il a (régime 2) pour faire retomber la température sous les 60°C, et ainsi repasser en zone 2.

Ces valeurs peuvent bien sûr être ajustées en fonction de l’utilisation et des préférences de chacun.

Les softs : i8kutils

Et oui, il existe un équivalent à mon petit i8kfan, il prend la forme d’un module noyau “i8k” et d’une suite d’utilitaires regroupés sous la bannière “i8kutils”, présents dans les dépôts de ma chère Debian.

On commence par

#aptitude install i8kutils
#modprobe i8k

afin d’installer la suite d’utilitaires et de charger le module noyau qui va leur permettre de commander la ventilation.

Pour charger le module à chaque démarrage, ajoutez “i8k” dans le fichier /etc/modules.

/proc/i8k

Le module noyau crée un nouveau fichier /proc/i8k qui va permettre de monitorer notre petit Dell :

[dek@chameleon] ~ $ cat /proc/i8k
1.0 A09 1ZM2R1J 48 -22 0 27660 0 -1 -22

Version du bios, température, état des ventilos, … le man de i8kfan  vous renseignera sur la signification des différentes valeurs, elles nous importent peu finalement.

i8kfan

Commençons par i8kfan.
Grâce à lui, vous pourrez donner des ordres sur la ventilation, et alterner entre les 3 modes possibles : arrêté (0), modéré (1) ou fort (2).

Par exemple,

i8kfan - 0

Arrête le ventilateur droit (qui correspond à l’unique ventilateur de l’Inspiron 6000), le tiret est là pour ne pas passer d’ordre au ventilateur gauche, qui ne correspond à rien sur le 6000.

Tout ceci est très sympa pour vérifier le fonctionnement, mais cela ne nous procure pas une gestion automatique de la ventilation.
C’est là que i8kmon intervient.

i8kmon

i8kmon est un programme pouvant être lancé comme daemon ou comme appli graphique.

Je m’intéresse ici uniquement à sa fonction de daemon pour qu’il fonctionne en tâche de fond et s’occupe de tout tout seul, le but est de pouvoir oublier la gestion pour profiter du silence !

Précisons que vous ne pourrez plus utiliser i8kfan quand i8kmon sera démarré.

La configuration d’i8kmon

Tout se passe dans /etc/i8kmon (qui n’existe pas par défaut), créez-le et inspirez-vous du mien :

set config(daemon)  1
set config(auto)    1

set config(0) {{- 0}  -1  60  -1  60}
set config(1) {{- 1}  50  70  50  70}
set config(2) {{- 2}  60  90  60  90}
set config(3) {{- 2}  90  99  90  99}

Chaque “set config(x)” est une zone de température.
i8kmon en veut quatre (alors que nous en voulons trois), donc la dernière est inutile car jamais atteinte.

Suit une partie entre accolades , contenant les différents paramètres de chaque zone.

  • le réglage des ventilateurs pour la zone : {- 1} pour la zone 1, ce qui correspond aux paramètres que l’on passe à i8kfan
  • Une série de deux températures (50 et 70 pour la zone 1 par exemple), qui sont la température de passage à la zone inférieure, et la température de passage à la zone supérieure, pour un fonctionnement sur secteur.
  • Une autre série de deux températures, qui ont la même fonction que précédemment, mais qui s’appliqueront quand le portable tournera sur batterie.

Ne voyant pas d’intérêt à découpler la gestion sur secteur et sur batterie, j’ai recopié les mêmes valeurs.

Le script d’init

Petit problème : chez Debian, on n’a pas cru bon d’ajouter le script d’init dans le paquet binaire de i8kutils, alors même que ce script est présent dans le paquet source. Plutôt embêtant quand on veut qu’il se lance tout seul au démarrage.

Ni une ni deux, on récupère le paquet source i8kutils_1.27.tar.gz sur http://packages.debian.org/fr/lenny/i8kutils et on en extrait ./debian/i8kmon.init, fichier que l’on va copier comme /etc/init.d/i8kmon

On lui attribue la permission d’exécution :

#chmod +x /etc/init.d/i8kmon

Ensuite, un

#update-rc.d i8kmon defaults

Va permettre de créer correctement les liens d’init.

Le fichier créé, on peut lancer le daemon (pour cette session, car il se lancera tout seul au prochain démarrage) :

/etc/init.d/i8kmon start

Et voilà !
Normalement le ventilateur devrait s’éteindre si la température est sous les 60°C, à vous le silence et une ventilation aux petits oignons :D