Comment puis-je hiberner sur Ubuntu 16.04?

55

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

    
posée Mahyar 05.05.2016 - 21:01
la source

9 réponses

45

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.

    
réponse donnée NirajW 02.09.2016 - 08:01
la source
35

Veille prolongée en utilisant 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

/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

Mise à jour: Hibernation à l’aide d’un fichier d’échange le 17.04.

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"

/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.

TL; DR

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.

    
réponse donnée Zanna 05.09.2016 - 09:36
la source
17

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é.

Choses à vérifier

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 -

  1. 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.

  2. 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).

Étapes pour activer la mise en veille prolongée

Cela 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 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
    
  3. Enregistrez le fichier en appuyant sur Ctrl - O . Quittez avec Ctrl - X

  4. Redémarrez le démon polkitd

    sudo systemctl restart polkitd.service
    

Il devrait permettre hibernate.

    
réponse donnée Anwar 03.09.2016 - 05:12
la source
4

Démarrage sécurisé

(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.

    
réponse donnée Marc 11.01.2017 - 07:50
la source
2

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.

    
réponse donnée kelvinelove 06.05.2016 - 09:53
la source
2
En développant mon propre commentaire sur la réponse de kelvinelove, le fichier qu’il suggère d’éditer n’existait pas sur mon système (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 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

  3. Remplacez ResultActive = no par ResultActive = yes pour les deux.

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

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

    
réponse donnée fgblomqvist 24.08.2016 - 03:47
la source
2

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:

  • Créez un fichier d'échange de taille appropriée (généralement pour ~ 1x in taille, mais j'ai entendu jusqu'à 1,6x et 2x)
  • 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!

    
réponse donnée richbl 14.11.2016 - 01:34
la source
1

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

    
réponse donnée Aiphee 18.11.2016 - 08:54
la source
0

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

lien

Ensuite, si cela ne fonctionne pas, cela peut être un problème de noyau 4.4.0, et vous devrez peut-être mettre à jour le noyau.

    
réponse donnée Mookey 05.05.2016 - 21:39
la source

Lire d'autres questions sur les étiquettes