Mise à jour : Debian 9.2
Références :
Sommaire
systemd fournit les commandes permettant de contrôler l'arrêt et la mise en veille de l'ordinateur.
Arrêt
$ sudo systemctl poweroff
Arrêt avec redémarrage
$ sudo systemctl reboot
Mise en veille ou Suspension
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
Mise en veille prolongée ou Hibernation
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
Mise en veille hybride
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
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 :
La présentation et les options du menu sont configurables (clic droit sur le nom d'utilisateur) :
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
La veille prolongée et la veille hybride nécessitent la présence d'un espace d'échange.
En cas de problème,
vérifier que la partition d'échange est présente et active
$ 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
qu'elle est correctement identifiée dans le fichier resume
$ 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.
Si les problèmes subsistent, tester l'addition du paramètre rcpi=nomsi dans la ligne de lancement de linux : rpci=nomsi
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 :
Créer le fichier d'échange selon la méthode habituelle
$ sudo fallocate -l 1G /swapfile
$ sudo mkswp /swapfile
$ sudo nano /etc/fstab
/swapfile swap swap defaults 0 0
Désactiver éventuellement, l'utilisation de la mémoire d'échange pour le swapping en fonctionnement (swappiness=1), celui-ci n'aura lieu qu'en cas de débordement de la mémoire vive
$ sudo sysctl -w vm.swappiness=1
$ sudo echo vm.swappiness=1 >/etc/sysctl.d/local.conf
Activer le fichier d'échange et le protéger contre un accès utilisateur non privilégié
$ sudo swapon /swapfile
swapon: /swapfile : droits 0644 non sûrs, 0600 conseillées.
$ sudo chmod 0600 /swapfile
Installer la méthode alternative de suspension uswsusp
$ sudo aptitude install uswsusp
Configurer 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
La ligne resume device doit contenir l'identifiant de la partition contenant le fichier d'échange, exprimée sous la forme /dev/xxx ou /dev/disk/by-uudi comme ci-dessus. Dans le cas d'une partition chiffrée, comme ci-dessous
$ 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
- La valeur de resume offset peut-être vérifiée avec :
# swap-offset /swapfile
resume offset = 34816
$ sudo dpkg-reconfigure -pmedium uswsusp
Le nouvel identifiant de partition éventuel sera proposé : le sélectionner.
Modifier la ligne GRUB_CMDLINE_LINUX_DEFAULT de /etc/default/grub :
$ sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/mapper/kroot quiet"
$ sudo update-grub
uswsusp fournit des commandes permettant de tester la mise en veille prolongée, la mise en veille hybride, la suspension : s2disk, s2both, s2ram
Test de la mise en veille prolongée (hibernation) : suggestion, lancer un programme tel que glxgears avant de lancer la commande pour visualiser la bonne reprise d'activité
$ 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
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/
Remplacer la dernière ligne du fichier systemd-hibernate.service
$ sudo nano /etc/systemd/system/systemd-hibernate.service
ExecStart=/bin/sh -c 's2disk && run-parts --regex .\* -a post /lib/systemd/system-sleep'
Remplacer la dernière ligne du fichier systemd-hybrid-sleep.service
$ 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'
Redémarrer systemd
$ sudo systemctl daemon-reload
Tester la mise en veille hybride
$ sudo glxgears & sudo systemctl hibernate
Tester la mise en sommeil hybride
$ sudo systemctl hybrid-sleep
Note : Si l'animation de démarrage Plymouth est en place, elle sera plus ou moins perturbée...