HOWTO Suspension APM v2
Un article de Gentoo Linux Wiki.
| Méthodes d'installation • CD Live • Noyau et matériel • Portables et Notebooks • Portage • Système • Réseaux et Services • Serveur X • Logiciels fréquemment utilisés • Autres |
J'ai (NdT : l'auteur a) récemment fait fonctionner swsusp2 (aussi dénommé software suspend v2, suspension logicielle ) (en) sur mon acer Travelmate 800 (une machine Centrino). Ca a parfaîtement fonctionné jusqu'ici, ce qui est tres bien, en prenant en compte que je n'ai jamais réussi à faire fonctionner swsusp*1*. Tout cela sur un noyau 2.6.5-gentoo-r1 (2.6.9 vanilla actuellement).
On peut supposer que le code de swsusp*2* fonctionne beaucoup mieux, donc ca vaut vraiment le coup d'essayer.
Sommaire |
[modifier] Qu'est-ce que l'hibernation ?
L'hibernation (par swsusp) est une méthode pour conserver de l'énergie lorsque l'ordinateur n'est pas utilisé. A la base, il stocke le contenu de la RAM sur le disque dur et arrête la machine. Quand vous rallumez la machine, swsusp réécrit le contenu de la RAM dans la RAM. Ce procédé est habituellement plus rapide que d'arrêter le systeme complètement, et de le démarrer de nouveau. Vous pouvez laisser vos applications tourner et cela ne consomme pas d'énergie.
[modifier] Installation
[modifier] Installation de sources du noyau
Récupérez les dernières sources du noyau :
# emerge development-sources
Il est aussi possible d'utiliser les sources officielles (vanilla)
# cd /usr/src # wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.9.tar.bz2 # tar xjpf linux-2.6.9.tar.bz2
[modifier] Télécharger le patch et l'hibernate-script
Téléchargez le dernier "Current Stable Patch" (patch stable courant) à partir de la page de téléchargement de swsusp (en). Récupérez aussi la dernière version de l'hibernate-script.
L'hibernate-script a récemment été ajouté a portage. Premièrement, ajoutez "sys-apps/hibernate-script" a votre /etc/portage/package.keywords. Créez le fichier/répertoire s'ils n'existent pas encore.
# [ -d /etc/portage ] || mkdir -p /etc/portage # echo "sys-apps/hibernate-script" >> /etc/portage/package.keywords # emerge hibernate-script
Notez que vous devriez utiliser l'hibernate-script de la page de swsusp ou celui de portage. Je n'ai pas testé celui de portage, donc si quelqu'un pouvait commenter à ce propos ici, ce serait très bien. Pas de problèmes spécifiques rencontrés, ca a l'air de marcher. tro (sur gentoo-wiki.com)
[modifier] Patcher les sources du noyau
Nous allons prendre le patch du noyau que nous venons de télécharger, le décompresser, et l'appliquer (le patch) a nos sources du noyau. Après que vous ayez téléchargé le fichier sur /tmp/, vous pouvez le décompresser :
# cd /tmp/ # tar xjf /tmp/software-suspend-x.x.x-for-2.x.x
Pour appliquer le patch swsusp2 au noyau, premièrement allez dans votre répertoire de sources, et executez le script apply fourni, à partir d'ici, en spécifiant où ont été mis les patches :
# cd /usr/src/linux/ # /tmp/software-suspend-x.x.x-for-2.x.x/apply /tmp/software-suspend-x.x.x-for-x.x.x/
Vous pouvez aussi appeler l'aide du script :
/tmp/software-suspend-x.x.x-for-2.x.x/apply --help
Le noyau devrait maintenant être patché. Si des erreurs se sont produites, les patches n'ont pas fonctionné avec votre noyau, pour une quelconque raison. Une raison pourrait etre que le noyau gentoo contienne déjà un patchset personnalisé. Essayez de télécharger une différente version du patch et/ou des sources du noyau.
[modifier] Configurer le noyau
Allez dans votre répertoire de noyau, exécutez make menuconfig, et regardez au niveau de "Power Management Options" :
Power management options (ACPI, APM) ---> [*] Power Management support Software Suspend Software Suspend 2 --->
Maintenant, vous avez "Software Suspend" et "Software Suspend 2". "Software Suspend" est l'ancienne implémentation qui vient avec chaque noyau. "Software Suspend 2" est la nouvelle implémentation.
Maintenant, sélectionnez les options suivantes :
Power management options (ACPI, APM) --->
[*] Power Management support
Software Suspend []
Software Suspend 2 --->
<*> Software Suspend 2
<*> Swap Writer
<*> Text mode console support
Basiquement vous pouvez laisser cela ainsi, mais par la suite vous pouvez modifier tout le reste.
Comme option supplémentaire, vous pouvez ajouter la compression de l'image hibernée de la RAM :
[*] LZF image compression
Certains utilisateurs remarquent un processus d'hibernation plus rapide lorsque la compression est utilisée, mais ceci dépend en grande partie de la relation entre la vitesse du processeur et celle du disque dur, ainsi que de la taille de la mémoire système (utilisée).
[modifier] Compilation & installation du nouveau noyau, configuration du chargeur de démarrage pour swsusp2
Je n'expliciterai pas ici la compilation et l'installation du noyau. Jetez un oeil sur le web (NdT ou ici [HOWTO Configurer et compiler le noyau])
swsusp stocke les données d'hibernage sur votre partition de swap. Quand vous démarrez le noyau, il est nécessaire de lui dire où est la partition via une option du noyau. Ajoutez donc ceci a vos paramètres du noyau dans /etc/lilo/lilo.conf pour LILO ou /boot/grub/grub.conf pour GRUB :
| Fichier : /etc/lilo/lilo.conf |
... append="... resume2=swap:/dev/hdx" ... |
ou
| Fichier : /boot/grub/grub.conf |
... kernel=... resume2=swap:/dev/hdx ... |
et remplacez /dev/hdx par votre partition de swap.
(n'oubliez pas de lancer lilo après avoir modifié /etc/lilo.conf)
Astuce : Si la fonction de restauration ne fonctionne pas pour quelque raison, ajoutez noresume2 (et peut-être aussi noresume) a vos paramètres de noyau.
[modifier] Installer suspend-script
Si vous ne l'avez pas installé via portage : Le script que vous avez téléchargé, qui est utilisé pour faire hiberner la machine, doit être décompressé et installé.
# cd /tmp/ # tar xzf hibernate-script-x.xx.tar.gz
Ceci va simplement créer un répertoire /tmp/hibernate-script-x.xx/ contenant toutes les choses nécessaires.
Simplement, allez dans le répertoire nouvellement créé (sinon il y aura une erreur) et executez le install.sh fourni :
# cd /tmp/hibernate-script-x.xx/ # ./install.sh
Ceci créera un exécutable /usr/local/sbin/hibernate qui, quand exécuté mettra votre machine en hibernation, et créera aussi quelque scripts et fichiers de configuration dans /etc/hibernate/.
[modifier] Hiberner !
En tant que root, exécutez /usr/local/sbin/hibernate pour hiberner.
Pour minimiser les risques resultant d'une restauration infructueuse, essayez d'abord sans X (à partir de la console), puis avec X, mais sans être logué (sinon vous pouvez facilement casser votre configuration kde et d'autre choses du même genre). Démontez aussi les partitions qui ne sont pas nécessaires avant d'hiberner pour la première fois, pour éviter au maximum les problèmes.
[modifier] Annexe
[modifier] Configuration de swsusp2
Dans /etc/hibernate/hibernate.conf, il y a quelque choses que vous devriez configurer.
[modifier] Son
La carte son est souvent un problème. C'est pourquoi vous devriez envisager de redémarrer alsasound (si vous utilisez alsa) au moment de la restauration, comme ceci :
| Fichier : /etc/hibernate/hibernate.conf |
RestartServices alsasound |
Dans le noyau 2.6.9, OSS apporte le support de l'hibernage (Je ne sais pas pour alsa).
[modifier] USB
Dans le noyau 2.6.5, les modules USB ne supportaient pas swsusp. C'est pourquoi vous devriez simplement les décharger avant l'hibernation, et les recharger après la reprise. Ceci peut être facilement fait en demandant a swsusp de redémarrer le service hotplug (qui est fourni sous gentoo par le paquet hotplug) :
| Fichier : /etc/hibernate/hibernate.conf |
RestartServices alsasound hotplug |
Dans le noyau 2.6.9, il apparaît que l'USB supporte l'hibernage ! Ceci n'est donc plus nécessaire.
[modifier] Partitions de Disque Dur montées
Si vous avez des partitions auxqueles vous voulez accéder lorsque votre système est suspendu (comme une partition windows), swsusp devrait les démonter avant, et les remonter après une hibernation :
| Fichier : /etc/hibernate/hibernate.conf |
Unmount /mnt/c OnResume 20 mount /mnt/c |
Sinon vous allez facilement corrompre les données sur ce périphérique !
[modifier] Modules Problématiques
En général il est mieux de compiler les choses en modules quand on utilise swsusp, parce-que ca permet de les décharger/recahrger. Si vous avez des problèmes avec certains modules (J'ai eu un problème avec sd_mod, le module scsi de mon graveur, qui ne fonctionnait plus après l'hibernation), demandez a swsusp de les décharger puis de les recharger :
| Fichier : /etc/hibernate/hibernate.conf |
UnloadModules sd_mod LoadModules sd_mod |
Comme vous êtes probablement sur gentoo, vous pouvez aussi paramétrer
| Fichier : /etc/hibernate/hibernate.conf |
GentooModulesAutoload yes |
[modifier] sudo - laissez les utilisateurs hiberner, aussi
(Passez cette section si vous (voulez) utilisez acpid)
Pour que les utilisateurs non-root puissent utiliser swsusp, vous pouvez utiliser sudo. Premièrement, installez sudo :
# emerge sudo
Puis, utilisez visudo ou editez /etc/sudoers pour ajouter une entrée telle que :
| Fichier : /etc/sudoers |
... %wheel ALL=NOPASSWD: /usr/sbin/hibernate |
Ceci permettra aux membres du groupe wheel d'executer /usr/sbin/hibernate :
$ sudo /usr/sbin/hibernate
Avoir un groupe spécial hibernate serait bien sûr mieux, vous pouvez ensuite y ajouter tous les utilisateurs.
Si vous utilisez bootsplash, vous devriez utiliser visudo pour ajouter ceci a /etc/sudoers :
| Fichier : /etc/sudoers |
... %wheel ALL = NOPASSWD: /sbin/splash |
[modifier] Configuration de l'ACPI - Utilisez le bouton du boîtier pour faire hiberner la machine
En premier lieu, configurez votre noyau avec l'ACPI. Ensuite, installez Modèle:Command et ajoutez-le à votre runlevel par défaut, pour le démarrer automatiquement :
# emerge acpid # rc-update add acpid default
Puis éditez /etc/acpi/events/default pour qu'il contienne les lignes (Je ne me souviens pas si c'est par défaut) :
| Fichier : /etc/acpi/events/default |
event=button.* action=/etc/acpi/default.sh %e |
ce qui passera tous les évènements bouton à /etc/acpi/default.sh, que vous éditez ensuite :
| Fichier : /etc/acpi/default.sh |
#!/bin/sh
# Default acpi script that takes an entry for all actions
set $*
group=${1/\/*/}
action=${1/*\//}
case "$group" in
button)
case "$action" in
<b>power) /usr/sbin/hibernate</b>
;;
*) logger "ACPI action $action is not defined"
;;
esac
;;
*)
logger "ACPI group $group / action $action is not defined"
;;
esac
|
Puis redémarrez simplement acpid :
/etc/init.d/acpid restart
Ce qui devrait résulter en l'appel du script hibernate quand vous pressez le bouton d'arrêt. Ceci permet de passer la configuration de sudo, puisqu'acpid a les privilèges de root.
[modifier] Trucs et Astuces
- Pour faire redémarrer swsusp au lieu de l'arrêter, pressez "R" pendant le lancement de l'hibernage (Ceci le bascule en mode redémarrage);
- Changez la verbosité (niveau de log en console) pendant le lancement de l'hibernage/la restauration en pressant 0 et 1;
- Si la fonction de restauration ne fonctionne pas pour quelque raison, ajoutez noresume2 (et peut-être aussi noresume) a vos paramètres de noyau.
