Suspend2 (tuxonice)

Le Software Suspend permet de mettre l'ordinateur en veille et de l'arrêter en enregistrant dans la partition de swap ou dans un fichier l'état de la mémoire vive. Ainsi, lorsque l'on redémarre, on retrouve les programmes à l'état dans lequel on les a laissés avant la mise en veille. Il s'agit en quelque sorte d'un équivalent de la mise en veille prolongée de Windows. Il existe une telle fonctionnalité intégrée aux pilotes ACPI du noyau mais j'ai choisi ici d'expliquer le fonctionnement de Suspend 2. Ce projet a récémment changé de nom et s'appelle maintenant tuxonice. Néanmoins, la version stable actuelle (2.2.10) s'appelle toujours Suspend2. Afin de pouvoir l'utiliser, il faut récupérer la version 2.2.10. Ensuite, appliquez ce patch comme ceci:
$ cd /usr/src/<répertoire contenant les sources du noyau>
$ bunzip2 -c .../suspend2-2.2.10-for-2.6.22.bz2 | patch -p1

Il faut ensuite configurer le noyau pour activer Suspend 2. Pour cela, il faut cocher les options suivantes:

Si vous avez choisi le swap writer, il faut ajouter resume2=swap:/dev/hdax comme paramètre du noyau dans votre chargeur de démarrage (où hdax doit être remplacé par l'emplacement de la partition de swap). Il est conseillé de fixer une taille de swap supérieure de 30% à celle de la mémoire vive.

L'option file writer permet de stocker l'image dans un fichier. Si vous voulez l'utiliser, il faut tout d'abord créer le fichier nécessaire de cette manière:
# echo Suspend2 ><votre swapfile>
(où <votre swapfile> doit être remplacé par l'emplacement approprié.
# dd if=/dev/zero > my_padding bs=4096 count=x
où x est la taille désirée et se calcule de cette manière 1024*1024*MB/4096 où MB est la taille désirée en mégabytes de votre fichier swap.
# cat my_padding » <votre swapfile>
# rm -f my_padding
# sync
# echo <votre swapfile> » /sys/power/suspend2/file/target
Ensuite, notez le résultat de la commande
# cat /sys/power/suspend2/resume2
et ajoutez le comme paramètre de démarrage du noyau.

Dans les 2 cas, il est recommandé d'ajouter une entrée supplémentaire votre chargeur de démarrage avec le paramètre noresume2. Ceci permet de démarrer le PC sans tenir compte de la mise en veille au cas où ça ne fonctionnerait pas.

Recompilez alors le noyau et installez-le dans le répertoire /boot. Si le nouveau noyau ne pose pas de problèmes, on peut alors installer le script qui va déclencher la mise en veille. Il faut télécharger la version 1.96. Ensuite, il faut l'installer comme ceci:
$ cd <download_directory>
$ tar xzvf hibernate-script-1.96.tar.gz
$ cd hibernate-script-1.96
# ./install.sh

Ensuite, il faut modifier quelque peu la configuration de la mise en veille en changeant quelques paramètres dans le fichier /etc/hibernate/hibernate.conf:

Si vous souhaitez utiliser la compression LZF pour stocker l'image, vous devez ajouter la ligne suivante au fichier hibernate.conf:
Compressor lzf
Si vous utilisez le pilote fglrx), vous devez également ajouter la ligne suivante à ce fichier:
ProcSetting extra_pages_allowance 5000

Si vous avez choisi le système Userspace user interface, vous devez télécharger la version 0.7.1 de ce programme sur cette page. La compilation de ce programme nécessite l'installation de certains fichiers d'entêtes. Dans Debian, ceux-ci sont fournis par les paquets libpng12-dev, libmng-dev, libfreetype6-dev, libusplash-dev et libttf-dev. Effectuez les commandes suivantes pour compiler et installer ce programme:
$ cd /usr/src/
$ tar zxvf <download directory>/suspend2-userui-0.7.1.tar.gz
$ cd suspend2-userui-0.7.1
$ make
# make install
Ensuite, ajoutez cette ligne au fichier hibernate.conf

ProcSetting userui_program /usr/local/sbin/suspend2ui_text
Pour utiliser fbsplash, vous devez remplacer suspendui_text par suspendui_fbsplash).

Vous pouvez alors tester la mise en veille avec la commande
# hibernate

Si celà ne fonctionne pas, il y a peut-être un problème de compatibilté avec un de vos périphériques. Dans ce cas, il peut être nécessaire de décharger le module gérant celui-ci et de le recharger au redémarrage. Il est aussi possible qu'il s'agisse d'un conflit avec un des programmes que vous utilisez.

La page de manuel de hibernate.conf ou le howto vous donneront de nombreuses indications sur les options non détaillées dans ce document. Par ailleurs, il est possible de déclencher la mise en veille lorsque l'on referme l'écran du portable. Pour ce faire, il faut installer le paquet acpid. Ensuite, il faut éditer ou créer le fichier /etc/acpi/events/lid et y placer les lignes suivantes :

event=button/lid | LID
action=hibernate
Pour activer la touche veille (Fn-F4), créez un fichier sleep contenant les lignes suivantes:
event=button[ /]sleep
action=hibernate

François 2007-09-02