Comment puis-je mettre en veille Ubuntu 16.04?
J'ai essayé presque toutes les solutions sur le Web, mais aucune d'entre elles n'était réellement utile. J'ai trouvé mon problème presque complètement similaire à celui-ci
Vous pouvez utiliser
sudo pm-hibernate
pour vérifier si la mise en veille prolongée fonctionne sur votre système ( cela mettra votre ordinateur en veille ).
Si cela ne fonctionne pas, vérifiez si votre taille de swap est au moins aussi grande que votre RAM.
Pour ajouter cette option au menu des paramètres, vous pouvez créer un fichier de configuration. Ouvrez une fenêtre de terminal et exécutez cette commande:
sudo nano /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
Il ouvre nano avec un fichier vide. Copiez les lignes ci-dessous et collez-les dans la fenêtre nano.
[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes
[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes
Enregistrez ensuite les modifications et fermez nano et redémarrez le système pour que Hibernate soit disponible dans "Options d'alimentation".
Référence: Comment puis-je hiberner mon ordinateur? dans la documentation officielle d'Ubuntu 16.04.
J'espère que ça marche. Cela a fonctionné pour moi après avoir essayé toutes les autres options.
systemctl
et le faire fonctionner dans des cas difficiles Pour moi, pm-hibernate
échoue toujours. Après quelques ajustements, j'ai été capable d'hiberner en utilisant l'interface de systemd (système d'initialisation en 16.04 et supérieur). J'ai également réussi à le faire fonctionner sur 17.04 avec un fichier d'échange. Cette étude de cas peut être utile pour d’autres personnes ayant des problèmes.
Premier essai:
sudo systemctl hibernate
Si cela échoue, commencez le dépannage: dans l'état hibernation (HTD ou ACPI S4), l'état de la machine est écrit sur le disque afin qu'aucune alimentation ne soit nécessaire pour le préserver. L'état est écrit sur une partition de swap ou sur un fichier d'échange. Remarque: si vous utilisez BTRFS, n'essayez PAS d'utiliser un fichier d'échange, car cela pourrait endommager le système de fichiers
Votre partition de swap ou votre fichier d'échange doit avoir la même taille que la RAM pour permettre l'hibernation, mais il y a de bonnes chances que vous puissiez mettre en veille prolongée si la taille de la RAM est au moins 2/5, selon < a href="https://wiki.archlinux.org/index.php/Power_management/Suspend_and_hibernate#About_swap_partition.2Ffile_size"> la page du wiki Arch , essayez d’abord d’autres étapes avant d’augmenter échange de taille.
Si votre problème est que vous obtenez un démarrage en mode minimal au lieu du CV attendu, au minimum, vous devez probablement définir un paramètre de démarrage pour rechercher l'image disque
Trouvez votre partition de swap:
grep swap /etc/fstab
pour moi cela revient (sortie partielle)
# swap was on /dev/mmcblk0p3 during installation
où /dev/mmcblk0p3
est la partition à spécifier
Ajoutez un paramètre de démarrage:
sudoedit /etc/default/grub
À la ligne commençant par GRUB_CMDLINE_LINUX_DEFAULT
, ajoutez resume=/dev/YourSwapPartition
à la section entre guillemets (remplacez-la par la partition que vous avez identifiée précédemment). En utilisant mon exemple:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=/dev/mmcblk0p3"
Chaque fois que vous modifiez ce fichier, vous devez exécuter sudo update-grub
ou les modifications n'auront aucun effet.
Maintenant, vous devez redémarrer. Ensuite, vous pouvez essayer de mettre en veille prolongée en émettant la commande suivante:
sudo systemctl hibernate
Pour reprendre, appuyez sur le bouton d'alimentation et le système démarrera.
Si vous avez toujours des problèmes, démarrez le débogage.
J'inclus mon cas ci-dessous à titre d'exemple, mais des informations détaillées sur le débogage des états S peuvent être trouvées dans ce blog et aussi celui-ci .
Définissez d'autres paramètres de démarrage pour capturer plus d'informations. Supprimez quiet
et splash
et ajoutez initcall_debug
et no_console_suspend
, ce qui entraînera l'impression des appels système init sur la console afin que vous puissiez voir ce qui ne va pas. Je mets ça:
GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/mmcblk0p3 no_console_suspend initcall_debug"
Ce qui m'a aidé à voir ce qui n'allait pas sur le CV de l'hibernation.
Dans mon cas, après la reprise, j'ai perdu le WiFi, et le noyau était clairement dérangé car la plupart des commandes (par exemple, lire quelque chose de /sys
, recharger des modules ou toute commande systemctl
) ne fonctionnerait pas. commencer et juste se bloquer (tout cela serait retourné à la normale après le redémarrage de cours). En regardant le système se fermer très lentement et en lisant tous les messages de débogage, j'ai remarqué qu'il y avait beaucoup de problèmes avec "brcm", alors je suppose que mon module de pilote sans fil Broadcom était à blâmer. Bien sûr, j'ai ajusté ma procédure d'hibernation pour décharger d'abord le module:
sudo modprobe -r brcmfmac
sudo systemctl hibernate
en résumé je réinsère le module
sudo modprobe brcmfmac
Et tout fonctionnait parfaitement. Je dois aussi mettre en liste noire le module btsdio
qui semble incompatible avec brcmfmac
Encore une fois, avec l'aide de la page du wiki Arch et quelques retouches supplémentaires, j'ai réussi à obtenir une mise en veille prolongée le 17.04 avec un fichier d'échange. Cela nécessitait un paramètre de démarrage supplémentaire, resume_offset=n
où n est le premier nombre sous physical_offset
dans la sortie de sudo filefrag -v /swapfile
:
$ sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 1425873920 (348114 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 32767: 34816.. 67583: 32768:
1: 32768.. 63487: 67584.. 98303: 30720:
....
Par conséquent, le paramètre de démarrage supplémentaire dans mon cas est resume_offset=34816
. Vous devez toujours définir un paramètre de démarrage pour la partition à partir de laquelle Ce sera la partition racine (ou la partition sur laquelle se trouve votre fichier d'échange) Mes paramètres sont maintenant:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=/dev/mmcblk1p2 resume_offset=34816"
Où /dev/mmcblk1p2
est ma partition racine (la vôtre a plus de chances d'être quelque chose comme /dev/sda2
).
Pendant la reprise, j'ai vu l'image se charger correctement, mais dans mon cas (juste un exemple - YMMVAPD), d'autres pilotes ( i2c_designware
) ont jeté des erreurs et j'ai complètement bloqué le système. L'hibernation fonctionne si je décharge ces modules en plus de brcmfmac
, mais le système devient rapidement inutilisable sans ces modules. J'ai donc créé une sorte de script pour décharger les modules buggés et les réinsérer immédiatement sur le CV:
# remove buggy modules
modprobe -r brcmfmac i2c_designware_platform i2c_designware_core &&
# hibernate
echo disk > /sys/power/state
# reinsert
modprobe i2c_designware_core i2c_designware_platform brcmfmac
Quand je veux hiberner, je lance sudo bash script
. Cela fonctionne très bien.
Utilisez systemd, définissez un paramètre de démarrage pour reprendre à partir du swap, identifiez les pilotes défectueux et déchargez-les avant de lancer l'hibernation. Si le système ne peut pas fonctionner longtemps sans ces modules ou si vous devez en décharger plusieurs, il peut être plus facile d'utiliser un script simple pour lancer l'hibernation.
Je pense que la façon d’activer la mise en veille prolongée pour la version 16.04 est connue de tous comme décrit dans la Ubuntu Wiki (voir ci-dessous si vous avez besoin des étapes). Mais je pense que les choses à vérifier ne sont pas complètes. Au moins, c'est ce que j'ai trouvé.
D'après mes propres tests, j'ai au moins trouvé une vérification supplémentaire à effectuer. Je n'ai rien trouvé à ce sujet sur Internet.
Voici quelques vérifications -
Vérifiez que vous n’utilisez pas de partitions btrfs . Oui . De mon test, j'ai trouvé que si vous avez des partitions btrfs , la mise en veille prolongée ne fonctionnera pas. La suppression ou la modification du type de partition en ext4
ne m'aide pas. Je devais supprimer le package btrfs-tools
.
sudo apt-get purge btrfs-tools
Vous voudrez peut-être vérifier d’autres nouveaux types de partitions qui ne sont pas bien testés. Sans supprimer le paquet, la liste noire du pilote peut aussi fonctionner, mais je n'ai pas testé cela.
Vous devez également vérifier que vous avez une partition de swap suffisamment grande pour contenir le contenu de la RAM. Si votre RAM est de 4 Go, swap doit être au moins de 4 Go (vous devez allouer quelques Mo supplémentaires pour être sûr).
Cela implique ces étapes
Créez un fichier en tant que root dans /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
sudo -i nano /etc/polkit-1/localauthority/50-local.d/enable-hibernate.pkla
Mettez ces contenus sur ce fichier
[Re-enable hibernate by default in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes
[Re-enable hibernate by default in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes
Enregistrez le fichier en appuyant sur Ctrl - O . Quittez avec Ctrl - X
Redémarrez le démon polkitd
sudo systemctl restart polkitd.service
Il devrait permettre hibernate.
(J'ai posé une question similaire demandant pour vous concentrer sur les réponses basées sur Systemd, partager ma solution ici pour les personnes qui suivent cette question)
Cette rubrique provient des rubriques Fedora . le passage à systemd il y a quelque temps donc il y a plus de matériel là-bas).
Dans mon cas (nouvelle version 16.04.1 installée sur une machine qui supporte toujours l'hibernation), appeler le sudo pm-hibernate
obsolète ne semblait rien faire, et l'approche systemd à jour, systemctl hibernate
, renverrait:
Failed to hibernate system via logind: Sleep verb not supported
Il s'avère que le démarrage sécurisé était le coupable: installer 16.04 on vous demande ce que vous voulez faire avec (ce qui est une nouveauté pour autant que je puisse m'en souvenir) et je l'ai gardé allumé sans y penser. / p>
Sur ma machine avec démarrage sécurisé, cat /sys/power/disk
a répondu:
[disabled]
Après le redémarrage et la désactivation du démarrage sécurisé dans les paramètres du BIOS (ceux-ci sont spécifiques à la machine, mais généralement assez simples), j'ai essayé cat /sys/power/disk
et obtenu:
[platform] shutdown reboot suspend
qui a l'air mieux. Et en effet, appeler systemctl hibernate
entraîne une séquence d'hibernation / décongélation réussie.
De plus, après cela, je pouvais voir l’hibernation disponible en option dans différents endroits de l’interface graphique, sans avoir besoin de hack de polkit
. Donc, il semble que systemd
était en train de deviner de /sys/power/disk
que le système n'était pas capable de hiberner.
Tout d'abord, je vous recommande de tester si votre machine prend en charge l'hibernation, car la désactivation par défaut de l'hibernation est due à des résultats parfois désagréables sur certaines machines. Testez votre machine en ouvrant le terminal ( Ctrl + Alt + T ), puis en tapant sudo pm-hibernate
Votre machine doit hiberner. Réveillez votre machine après l'hibernation et observez si elle se comporte mal ou si elle agit normalement. Si vous constatez une anomalie après l'hibernation, je vous conseille de ne pas poursuivre la procédure suivante. Cependant, si cela fonctionne correctement, continuez à activer l’hibernation en procédant comme suit:
sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla
Modifiez le fichier ouvert et ajoutez les lignes suivantes:
[Re-enable hibernation]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes
Après cela, redémarrez votre ordinateur, et après vous être connecté, vous devriez voir apparaître une option de veille prolongée dans le menu Power, dans le coin supérieur droit des paramètres.
sudo nano /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla
Recherchez ces sections (elles sont juste l'une à côté de l'autre):
[Désactiver hibernation par défaut dans upower] Identity = unix-user: * Action = org.freedesktop.upower.hibernate ResultActive = no
[Désactiver la mise en veille prolongée par défaut dans logind] Identity = unix-user: * Action = org.freedesktop.login1.hibernate; org.freedesktop.login1.handle-hibernate-key; ResultActive = no
Remplacez ResultActive = no par ResultActive = yes pour les deux.
EDIT: Gunnar a souligné que ce fichier est écrasé si un paquet est mis à jour, ce qui, selon vos intentions, n’est probablement pas la meilleure solution.
Source: lien
Il existe de très bonnes ressources pour vous aider à résoudre certains des problèmes d'hibernation les plus courants sous Ubuntu.
Dans mon cas, sous Ubuntu 16.10 sur un Lenovo U300, pour que le mode veille prolongée fonctionne correctement, je devais procéder comme suit:
Modifiez /etc/default/grub
pour inclure la ligne suivante:
GRUB_CMDLINE_LINUX_DEFAULT="pci silencieux splash = nomsi RESUME = UUID = 92781adb-f2a6-4f15-88fc-e1ce801291dd"
RESUME fait référence à votre fichier d'échange spécifique UUID. En particulier, sur ma machine, la clé était pci=nomsi
.
Bonne chance!