Est-il possible de faire passer Ubuntu à l'état Hibernate à partir de Suspend, alias "Suspend Sedation"?
Ce que je recherche, c’est ceci:
lorsque je ferme le couvercle, l’ordinateur portable est mis en suspension. Ensuite, après un temps prédéterminé (même si la batterie devient forte), si je ne l'utilise toujours pas, il devrait se mettre dans un système Hibernate pour économiser la batterie.
Par exemple, mon ordinateur portable est configuré pour passer en mode suspension lorsque je ferme le couvercle. Si je ne l'utilise pas pendant toute la journée, la batterie se décharge complètement, car même en mode veille, le matériel continue de consommer une petite quantité d'énergie et la batterie se décharge éventuellement. Ce que je veux, c'est pouvoir dire à Ubuntu que même si elle est suspendue, elle doit quand même entrer dans Hibernate après quelques heures d'inactivité.
Windows peut le faire. Ubuntu peut être programmé pour passer en veille ou en veille prolongée, mais pas les deux.
la source
Réponses:
Dans Ubuntu 18.04, c'est beaucoup plus facile. Dans systemd est disponible un nouveau mode suspend-then-hibernate . Pour commencer à utiliser cette fonction, vous devez créer un fichier /etc/systemd/sleep.conf avec le contenu suivant:
Ensuite, vous pouvez le tester avec la commande suivante:
vous pouvez modifier
HibernateDelaySec
pour réduire le délai en veille prolongée.Si tout fonctionne correctement, vous pouvez modifier l'action Fermer le couvercle. Pour ce faire, vous devez modifier le fichier /etc/systemd/logind.conf.
Vous devez trouver une option
HandleLidSwitch=
, décommenter et changer enHandleLidSwitch=suspend-then-hibernate
. Ensuite, vous devez redémarrer le service systemd-logind (attention! Votre session utilisateur sera redémarrée) avec la commande suivante:C'est tout! Maintenant, vous pouvez utiliser cette fonction intéressante.
la source
La solution à cela est simple. Tout d’abord, lors de la suspension et de la reprise, le programme pm-suspend exécute une série de scripts dans
/etc/pm/sleep.d
et/usr/lib/pm-utils/sleep.d
. Ma solution consiste donc à ajouter un script qui effectue les tâches suivantes:Voici un script qui fait cela. Nommez-le
0000rtchibernate
et placez-le dans le/etc/pm/sleep.d
répertoire (la valeur 0000 est importante pour que le script s'exécute en premier lors de la suspension et en dernier lieu de la reprise).Espérons que ce code passe sur ce forum (ceci est mon premier post ici).
Modifiez la valeur du délai d’expiration
autohibernate=7200
en haut du nombre de secondes avant de passer en veille prolongée. La valeur actuelle ci-dessus est 2 heures. Notez que votre ordinateur portable se réveillera à cette heure pendant quelques secondes pendant l’exécution de la fonction de veille prolongée.Donc, si vous envisagez de mettre votre ordinateur portable dans une affaire, ne suspendez pas, mais hibernez à la place. Sinon, votre ordinateur portable pourrait surchauffer dans esp. si c'est dans un étui bien ajusté (bien qu'il ne soit allumé que quelques secondes à une minute).
J'utilise cette méthode depuis quelques jours, jusqu'à présent, elle a été un succès (et m'a sauvé d'une batterie morte cet après-midi). Prendre plaisir.
Pour les autres distributions Linux qui utilisent
systemd
les versions plus récentes d’Ubuntu, cela devrait toujours fonctionner si vous placez le script au/usr/lib/systemd/system-sleep
lieu de/etc/pm/sleep.d
. Remplacez également la/usr/sbin/pm-hibernate
commande parsystemctl hibernate
.la source
Pour expliquer comment cela fonctionne (cela ressemble à Windows) en des mots simples: la machine ne se réveille pas lorsque la batterie est faible pour pouvoir enregistrer l'état de la machine sur la partition de swap, elle enregistre tout immédiatement sur la partition de swap. en attente, et lorsque la batterie est épuisée, il récupère l'état en chargeant l'état à partir de la partition d'échange (comme cela se produirait si vous étiez en veille prolongée).
Autant que je sache, linux utilisera / devrait utiliser un mode veille / veille prolongée hybride au lieu du mode veille "normal" s'il sait que cela fonctionne pour votre matériel. Il est également possible que cette option soit désactivée actuellement à cause d'un trop grand nombre de bugs ou de quelque chose ...;)
Si vous aimez expérimenter, vous pourrez peut-être voir si vous pouvez obtenir de bons résultats avec pm-suspend-hybrid .
Si ce qui suit indique que vous avez de la chance, alors, en théorie, la suspension hybride est prise en charge sur votre système:
la source
Vous pouvez être intéressé par s2both . Il est fourni par le paquet
uswsusp
dans Ubuntu 10.10. Il suspend sur le disque, mais au lieu d'arrêter le système, il le place en S3, qui est le mode d'alimentation généralement associé à l'option "Suspendre" dans Ubuntu. pm-suspend-hybrid est un autre outil censé faire la même chose.Pour automatiser la fermeture du couvercle, consultez le guide suivant, qui vous permet d'exécuter un script arbitraire lorsqu'un événement de couvercle est intercepté:
http://ubuntuforums.org/showthread.php?t=1076486
Si vous possédez un ThinkPad, la page de manuel for
tpctl
fait référence à un argument--pm-sedation-hibernate-from-suspend-timer
, ce qui semble fournir la fonctionnalité que vous recherchez. Je vous prie de ne pas essayer ceci avec du matériel autre que ThinkPad.Pour référence, j'ai parcouru la page de manuel pour hibernate.conf ; il ne semblait pas y avoir d’options pertinentes, mais méritait peut-être une seconde lecture.
la source
Ubuntu 16.04 - de suspendre / dormir en veille prolongée après un temps prédéterminé
Il semble que sur Ubuntu 16.04, les choses soient un peu différentes, les mesures que j’ai prises pour que cela fonctionne sont les suivantes:
Assurez-vous que le mode veille prolongée fonctionne comme prévu lors de l'exécution
Copiez le
suspend.target
fichier d' origine :Puis éditez le fichier
/etc/systemd/system/suspend.target
et ajoutez la ligne:à la
[Unit]
section de ce fichier.Créez le fichier
/etc/systemd/system/delayed-hibernation.service
avec le contenu suivant:/etc/delayed-hibernation.conf
du script avec le contenu suivant:Créez le script qui fera réellement le travail difficile.
Créer un fichier
/usr/local/bin/delayed-hibernation.sh
avec le contenu:Il m'a fallu beaucoup de temps avant d'écrire ce script à partir d'autres réponses de ce fil, des choses que j'ai trouvées sur Internet, comme https://bbs.archlinux.org/viewtopic.php?pid=1554259.
Ma version du script essaie de résoudre de nombreux problèmes, tels que la mise en suspension à nouveau si le mode Veille prolongée échoue, mais ne vous réveillez pas à nouveau après l'heure prédéterminée.
La dernière étape que je suppose serait de simplement exécuter
pour vous assurer que les nouveaux services / configurations sont utilisés.
Pour consulter le journal de service, vous pouvez utiliser:
ou pour un journal complet de l'utilisation du service:
Un journal normal que je reçois du service en cours d'exécution est:
J'espère que cela aidera vraiment quelqu'un puisque j'ai passé des jours à essayer de trouver la bonne combinaison de configurations et de versions de script pour que cette fonctionnalité pratique fonctionne.
la source
/bin/systemctl hibernate
retournerait toujours 1 lorsqu'elle est exécutée dans le script systemd, même si cela fonctionne très bien sur la ligne de commande.Juste au cas où quelque chose se passerait mal pendant que
pm-hibernate
je préférerais mettre l'ordinateur en suspension plutôt que de le laisser fonctionner. Pour que vous puissiez utiliser:la source
Voici une version mise à jour de la réponse de Derek Pressnall qui fonctionne avec systemd et inclut la suggestion d'Eliah Kagan . Il suffit de la déposer dans /usr/lib/systemd/system-sleep/delayed_hibernation.sh et de la rendre exécutable:
la source
Voici ma recette (testée sur deux ordinateurs portables Ubuntu 16.04):
Mettez ce script où vous voulez (je le mets à la racine
/syspend.sh
) et rendez-le exécutable (chmod +x /suspend.sh
)Créez ensuite la cible systemd:
# touch /etc/systemd/system/suspend-to-sleep.target
collez ce contenu:Puis activez-le
# systemctl enable suspend-to-sleep.target
.J'ai eu un problème avec celui des ordinateurs portables: la fermeture du couvercle n'a pas déclenché cette cible. Cela était dû à xfce4-power-manager. Il existe deux manières de contourner ce problème. La première consiste à modifier le
/etc/systemd/logind.conf
fichier et à le remplacerHandleLidSwitch=ignore
parHandleLidSwitch=suspend
. Mais ce sera à l'échelle du système, alors je viens d'ajouter un lien symbolique à mon script# ln -s /suspend.sh /etc/pm/sleep.d/0000rtchibernate
la source
Une autre solution de contournement plus courante que vous pouvez utiliser
hybrid-sleep
(comme le fait Mac OS). Si votre ordinateur prend en charge l'hibernation, vous pouvez utiliser cette fonctionnalité:Cette commande devrait suspendre et envoyer sur le disque (veille prolongée) l'ordinateur. Après un certain temps, l’ordinateur s’éteindra (il utilisera les fichiers de veille prolongée pour s’activer).
ps: Je sais que ce n'est pas exactement ce que le PO a posté, mais c'est assez proche
la source
N'oubliez pas de chmod + x ce fichier, rendez-le exécutable.
Il existe une autre solution sans rtcwake, en utilisant wakealarm dans / sys / class / rtc / rtc0. Utilisez du code obsolète dans pm-functions (/ usr / lib / pm-utils) après les commentaires # depuis que le noyau ne supporte pas directement ..., (car le noyau actuel (quelque chose après la version 3.6) le supporte directement). Retournez ce code et insérez la partie do_suspend () à la place de do_suspend_hybrid ().
Code obsolète (suspendre puis hiberner lorsque susp_hybrid est appelé):
Conseillé. Encore plus facile à utiliser uswsusp tout en maximisant les avantages de s2both, c’est-à-dire s2both lorsqu’il est suspendu. Placez le code inversé dans la partie do_suspend () du module uswsusp (/usr/lib/pm-utils/module.d).
Code inversé (suspend_hybrid lorsque la suspension est appelée):
Avec uswsusp, nous pouvons voir l’avancement de la suspension / hibernation et le processus inverse affichés en texte, même si nous pouvons l’abandonner en appuyant sur la touche retour arrière. Sans uswsusp, suspendre / hibernate semble juste disparaître de manière ennuyeuse, surtout lorsque wakealarm est déclenché et exécuter hibernate (s2disk in uswsusp). Définissez la période de sommeil avant l'hibernation à l'emplacement habituel du fichier pm-functions.
Voici le mod uswsusp: (rappelez-vous, ce module est appelé depuis pm-functions, donc les variables insérées sont les mêmes)
la source