Page 1 sur 1

[Systemd] Suspend-then-hibernate [RESOLU]

Publié : lun. 25 févr. 2019, 01:26
par ed0c
Bonjour,

Je cherche à utiliser la fonction suspend-then-hibernate. J'utilise l'environnement de bureau Gnome.
L'hibernation fonctionne correctement via :

Code : Tout sélectionner

systemctl hibernate
Mais je n'arrive pas à faire fonctionner suspend-then-hibernate en fermant l'écran de mon portable ou via :

Code : Tout sélectionner

systemctl suspend-then-hibernate
J'ai lu le wiki ainsi que la page dédiée sur freedesktop.
J'ai donc modifié le fichier /etc/systemd/sleep.conf comme ceci :

Code : Tout sélectionner

[Sleep]
#AllowSuspend=yes
#AllowHibernation=yes
#AllowSuspendThenHibernate=yes
#AllowHybridSleep=yes
SuspendMode=suspend
SuspendState=disk
HibernateMode=suspend
HibernateState=disk
#HybridSleepMode=suspend platform shutdown
#HybridSleepState=disk
HibernateDelaySec=1min
Ce que je ne comprends pas en particulier c'est la différence entre SupendMode/SuspendState ou HibernateMode/HibernateState.

Merci pour vos éclaircissements !

Re: [Systemd] Suspend-then-hibernate

Publié : lun. 25 févr. 2019, 07:32
par benjarobin
Bonjour, si tu n'arrives pas à réaliser l'opération depuis la commande systemctl, cela ne sert à rien d'essayer d'automatiser la chose.
Qu'est ce qui se passe quand tu tentes de le faire ? Des choses dans les logs ?

Je te conseil vivement de lire la documentation https://www.freedesktop.org/software/sy ... onf.d.html et donc de corriger ton fichier sleep.conf

Re: [Systemd] Suspend-then-hibernate

Publié : mer. 27 févr. 2019, 00:46
par ed0c
Bonsoir Benjarobin et merci pour ta réponse,

J'avais lu la page de freedesktop dont tu avais mis le lien.
Je ne sais pas ce qui s'est passé, mais après avoir retesté sans modifier sleep.conf

Code : Tout sélectionner

systemctl suspend-then-hibernate
cela fonctionne!

Le problème maintenant c'est que cela ne fonctionne pas lorsque je met mon ordinateur en veille en rabattant l'écran.
J'ai tenté une option dans sleep.conf que j'ai trouvé sur un forum de ubuntu :

Code : Tout sélectionner

HandleLidSwitch=suspend-then-hibernate
Malheureusement, c'est sans succès.
Mon log de suspend.service :

Code : Tout sélectionner

févr. 26 19:35:54 grunt systemd[1]: Starting Suspend...
févr. 26 19:35:54 grunt systemd-sleep[1141]: /etc/systemd/sleep.conf:7: Unknown lvalue 'HandleLidSwitch' in section 'Sleep', ignoring
févr. 26 19:35:54 grunt systemd-sleep[1141]: Suspending system...
févr. 26 19:39:39 grunt systemd-sleep[1141]: System resumed.
févr. 26 19:39:39 grunt systemd[1]: systemd-suspend.service: Succeeded.
févr. 26 19:39:39 grunt systemd[1]: Started Suspend.
La fonction HandleLidSwitch n'est pas reconnue.
Aurais-tu une petite idée?
Bien cordialement

Re: [Systemd] Suspend-then-hibernate

Publié : mer. 27 févr. 2019, 09:06
par benjarobin

Re: [Systemd] Suspend-then-hibernate

Publié : ven. 01 mars 2019, 16:41
par ed0c
Bonjour,
Alors comme dit plus haut, j'avais lu la page de freedesktop, mais je l'avais mal lu
Je n'avais pas vu qu'il fallait modifier le fichier /etc/systemd/logind.conf (et non pas sleep.conf), ce que j'ai fait ainsi

Code : Tout sélectionner

HandleLidSwitch=suspend-then-hibernate
HandleLidSwitchExternalPower=suspend-then-hibernate
Malheureusement, cela ne fonctionne pas. Et j'ai beau lire la page, je ne vois pas ce qui cloche.
J'ai modifié le paramètres hibernatedelaysec dans /etc/systemd/sleep.conf ainsi :

Code : Tout sélectionner

HibernateDelaySec=10
Afin d'avoir un delai de 10secondes entre la mise en veille et l'hibernation (pour tester)
Si je regarde dans les logs, systemd-suspend-then-hibernate est bien lancé, mais l'hibernation ne fonctionne pas.
Au lieu de cela il y a un "resume" au bout d'un peu moins de 10sec (dans le log, l'ordinateur reste lui en veille)

Code : Tout sélectionner

mars 01 11:31:18 grunt systemd[1]: Starting Suspend; Hibernate if not used for a period of time...
mars 01 11:31:18 grunt systemd-sleep[1523]: Suspending system...
mars 01 11:31:29 grunt systemd-sleep[1523]: System resumed.
mars 01 11:31:29 grunt systemd-sleep[1523]: Suspending system...
mars 01 11:32:14 grunt systemd-sleep[1523]: System resumed.
mars 01 11:32:14 grunt systemd[1]: systemd-suspend-then-hibernate.service: Succeeded.
mars 01 11:32:14 grunt systemd[1]: Started Suspend; Hibernate if not used for a period of time.
Sachant que dans systemd-logind, j'ai ce log justifiant les horaires d'ouverture et fermeture de mon écran :

Code : Tout sélectionner

mars 01 11:31:16 grunt systemd-logind[397]: Lid closed.
mars 01 11:31:16 grunt systemd-logind[397]: Suspending, then hibernating...
mars 01 11:32:14 grunt systemd-logind[397]: Lid opened.
mars 01 11:32:14 grunt systemd-logind[397]: Operation 'sleep' finished.
Petite question et petite piste à explorer : Cela vient pas de gnome ce problème ?

Re: [Systemd] Suspend-then-hibernate

Publié : ven. 01 mars 2019, 16:50
par ed0c
Je viens de tester quelques chose :
Si je lance la commande :

Code : Tout sélectionner

systemctl suspend-then-hibernate

- en tant qu'utilisateur , la mise en veille se fait bien, l'hibernation non
- en tant qu'admin (via sudo), la mise en veille se fait bien, et l'hibernation aussi !

Donc j'avance, mais je ne vois toujours pas comment régler le problème

Re: [Systemd] Suspend-then-hibernate

Publié : dim. 03 mars 2019, 16:47
par benjarobin
C'est normal que l'hibernation ne se fasse pas de suite, je ne comprends pas pourquoi elle se fait par contre en root...

Qu'est ce que tu veux vraiment faire ? Car je pense que tu n'utilises pas la bonne commande...

Re: [Systemd] Suspend-then-hibernate

Publié : lun. 04 mars 2019, 04:09
par ed0c
Ce que j'aimerais, c'est pouvoir rabattre mon écran d'ordinateur, qu'il se mette en veille.
Puis au bout de 15 min par exemple, j'aimerais qu'il passe en hibernation.
J'avais trouvé un script sur une précédente installation d'archlinux qui me permettait de faire ça, mais je me suis dit que pour cette installation actuelle, une solution plus élégante via l'outil system-then-hibernate serait intéressante. Et puis ça me permettrait en plus de maîtriser un nouvel outil.
Malheureusement ça ne fonctionne pas, et je suis bien d'accord, je ne comprends pas pourquoi la commande passe en root.
Je vais poursuivre mes recherches de mon côtés. Si tu as une idée n'hésite pas à m'en faire part.
Merci en tout cas

Re: [Systemd] Suspend-then-hibernate

Publié : lun. 04 mars 2019, 08:24
par benjarobin
Si tu fermes ta session de gnome, et que tu fermes l'écran as tu plus de chance ?

Re: [Systemd] Suspend-then-hibernate

Publié : lun. 04 mars 2019, 20:36
par ed0c
Bon j'ai fini par trouver la solution.
Après avoir tenté ce que tu me proposais, je me suis rendu compte que le problème était toujours là, et qu'on pouvait donc écarter la thèse que c'était Gnome qui empêchait l'hibernation.
Puis j'ai retenté en root. Et rebelote, ça ne fonctionne toujours pas.
J'ai donc revu les fichiers de log et je me suis aperçu qu'au bout du temps imparti, il y avait une phase de réveil du pc, puis de remise en veille.
J'ai donc modifié mon fichier /etc/systemd/sleep.conf ainsi :

Code : Tout sélectionner

[Sleep]
#AllowSuspend=yes
#AllowHibernation=yes
#AllowSuspendThenHibernate=yes
#AllowHybridSleep=yes
#SuspendMode=suspend
#SuspendState=mem
#HibernateMode=suspend
#HibernateState=disk
#HybridSleepMode=suspend platform shutdown
#HybridSleepState=disk
HibernateDelaySec=15
J'ai donc désactivé les paramètres que je ne maîtrisais pas, laissant le tout par défaut. J'ai juste laissé le délai avant l'hibernation.
Comme dit plus haut, mon fichier /etc/systemd/logind.conf ressemble à ça :

Code : Tout sélectionner

HandleLidSwitch=suspend-then-hibernate
HandleLidSwitchExternalPower=suspend-then-hibernate
Et cela fonctionne.
J'ai retenté avec ce fichier sleep.conf, par curiosité :

Code : Tout sélectionner

[Sleep]
#AllowSuspend=yes
#AllowHibernation=yes
#AllowSuspendThenHibernate=yes
#AllowHybridSleep=yes
SuspendMode=suspend
SuspendState=mem
HibernateMode=shutdown
HibernateState=disk
#HybridSleepMode=suspend platform shutdown
#HybridSleepState=disk
HibernateDelaySec=15
Et cela fonctionne aussi.
Il pourrait peut-être être intéressant de signaler dans le wiki, pour une meilleure compréhension que pour faire fonctionner suspend-then-hibernate :
1 - Il faut modifier le fichier /etc/systemd/sleep.conf et ajouter la ligne

Code : Tout sélectionner

HibernateDelaySec=15
pour un délai de 15sec d'hibernation après mise en veille par exemple

2 - et éditer le fichier /etc/systemd/logind.conf ainsi :

Code : Tout sélectionner

HandleLidSwitch=suspend-then-hibernate
HandleLidSwitchExternalPower=suspend-then-hibernate
pour activer system-then-hibernate lorsque l'écran est rabattu sur un pc connecté ou non à son alimentation.

Mon problème a été qu'il y avait trop d'option, et je me suis noyé dans les paramètres qu'il n'était pas nécessaire de modifier.
Je m’attellerais dès que possible à rédiger un mot sur le wiki afin d'éviter que d'autres galèrent.

En tout cas merci Benjarobin

Re: [Systemd] Suspend-then-hibernate [RESOLU]

Publié : lun. 04 mars 2019, 21:24
par benjarobin
Plusieurs remarques: Le problème venait du fait que pour faire une mise en veille (SuspendState) tu demandais au kernel de passer en hibernation (=disk). systemd devais sûrement être perdu, car il s'attend à être réveillé depuis une mise en veille classique.

Il est préférable de laisser la valeur par défaut à SuspendMode= comme à HibernateMode=:
  • Par défaut SuspendMode= est commenté et devrait le rester, en effet cela laisse le kernel prendre le choix par défaut qui est pour moi platform. Tu ne devrait modifier ce champ uniquement si tu as des problèmes pour passer en veille (via systemctl suspend)
  • Par défaut HibernateMode= est égale à platform shutdown...
En résumé, tu devrais tout laisser tout par défaut : https://github.com/systemd/systemd/blob ... sleep.conf

Re: [Systemd] Suspend-then-hibernate [RESOLU]

Publié : mar. 05 mars 2019, 00:32
par ed0c
Merci pour la précision et les liens que je vais lire dès que j'en ai le temps !
[offtopic]lendemain de garde à l'hosto, bébé de 6 mois à gérer, travaux dans l'appartement :( :( :( :( [/offtopic]
Tu as tout à fait raison, il vaux mieux tout laisser par défaut, ce que je n'avais pas compris initialement.
J'avais mis un délai si court simplement pour mes tests.
Je mets en général plutôt 15 min pour le paramètre hibernatedelaysec. Je préfère cette fonction à hybrid-sleep car lorsque mon pc se met en veille, il y a une led qui clignote, et bref, ça me gêne pour dormir....
Lorsqu'il hiberne, il est éteint et je n'ai pas cette fichue led qui me gêne. Par ailleurs, la sortie d'hibernation se fait en quelques secondes, et ce délai d'allumage est tout à fait acceptable à mon goût.
Merci encore de prendre le temps nécessaire pour ces explications.
Tu es un chef, comme d'habitude.