Mise en place de l’extinction automatique des ordinateurs

lundi 23 mars 2009
par  f
popularité : 1%

Problématique

Nous disposons de nombreux PC en accès libre qui restent très souvent allumés pour rien. Dans un but d’économie d’énergie et écologique, nous avons cherché une solution simple, et si possible gratuite, permettant d’éteindre au bout d’un certain temps les ordinateurs "inactifs". Ces ordinateurs étant pour la majorité en double boot Windows/Linux, il nous fallait deux solutions, voire trois en considérant le gestionnaire de boot lui-même.

Dans la recherche et la mise en place des solutions proposées, nous avons fixé que :
- l’inactivité d’une machine est déterminée par l’absence de frappe clavier et de mouvement de souris ;
- l’extinction au bout d’un certain temps d’inactivité est inconditionnelle afin d’éteindre les machines en état verrouillé (lockscreen).

Extinction automatique sous Windows

Installation de Toff

Après moult recherches, nous n’avons trouvé aucune solution gratuite sous Windows correspondant à nos critères. En fait, il n’existe pas de programme tournant en tant que service et qui permet l’extinction consécutive à une période d’inactivité. Ceux qui existent sont de 2 types :
- ceux qui sont sous forme de service et qui permettent l’arrêt à une heure donnée et non au bout d’un certain temps ;
- ceux qui permettent l’arrêt au bout d’un certain temps MAIS qui tournent sous la session de l’utilisateur, ce qui pose, entre autres, un problème lorsque personne n’est logué.

Cependant, il est possible de transformer un programme utilisateur en service en se référant à l’article création d’un service défini par l’utilisateur.
Peuvent être alors retenus les programmes qui autorisent une exécution depuis la ligne de commandes. C’est le cas du logiciel
Toff
qui propose de nombreuses options toutes activables en ligne de commande (Manuel en ligne de Toff).

Voici comment installer Toff en tant que service pour une extinction au bout d’une heure d’inactivité :

  1. déposer l’exécutable dans C :\Program Files\TOff ;
  2. installer, en ligne de commandes, le service srvany via instsvr sous le nom Toff :instsrv TOff "C:\windows\system32\srvany.exe"
  3. inscrire les arguments du service Toff dans le registre HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Toff\Parameters :
    • ajouter la valeur Application de type REG_SZ contenant la chaîne C:\\Program Files\\TOff\\TOff.exe
    • ajouter la valeur AppParameters de type REG_SZ contenant la chaîne /run todo=sh type=ip /pcactivity wait=\"1:0:0\"

Indications pour packager Toff sous JeDDLaJ

Si vous déployer Toff avec JeDDLaJ, voici une bonne méthode pour créer le package associé :

  1. déposer l’exécutable dans C :\Program Files\TOff ;
  2. mettre l’ordinateur en état "création de packages" et booter sous l’interface ;
  3. en utilisant la méthode "Add To package" décrite dans Création de packages sans snapshot, créer un package ne contentant que le répertoire C :\Program Files\TOff ;
  4. déposer srvany.exe sur le serveur Rembo ;
  5. associer le script de post-installation toff.rbc suivant au logiciel Toff nouvellement inséré dans la base :

En procédant de cette manière, vous pourrez, par exemple, modifier la valeur de la durée d’inactivité sans refaire le package, mais simplement en modifiant le script de post-installation.

Zip - 427 octets
toff.rbc.zip

Extinction automatique sous Linux

sleepd : la fausse bonne solution

Il existe sous toutes les distributions Linux un programme, à la base destiné aux ordinateurs portables, permettant l’extinction automatique du système au bout d’une période d’inactivité donnée : sleepd.

"sleepd is a daemon to force laptops to enter apm sleep after some period of inactivity."

Après un petit coup d’oeil aux options possibles dans le manuel, on voit qu’il est très simple de mettre en place l’extinction au bout d’une heure d’inactivité avec la commande suivante :

sleepd -u 3600 -s /sbin/poweroff

Par défaut, sleepd détermine s’il y a une activité sur l’ordinateur en relevant régulièrement les valeurs correspondant aux interruptions 1 (clavier) et 12 (souris) dans le fichier /proc/interrupts.
Il s’agit en fait des interruptions correspondant aux deux ports PS/2 de l’ordinateur. Or, il est de nos jours de plus en plus rare d’avoir des claviers et souris branchés sur ces ports. Il est possible de modifier les interruptions scrutées par sleepd en précisant leurs valeurs à l’aide de l’option -i. Le problème, c’est que les interruptions USB sont des interruptions partagées, et qu’il est difficile de trouver deux irqs qui ne soient pas déjà utilisées : le critère d’inactivité est de ce fait complètement faussé (ceci est clairement indiqué dans la rubrique "BUGS" du manuel " If the keyboard or mouse interrupt is shared (as is common with usb devices), other devices on the same interrupt can keep the system awake.")

Un programme simple fait maison

Ne trouvant pas de programme satisfaisant à notre besoin, il a bien fallu en écrire un... Rudimentaire et très scolaire, il est écrit en C à base de threads : un thread qui enregistre l’activité de la souris, un autre celle du clavier et un dernier qui, à intervalle régulier, collecte les informations recueillies par les deux premiers.

Voici le code toff.c :

Zip - 733 octets
toff.c.zip

Le programme doit être compilé avec l’option -lpthread et copié, par exemple, dans /usr/local/bin  :gcc toff.c -lpthread -o toff

Zip - 3.5 ko
toff.zip

Le programme prend trois arguments en entrée, qui sont :
- la fréquence à laquelle on scrute l’activité clavier/souris ;
- le temps d’inactivité au bout duquel on lance la commande ;
- la commande à exécuter ;

On notera que le programme ouvre deux devices qui n’existent pas par défaut mais qui sont des liens symboliques pointant vers les vraies devices correspondant aux claviers et à la souris.
Afin de créer ces liens et de lancer le programme sous forme de démon au démarrage de la machine, il est nécessaire de faire un lien symbolique dans le répertoire approprié (/etc/rc2.d sous Debian, /etc/rc5.d sous Fedora, ...), vers le script toff.sh suivant :

Zip - 690 octets
toff.sh.zip

Les paramètres par défaut peuvent être stockés dans /etc/default/toffrc, où seront redéfinis les variables FREQ,IDLETIME et CMD.

Remarques :
- la commande pour la création des liens symboliques devra peut-être être adaptée pour des distributions autres de Debian ;
- le remplacement de souris ou de clavier pendant que le système est démarré nécessite de relancer le service (option restart).

Extinction automatique sous le gestionnaire de multiboot

Si vous utilisez JeDDLaJ, il vous suffit d’éditer le fichier preferences.rbc et d’affecter à la variable ShutdownDelay une valeur, en centièmes de seconde et différente de 0, correspondant au temps durant lequel le menu de boot restera affiché.

Si vous n’utilisez pas JeDDLaJ...Voila une raison de plus pour le faire ;-)