web-dev-qa-db-fra.com

Comment puis-je hiberner sur Ubuntu 16.04?

Comment devrais-je hiberner avec succès 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

80
Mahyar

Vous pouvez utiliser

Sudo pm-hibernate 

pour vérifier si le fonctionnement en veille prolongée fonctionne sur votre système ( cela mettra en veille votre ordinateur ).

Si cela ne fonctionne pas, vérifiez si la taille de votre swap est au moins égale à celle de 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 nano fenêtre.

[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, fermez nano et redémarrez le système pour que Hibernate disponible apparaisse dans "Options d'alimentation".

Référence: Comment hiberner mon ordinateur? dans la documentation officielle de Ubuntu 16.04.

Esperons que ça marche. Cela a fonctionné pour moi après avoir essayé toutes les autres options.

60
NirajW

Veille prolongée en utilisant systemctl et en l’utilisant dans les cas difficiles

Pour moi, pm-hibernate échoue toujours. Après quelques ajustements, j'ai pu hiberner en utilisant l'interface de systemd (init system à partir de 16.04). J'ai également réussi à le faire fonctionner le 17.04 avec un fichier d'échange. Cette étude de cas peut être utile pour les personnes ayant des problèmes.

Premier essai:

Sudo systemctl hibernate

Si cela échoue, commencez le dépannage: dans l'état de veille prolongée (HTD ou ACPI S4), l'état de l'ordinateur est écrit sur le disque, de sorte qu'aucune alimentation n'est nécessaire pour le conserver. L'état est écrit sur une partition d'échange ou dans 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 d'échange ou votre fichier d'échange devra peut-être avoir la même taille que RAM pour permettre l'hibernation, mais il y a de bonnes chances que vous puissiez l'hiberner si sa taille est au moins égale à 2/5 de la taille de la RAM, selon la page wiki Arch , essayez donc d’autres étapes avant d’augmenter la taille de l’échange.

Si votre problème est que vous obtenez un démarrage en mode minimal au lieu du CV attendu, vous devez au moins probablement définir un paramètre de démarrage pour rechercher l'image du disque .

Trouvez votre partition d'échange:

grep swap /etc/fstab

pour moi cela retourne (sortie partielle)

# swap was on /dev/mmcblk0p3 during installation

/dev/mmcblk0p3 est la partition à spécifier

Ajouter un paramètre de démarrage:

sudoedit /etc/default/grub

A 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 sinon les modifications n'auront aucun effet.

Maintenant, vous devez redémarrer. Ensuite, vous pouvez essayer de hiberner, en lançant la commande:

Sudo systemctl hibernate

Pour reprendre, appuyez sur le bouton d'alimentation et le système va démarrer.

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 également celui-ci .

Définissez quelques paramètres de démarrage supplémentaires 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. J'ai mis ceci:

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 résumé de l'hibernation.

Dans mon cas, après la reprise, j’ai perdu le WiFi, et le noyau était clairement bouleversé, car la plupart des commandes (par exemple, lire quelque chose sur /sys, recharger des modules ou n’importe quelle commande systemctl) ne fonctionneraient pas - le processus semblerait démarrer et s’arrêter reviendrait à la normale après le redémarrage bien sûr). En regardant le système s’arrêter 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", j’ai donc deviné que le module de pilote sans fil Broadcom était à blâmer. Bien sûr, j'ai ajusté ma procédure d'hibernation pour décharger le module en premier:

Sudo modprobe -r brcmfmac
Sudo systemctl hibernate

en reprise je réinsère le module

Sudo modprobe brcmfmac

Et tout a fonctionné parfaitement. Je dois également lister le module btsdio qui semble être incompatible avec brcmfmac


Mise à jour: mise en veille prolongée à l'aide d'un fichier d'échange le 17.04.

Encore une fois, avec l'aide de la page Arch wiki et quelques modifications supplémentaires, j'ai réussi à faire passer l'hibernation en mode 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 numéro 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 que la partition puisse reprendre. 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"

/dev/mmcblk1p2 est ma partition racine (la vôtre sera probablement quelque chose comme /dev/sda2).

Pendant la reprise, je voyais que l'image se chargeait correctement, mais dans mon cas (juste un exemple - YMMVAPD), quelques pilotes supplémentaires (i2c_designware) ont généré des erreurs et j'ai bloqué la reprise du système. La veille prolongée fonctionne si je décharge ces modules en plus de brcmfmac, mais le système devient rapidement inutilisable sans ces modules. J'ai donc fait une sorte de script pour décharger les modules buggy et les réinsérer immédiatement en 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.


TL; DR

Utilisez systemd, définissez un paramètre d’amorçage pour le reprendre à partir du swap, identifiez les pilotes défectueux et déchargez-les avant de lancer le mode 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 simple script pour lancer le mode veille prolongée.

58
Zanna

Je pense que la manière d'activer l'hibernation pour la réponse 16.04 est connue de tous, comme décrit dans le buntu Wiki (voir ci-dessous si vous avez besoin des étapes). Mais les choses à vérifier ne sont pas approfondies, je pense. Au moins, c'est ce que j'ai trouvé.

Choses à vérifier

D'après mes propres tests, j'ai au moins trouvé une vérification supplémentaire à effectuer. Je n'ai trouvé à ce sujet nulle part sur Internet.

Voici quelques vérifications -

  1. Vérifiez que vous n’utilisez aucune partition btrfs . Oui . D'après mon test, j'ai constaté que si vous avez des partitions btrfs , la veille prolongée ne fonctionnera pas. Supprimer ou changer le type de partition en ext4 ne m'a pas aidé. Je devais supprimer le package btrfs-tools.

    Sudo apt-get purge btrfs-tools
    

    Vous voudrez peut-être vérifier d'autres nouveaux types de partition qui ne sont pas bien testés. Sans supprimer le package, la mise en liste noire du pilote pourrait également fonctionner, mais je ne l'ai pas testée.

  2. Vous devez également vérifier que votre partition de swap est suffisamment grande pour contenir le contenu de la RAM. Si votre RAM est de 4 Go, le swap doit avoir une taille d'au moins 4 Go (vous devez allouer quelques Mo supplémentaires pour plus de sécurité).

Étapes pour activer le mode veille prolongée

Il implique ces étapes

  1. 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
    
  2. Mettez ce contenu dans 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
    
  3. Enregistrez le fichier en appuyant sur Ctrl-O. Sortir avec Ctrl-X

  4. Redémarrez le démon polkitd

    Sudo systemctl restart polkitd.service
    

Il devrait permettre d'hiberner.

19
Anwar

Démarrage sécurisé

(J'ai posé un question similaire demandant de mettre l'accent sur les réponses basées sur systemd, partageant ma solution ici pour les personnes qui suivent cette question)

Cette solution provient de Fedora rubriques (ils sont passés à systemd il y a quelque temps, donc il y a plus de matériel là-bas).

Dans mon cas (nouvelle installation de la version 16.04.1 sur une machine qui prenait toujours en charge l'hibernation), l'appel du code obsolète Sudo pm-hibernate ne semblait rien faire et l'approche actuelle de systemd, systemctl hibernate, retournait:

Failed to hibernate system via logind: Sleep verb not supported

Il s’avère que c’est le coupable qui a été installé dans le démarrage sécurisé: lors de l’installation de 16.04, il vous est demandé ce que vous voulez en faire (ce qui est une nouveauté, si je me souviens bien) et je l’ai gardé activé sans trop y penser.

Sur mon ordinateur avec démarrage sécurisé activé, 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é un cat /sys/power/disk et obtenu:

 [platform] shutdown reboot suspend 

qui a l'air mieux. Et en effet, l'appel de systemctl hibernate aboutit à une séquence d'hibernation/décongélation réussie.

De plus, après cela, je pouvais voir que l'hibernation était disponible en option à divers endroits de l'interface graphique, sans qu'il soit nécessaire d'utiliser polkit hack. Donc, il semble que systemd était en train de deviner de /sys/power/disk que le système n’était pas en mesure de mettre en veille prolongée.

6
Marc

Cette instruction a fonctionné pour mon installation Ubuntu 18.04.

  1. Sudo apt install hibernate Il installera hibernate et d’autres dépendances nécessaires pour hiberner
  2. grep swap /etc/fstab (UUID du doigt)
  3. sudoedit /etc/default/grub À la ligne GRUB_CMDLINE_LINUX_DEFAULT = "quiet splash", ajoutez l'UUID du swap. La ligne ressemble à ceci: GRUB_CMDLINE_LINUX_DEFAULT = "Resume de démarrage silencieux = UUID de swap"
  4. Sudo update-grub
  5. Redémarrez et après le redémarrage Sudo systemctl hibernate. Si tout fonctionne bien, ajoutez une entrée de menu.
  6. Sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla maintenant coller ceci:
[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

copié de https://askubuntu.com/a/819891/7122

  1. Redémarrer le PC
  2. Installer https://extensions.gnome.org/extension/755/hibernate-status-button/
5
Krzysztof Swiatly

Répondant à ma propre réponse à la réponse de kelvinelove, le fichier qu’il suggère de modifier n’existait pas sur mon système (nouvelle Ubuntu 16.04). Au lieu de cela, j'ai fait ceci:

  1. Sudo nano /var/lib/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla

  2. Recherchez ces sections (elles sont juste l'une à côté de l'autre):

    [Désactiver la veille prolongée par défaut dans upower] Identity = utilisateur_unix: * Action = org.freedesktop.upower.hibernate ResultActive = no

    [Désactiver hibernate par défaut dans logind] Identity = utilisateur_unix: * Action = org.freedesktop.login1.hibernate; org.freedesktop.login1.handle-hibernate-key; ResultActive = no

  3. Modifiez ResultActive = no en ResultActive = yes pour les deux.

  4. Appuyez sur Ctrl + O pour enregistrer le fichier.
  5. Redémarrez votre ordinateur
  6. L'option Hibernate est maintenant disponible dans vos menus d'alimentation.

EDIT: Gunnar a fait remarquer que ce fichier était écrasé si un certain paquet était mis à jour, donc, selon vos intentions, ce n'est probablement pas la meilleure solution.

Source: http://www.zedt.eu/tech/linux/enable-hibernation-xubuntu-16-04/

4
fgblomqvist

Il existe de très bonnes ressources ici pour vous aider à résoudre certains des problèmes les plus courants en matière d'hibernation sous Ubuntu.

Dans mon cas, faire tourner Ubuntu 16.10 sur un Lenovo u300s, pour que l'hibernation fonctionne correctement, je devais faire ce qui suit:

  • Créez un fichier d'échange de taille appropriée (je règle généralement une taille d'environ 1x, mais j'ai entendu jusqu'à 1.6x et 2x).
  • Editez /etc/default/grub pour inclure la ligne suivante:

    GRUB_CMDLINE_LINUX_DEFAULT = "pci silencieux = nomsi RESUME = UUID = 92781adb-f2a6-4f15-88fc-e1ce801291dd"

RESUME fait référence à votre UUID de fichier d'échange spécifique. En particulier, sur ma machine, le paramètre pci=nomsi était la clé.

Bonne chance!

3
richbl

Premièrement, je vous recommande de vérifier si votre ordinateur prend en charge le mode veille prolongée, car si le fonctionnement en veille prolongée est désactivé par défaut, c’est parce que les résultats sont parfois désagréables sur certains ordinateurs. Testez votre machine en ouvrant le terminal (Ctrl+Alt+T) puis en tapant Sudo pm-hibernate

Votre machine devrait hiberner. Réveillez votre machine après l'hibernation et observez si elle se comporte mal ou si elle agit normalement. Si vous rencontrez une anomalie après l'hibernation, je vous conseille donc de ne pas poursuivre la procédure suivante. Toutefois, si cela fonctionne correctement, continuez à activer le mode veille prolongée en procédant comme suit:

Sudo gedit /etc/polkit-1/localauthority/50-local.d/com.ubuntu.enable-hibernate.pkla

Editez le fichier ouvert et ajoutez ces lignes:

[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é, une option de mise en veille prolongée a été ajoutée dans le menu d'alimentation, dans le coin supérieur droit des paramètres.

3
kelvinelove

Pour moi, cela fonctionne pour installer le package hibernate, redémarrer puis exécuter Sudo hibernate-disk. Je suis sûr qu'il est possible de l'ajouter au menu, mais ça ne vaut pas la peine.

2
Aiphee

Vous devez l'activer manuellement avec un petit effort. Il a été désactivé par défaut.

http://ubuntuhandbook.org/index.php/2014/04/enable-hibernate-ubuntu-14-04/

Ensuite, si cela ne fonctionne pas, il peut s'agir d'un problème de noyau 4.4.0 et vous devrez peut-être mettre à niveau le noyau.

1
Mookey