Suspend2

Un article de Linuxette.

Jump to: navigation, search

Sommaire

Qu'est-ce que suspend2?

C'est une méthode de mise à l'arret d'un ordinateur, mais qui garde en souvenir, l'état du système. Voila comment cela se passe:

1/ demande d'arret (shutdown)

2/ sauvegarde de la mémoire dans le swap (partition dédié ou fichier)

3/ arret complet

4/ redémarrage

5/ lecture du swap (partition ou fichier)

6/ remise en place de l'état

7/ vous retrouvez votre machine comme avant (applications ouvertes, fenêtres, connexion(s) réseau, ...)


Comment cela se passe

Il faut d'abord, un noyau prévu pour suspend2. Pour cela, il faut 2 chose: un noyau et un patch prévu pour la version du noyau récupéré.

Exemple:

un noyau 2.6.19 http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.7.tar.bz2

un patch en version 2.2.9 pour cette version de noyau: http://www.suspend2.net/downloads/all/suspend2-2.2.9-for-2.6.19.patch.bz2

Dans l'ordre: récupération du noyau et décompactage, récupération du patch et décompactage, application du patch:

   $ cd /home/remi/tmp/
   $ wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.19.7.tar.bz2
   # cd /usr/src
   # tar xzvf /home/remi/tmp/linux-2.6.19.7.tar.bz2
   # ln -s /usr/src/linux-2.6.19.7 /usr/src/linux
   $ cd /home/remi/tmp/
   $ wget http://www.suspend2.net/downloads/all/suspend2-2.2.9-for-2.6.19.patch.bz2
   $ bzip2 -d ./suspend2-2.2.9-for-2.6.19.patch.bz2
   # cd /usr/src/linux
   # patch -p1 < /home/remi/tmp/suspend2-2.2.9-for-2.6.19
   # cd /usr/src/linux
   # cp /boot/config-2.6.18-4-686 ./.config
   # make oldconfig
   # make xconfig

La partie 'cp /boot/config-2.6.18-4-686 ./.config' permet de partir d'une base saine de fichier de configuration. (Attention à trouver le bon fichier sur votre machine). Ensuite, il faut appliquer la commande oldconfig afin de remettre en ordre le .config par rapport au nouveau noyau. Puis, avec make xconfig, il faut placer les options de façon à ce que le noyau puisse lire le disque (donc l'ide en dur et non en module), les lib crypto aussi en dur, etc etc... Bref, voici mon .config

Une fois votre noyau bien configuré, voici la compilation façon debian:

   # make-kpkg clean
   # make-kpkg --append-to-version=.suspend --revision=.0.1 kernel-image modules-image
   # cd ../
   # dpkg -i linux-image-2.6.19.7.suspend_.0.1_i386.deb

Si tout ce passe bien, vous avez vos paquets deb dans /usr/src/

Avant tout, il y a des paquets à installer en plus. Si l'on recherche pour debian, voilà ce qu'il y a comme paquet:

   $ apt-cache search suspend2
   -- à complèter... ---

Sinon, voila les scripts à récuperer (valable au 27 mars 2007)

   hibernate-script-1.94.tar.gz
   snowboard-tux-v1.tar.bz2
   suspend2-userui-0.7.0.tar.gz

Plus qu'à tester!

Pour cela, il faut passer en init 1 (sous debian), de façon à n'avoir qu'un minimum d'applications en cours. Ensuite:

   # hibernate

Normalement, la machine devrait s'arreter. Si ça marche, retester en init 2 (avec l'écran de login graphique) mais sans se connecter en mode graphique. Si tout fonctionne, le teste suivant sera en mode graphique, sous votre compte!

--Admin 28 mars 2007 à 02:37 (CEST)


Changement de noyau

La compilation / installation reste la même.

Script utilisateur

Script d'hbernation à placer dans la barre d'application de gnome:

   #!/bin/sh
   # ----------------------------------------------------------
   # Demande confirmation avant mise en hibernation sur disque
   # Version 0.1: 21 oct 2006
   #
   # par R. Suinot <rsuinux@free.fr>
   # ----------------------------------------------------------
   
   Xdialog --yesno "Demande de mise en sommeil sur disque ?" 0 0;\
   case $? in
   0)
           # oui!
           sudo /usr/sbin/hibernate;;
   1)
           # oh non!!!!!
           echo "Refus de votre part.";;
   255)
           # escape appuyé (equ a 'non')
           echo "Echap utilisé";;
   esac
   
   exit 0

--Admin 12 juin 2007 à 22:02 (CEST)

Un autre script? Celui ci permet aussi de mettre la machine en sommeil mais en gardant tout en mémoire!

   $ cat bin/suspension.sh 
   #!/bin/sh
   # ----------------------------------------------------------
   # Demande confirmation avant mise en hibernation sur disque
   # Version 0.2: 27 Dec. 2007
   # par R. Suinot <remi@suinot.org>
   # ----------------------------------------------------------
   
   DIALOG=Xdialog
   
   $DIALOG --title "Mise en sommeil" \
   --menu "Choisissez votre hibernation" 10 40 5 \ 
   "mem" "en mémoire"  \
   "disk" "sur disque" \
   "no" "Surtout pas!" 2>/tmp/menu.tmp
   
   choix=$?
   selection=`cat /tmp/menu.tmp`
   rm -f /tmp/menu.tmp
   case $choix in
     0)  
     case $selection in
       disk)
       sudo /usr/sbin/hibernate-disk
       ;;  
       mem)
       sudo /usr/sbin/hibernate-ram
       ;;  
       no) 
       print "annule \n "
       ;;  
     esac
     ;;  
   esac
       
   exit 0


Amélioration

J'ai eu quelques problèmes pour faire redémarrer le réseau à chaque reboot. En fait, la solution est simple, comme à chaque fois!

  • edition du fichier /etc/hibernate/common.conf
  • suppression du '#' pour ces deux lignes:
   ### network
   DownInterfaces auto 
   UpInterfaces wlan0
  • copie du fichier /usr/share/hibernate/scriptlets.d/network vers /etc/hibernate/scriptlets.d/network
  • le rendre exécutable:
   $ sudo chmod +x /etc/hibernate/scriptlets.d/network

C'est tout!

--Admin 26 juin 2007 à 09:44 (CEST)

Dernières nouvelles

Suite à un problème au niveau de la gestion usb et usb2 (kernel oops, ...), changement de version ce jour:

  1. nouveau patch suspend2: http://www.tuxonice.net/downloads/all/suspend2-2.2.10.2-for-2.6.22-rc6.patch.bz2
  2. nouveau kernel: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.tar.bz2

Recompilation comme ci dessus.

ATTENTION

Il semble quil ne soit plus necessaire d'indiquer dans le fichier de configuration du noyau, l'emplacement du swap. Celui ci est passé de toute façon, au noyau, lors de la phase de boot.

--Admin 10 juillet 2007 à 20:12 (CEST)

Depuis le temps que je cherche:

J'ai enfin réussi à utiliser les drivers propriétaires Nvidia ET suspend! Pour tout savoir, retrouvez la page Divx-nvidia

--Admin 11 juillet 2007 à 20:24 (CEST)