Arrêt - Redémarrage - Suspension - Hibernation

Mise à jour : Debian 9.2

Références :

Sommaire

1 - Principe

1.1 - Commande

systemd fournit les commandes permettant de contrôler l'arrêt et la mise en veille de l'ordinateur.

$ sudo systemctl  poweroff
$ sudo systemctl reboot

Le contenu de la mémoire est conservée en RAM, la consommation électrique est minimisée, le voyant "Marche" clignote. Le redémarrage s'effectue en tapant sur une touche quelconque.

$ sudo systemctl suspend

Le contenu de la mémoire est sauvegardée sur le disque, la consommation électrique s'interrompt, le voyant "Marche" est éteint. Le redémarrage s'effectue avec la touche "Marche".

$ sudo systemctl hibernate

Le contenu de la mémoire est conservée en RAM comme pour le mode Suspension et il est également sauvegardé sur disque comme pour le mode Hibernation. Si le contenu de la mémoire est perdu (perte d'alimentation par exemple), le redémarrage s'effectue à partir du disque, sinon il s'effectue à partir de la RAM.

$ sudo systemctl hybrid-sleep

1.2 - Interface graphique

xfce4 fournit un gestionnaire de session (xfce4-session) affiché par défaut, dans la barre de menu : cliquer gauche sur le nom d'utilisateur pour faire apparaître les options :

Menu session

La présentation et les options du menu sont configurables (clic droit sur le nom d'utilisateur) :

Configuration du menu de session

2 - Arrêt - redémarrage - suspension

L'arrêt, le redémarrage et la suspension ne nécessitent pas d'installation supplémentaire. En cas de problème avec le redémarrage, essayer de lancer le noyau avec l'option :

reboot=pci

3 - Veille prolongée - veille hybride

La veille prolongée et la veille hybride nécessitent la présence d'un espace d'échange.

3.1 - Cas d'une partition d'échange

En cas de problème,

$ free -h
total used free shared buff/cache available
Mem: 7,7G 817M 5,0G 107M 1,9G 6,5G
Swap: 2,0G 7,5M 2,0G
$ sudo nano /etc/initramfs-tools/conf.d/resume
RESUME=UUID=305840d3-7d83-4e47-975c-a326a6be4001

Après modification, mettre à jour initramfs

$ sudo update-initramfs -u -k $(uname -r)

Il peut être nécessaire de redémarrer avant que l'hibernation soit fonctionnelle.

3.2 - Cas d'un fichier d'échange

Systemd ne prend pas en compte les fichiers d'échange, une solution consiste à utiliser uswsusp, qui pilote la suspension et le redémarrage depuis le noyau :

3.2.1 Pour mémoire : Création d'un fichier d'échange

$ sudo fallocate -l 1G /swapfile
$ sudo mkswp /swapfile
$ sudo nano /etc/fstab
/swapfile swap swap defaults 0 0
$ sudo sysctl -w vm.swappiness=1
$ sudo echo vm.swappiness=1 >/etc/sysctl.d/local.conf
$ sudo swapon /swapfile
swapon: /swapfile : droits 0644 non sûrs, 0600 conseillées.
$ sudo chmod 0600 /swapfile

3.2.2 Installation et configuration de uswusp

$ sudo aptitude install uswsusp
$ sudo dpkg-reconfigure -pmedium uswsusp
## Continuer sans espace valide : Oui
## Espace pour suspension : Sélectionner la partition contenant le fichier swap
## Chiffrage : Si la partition est déjà chiffrée, répondre Non
$ sudo nano /etc/uswsusp.conf
# /etc/uswsusp.conf(5) -- Configuration file for s2disk/s2both resume device =/dev/disk/by-uuid/4530c785-8e57-4d99-9c74-5a0c463e546e compress = y early writeout = y image size = 2147483647 RSA key file = /etc/uswsusp.key shutdown method = platform resume offset = 34816 encrypt = n
$ lsblk -f /dev/sda3
NAME FSTYPE LABEL UUID MOUNTPOINT
sda3 crypto_LUKS 9a907e3e-ca19-4a4f-8e7d-d42f2f16fe81
└─kroot ext4 kroot 4530c785-8e57-4d99-9c74-5a0c463e546e /

l'identifiant concerne non pas le container, mais le contenu de la partition. Pour plus de lisibilité, on peut remplacer la ligne

resume device =/dev/disk/by-uuid/4530c785-8e57-4d99-9c74-5a0c463e546e

par

resume device=/dev/mapper/kroot
# swap-offset /swapfile
resume offset = 34816
$ sudo dpkg-reconfigure -pmedium uswsusp

Le nouvel identifiant de partition éventuel sera proposé : le sélectionner.

3.2.3 Modifier la ligne de lancement de linux

$ sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/mapper/kroot quiet"
$ sudo update-grub

3.2.4 Test avec les commandes de uswsusp

uswsusp fournit des commandes permettant de tester la mise en veille prolongée, la mise en veille hybride, la suspension : s2disk, s2both, s2ram

$ sudo glxgears & s2disk

# Le système se met en hybernation
# Le redémarrer avec le bouton arrêt/marche
# Si la partition est chiffrée, le mot de passe est demandé
# Le menu grub s'affiche, le noyau est lancé, le contenu de la mémoire d'échange est rechargé en mémoire vive.
# L'écran s'affiche tel qu'il était au moment du lancement de la mise en veille, l'écran glxgears s'anime immédiatement

$ sudo glxgears & s2ram

3.2.5 Prise en compte par systemd

Afin que les commandes s2disk et s2ram soient mises en oeuvre par systemd :

$ sudo cp /lib/systemd/system/systemd-hibernate.service /etc/systemd/system/
$ sudo cp /lib/systemd/system/systemd-hybrid-sleep.service /etc/systemd/system/
$ sudo nano /etc/systemd/system/systemd-hibernate.service
ExecStart=/bin/sh -c 's2disk && run-parts --regex .\* -a post /lib/systemd/system-sleep'
$ sudo nano /etc/systemd/system/systemd-hybrid-sleep.service /etc/systemd/system/
ExecStart=/bin/sh -c 's2both && run-parts --regex .\* -a post /lib/systemd/system-sleep'
$ sudo systemctl daemon-reload
$ sudo glxgears & sudo systemctl hibernate
$ sudo systemctl hybrid-sleep

Note : Si l'animation de démarrage Plymouth est en place, elle sera plus ou moins perturbée...