Je suis sur un ordinateur portable HP/Compaq NX9000, disposant de 512 Mo de RAM, d'un processeur P4 à 2.2 GHz, et de 30 Go de disque dur. J'utilise Linux, plus spécifiquement la distribution Debian sid.

J'ai commencé par installer le package kernel-source-2.6.7 (version du package: 2.6.7-3), qui m'a fourni un fichier .tar.bz2 dans /usr/src/ à décompresser. J'ai ensuite créé un lien symbolique /usr/src/linux vers le répertoire créé, parce que c'est bon pour la santé.

J'ai ensuite téléchargé le patch swsusp2.0.0.102 (dernière version disponible à ce moment), disponible sur le site officiel du projet. Pour l'appliquer, il suffit de le décompresser n'importe où (pas trop n'importe où quand même, personnellement j'étais sur mon lit). Ensuite se placer dans le répertoire /usr/src/linux et lancer la commande suivante: <chemin-du-patch>/apply.

Le problème est que ce patch contient des erreurs qui l'empêchent de compiler correctement. La bonne nouvelle c'est qu'un gentil monsieur a corrigé le problème et fournit un patch du patch. Oui bon ça va je t'ai vu rigoler.

Donc j'ai suivi sagement les instructions, téléchargé et appliqué le brouzouf avec la commande suivante: patch -p1 < fichier.diff, pour chacun des fichiers à appliquer, dans le bon ordre.

Avec mon nouveau noyau tout maquillé et coiffé, j'ai pu configurer tranquillement avec make menuconfig (mon .config est ici), puis compilé avec make puis make modules_install. Copié les fichiers System.map, .config pour la forme, et bien sûr arch/i386/bzImage dans /boot. Ensuite j'ai pu modifier ma configuration de Grub pour pouvoir booter sur le nouveau kernel. Il convient de rajouter l'option "resume2=swap:/dev/hda3" (à remplacer par le chemin de votre partition de swap) si cela n'a pas été précisé dans la configuration du noyau. C'est à cet endroit que sera sauvegardé le contenu de la RAM lors de la suspension.

À partir de ce moment, on peut redémarrer l'ordinateur sur le nouveau noyau. Une fois celui-ci au pouvoir, il suffit de taper echo >> /proc/software_suspend/activate pour lancer la procédure de suspension. Après quelques secondes, l'ordinateur s'éteint. Lorsqu'on le rallume, le contenu de la swap est récupéré et replacé en RAM, et la vie continue comme si rien ne s'était passé. C'est assez bluffant: j'ai coupé au milieu d'une musique, et à la reprise le type a continué à chanter, ce con n'a même pas remarqué qu'il avait pioncé 10 minutes.

Il existe un paquet Debian nommé hibernate, que vous pouvez installer pour configurer un peu plus finement la suspension (modules du noyau à relancer explicitement, menu alternatif de Grub lors de la reprise, etc.). Vraiment bien foutu.

Pour finir, j'ai configuré le démon ACPI (paquet Debian acpid) pour que l'événement de fermeture du couvercle de l'ordinateur lance la commande hibernate. Le script shell à modifier se trouve dans /etc/acpi, et vous pouvez connaître son nom en consultant les fichiers dans le répertoire /etc/acpi/events. J'ai simplement rajouté un appel à la commande hibernate à l'endroit du script qui concerne la fermeture du couvercle. Il suffit maintenant de baisser la casquette du bébé pour l'endormir le bébé, et de lui pouéter le nez pour le réveiller.

Le chan #swsusp sur irc.freenode.net est très utile et peuplé d'habitants charmants; le site web du projet est quant à lui austère mais fruité.