¿Es posible hacer que Ubuntu entre en estado de hibernación desde Suspend, también conocido como "Suspender sedación"?
Lo que estoy buscando es esto:
cuando cierro la tapa, la computadora portátil se pone en suspensión. Luego, después de un tiempo predeterminado (incluso si la batería se está agotando) si todavía no la uso, debería ponerse en Hibernación para ahorrar energía de la batería.
Por ejemplo, mi computadora portátil está configurada para entrar en suspensión una vez que cierre la tapa. Si luego no lo uso durante todo el día, la batería se agota, porque incluso en modo de suspensión el hardware todavía consume una pequeña cantidad de energía, y la batería finalmente se descarga. Lo que quiero es poder decirle a Ubuntu que incluso si está suspendido, aún necesita entrar en Hibernate después de algunas horas de inactividad.
Windows puede hacer eso. Ubuntu puede ser programado para entrar en modo de espera o hibernación en el temporizador, pero no ambos.
fuente
Respuestas:
En Ubuntu 18.04 es mucho más fácil. En systemd está disponible un nuevo modo suspender-luego-hibernar . Para comenzar a usar esta función, debe crear un archivo /etc/systemd/sleep.conf con el siguiente contenido:
Entonces puedes probarlo por comando:
puede editar
HibernateDelaySec
para reducir el retraso para hibernar.Si todo funciona bien, puede cambiar la Acción de cierre de la tapa, para hacerlo debe editar el archivo /etc/systemd/logind.conf
Necesita encontrar la opción
HandleLidSwitch=
, descomentarla y cambiar aHandleLidSwitch=suspend-then-hibernate
. Luego debe reiniciar el servicio systemd-logind (¡advertencia! Su sesión de usuario se reiniciará) mediante el siguiente comando:¡Eso es todo! Ahora puedes usar esta bonita función.
fuente
La solución a esto es simple. Primero, al suspender y reanudar, el programa pm-suspend ejecuta una serie de scripts en
/etc/pm/sleep.d
y/usr/lib/pm-utils/sleep.d
. Entonces, mi solución es agregar un script que haga lo siguiente:Aquí hay un script que hace esto. Póngale un nombre
0000rtchibernate
y colóquelo en el/etc/pm/sleep.d
directorio (el 0000 es importante, de modo que la secuencia de comandos se ejecute primero al suspender y la última al reanudar).Esperemos que este código aparezca en este tablero de mensajes (esta es mi primera publicación aquí).
Edite el valor de tiempo de espera
autohibernate=7200
en la parte superior, a cuantos segundos quiera dormir antes de entrar en hibernación. El valor actual anterior es de 2 horas. Tenga en cuenta que su computadora portátil se DESPERTARÁ en ese momento durante unos segundos, mientras ejecuta la función de hibernación.Entonces, si planea colocar su computadora portátil en un estuche, no suspenda, sino hiberne en su lugar. De lo contrario, su computadora portátil podría sobrecalentarse especialmente. si está en una funda antideslizante ajustada (aunque solo estará encendida durante unos segundos a un minuto).
He estado usando este método durante los últimos días, hasta ahora ha sido exitoso (y me salvó de una batería agotada esta tarde). Disfrutar.
Para otras distribuciones de Linux que usan
systemd
y versiones más nuevas de Ubuntu, esto debería funcionar si coloca el script en/usr/lib/systemd/system-sleep
lugar de/etc/pm/sleep.d
. Además, reemplace el/usr/sbin/pm-hibernate
comando consystemctl hibernate
.fuente
Para explicar cómo funciona esto (esto es similar a Windows) en palabras simples: la máquina no se despierta del modo de espera cuando la batería está baja para poder guardar el estado de la máquina en la partición de intercambio, guarda todo en la partición de intercambio inmediatamente en espera, y cuando la batería se agota, se recuperará al cargar el estado de la partición de intercambio (como lo haría en caso de que hibernara).
AFAIK Linux utilizará / debería usar el modo de espera híbrido / hibernar en lugar del modo de espera "normal" si sabe que funciona para su hardware. También es posible que esto esté deshabilitado actualmente debido a demasiados errores o algo ...;)
Si te gusta experimentar, quizás puedas ver si puedes obtener buenos resultados con pm-suspend-hybrid .
Si lo siguiente dice que tienes suerte, entonces, en teoría, la suspensión híbrida es compatible con tu sistema:
fuente
Te puede interesar s2both . Lo proporciona el paquete
uswsusp
en Ubuntu 10.10. Se suspende en el disco, pero en lugar de apagar el sistema, lo coloca en S3, que es el modo de energía generalmente asociado con la opción "Suspender" en Ubuntu. pm-suspend-hybrid es otra herramienta que pretende hacer lo mismo.Para hacer esto automatizado al cerrar la tapa, eche un vistazo a la siguiente guía que le permite ejecutar un script arbitrario cuando se detecta un evento de tapa:
http://ubuntuforums.org/showthread.php?t=1076486
Si tiene un ThinkPad, la página de manual
tpctl
hace referencia a un argumento--pm-sedation-hibernate-from-suspend-timer
, que parece proporcionar la función que está buscando. Le advertiría que no intente esto en hardware que no sea ThinkPad.Como referencia, busqué en la página del manual hibernate.conf ; no parecía tener ninguna opción relevante, pero podría valer la pena una segunda lectura.
fuente
Ubuntu 16.04: de suspender / dormir a hibernar después de un tiempo predeterminado
Parece que en Ubuntu 16.04 las cosas son un poco diferentes, así que los pasos que tomé para hacerlo funcionar fueron:
Asegúrese de que la hibernación funcione como se esperaba cuando se ejecuta
Copie el
suspend.target
archivo original :Luego edite el archivo
/etc/systemd/system/suspend.target
y agregue la línea:a la
[Unit]
sección de ese archivo.Cree el archivo
/etc/systemd/system/delayed-hibernation.service
con el siguiente contenido:/etc/delayed-hibernation.conf
para el script con el siguiente contenido:Cree el script que realmente hará el trabajo duro.
Crear archivo
/usr/local/bin/delayed-hibernation.sh
con el contenido:Me tomó mucho tiempo escribir este script basado en otras respuestas en este hilo, cosas que encontré en Internet como https://bbs.archlinux.org/viewtopic.php?pid=1554259
Mi versión de la secuencia de comandos trata de resolver muchos problemas, como volver a suspender si la hibernación no tuvo éxito, pero no volver a despertar después del tiempo predeterminado una y otra vez.
El último paso que supongo sería simplemente ejecutar
para asegurarse de que se estén utilizando nuevos servicios / configuraciones.
Para verificar el registro del servicio, puede usar:
o para un registro completo del uso del servicio:
Un registro normal que obtengo del servicio en ejecución es:
Así que esto sería todo, espero que realmente ayude a alguien, ya que pasé días tratando de encontrar la combinación correcta de configuraciones y versiones de script para que esta práctica función funcione.
fuente
/bin/systemctl hibernate
siempre devolvería 1 cuando se ejecuta en el script systemd, a pesar de que funciona bien en la línea de comandos.En caso de que algo salga mal
pm-hibernate
, preferiría suspender la computadora que dejarla funcionar. Entonces puedes usar:fuente
Aquí está una versión actualizada de la respuesta de Derek Pressnall que funciona con SystemD e incluye la sugerencia de Elías Kagan , simplemente soltarlo en /usr/lib/systemd/system-sleep/delayed_hibernation.sh y hacerlo ejecutable:
fuente
Aquí está mi receta (la probé en dos portátiles Ubuntu 16.04):
Pon este script donde quieras (lo puse en la raíz
/syspend.sh
) y hazlo ejecutable (chmod +x /suspend.sh
)Luego cree el objetivo systemd:
# touch /etc/systemd/system/suspend-to-sleep.target
pegue este contenido:Entonces habilítelo
# systemctl enable suspend-to-sleep.target
.Me he enfrentado a un problema con el de los portátiles: cerrar la tapa no activó este objetivo. Esto se debió a xfce4-power-manager. Hay dos formas de solucionar este problema. El primero es editar el
/etc/systemd/logind.conf
archivo y reemplazarloHandleLidSwitch=ignore
conHandleLidSwitch=suspend
. Pero será todo el sistema, así que acabo de agregar un enlace simbólico a mi script# ln -s /suspend.sh /etc/pm/sleep.d/0000rtchibernate
fuente
Otra solución más común que puede usar
hybrid-sleep
(como lo hace Mac OS). Si su computadora admite hibernación, puede usar esta función:Ese comando debe suspender y enviar al disco (hibernar) la computadora. Después de un tiempo, la computadora se apagará (cuando se encienda, usará los archivos de hibernación para despertarse).
PD: Sé que no es exactamente lo que publicó el OP, pero está bastante cerca
fuente
No olvides chmod + x ese archivo, hazlo ejecutable.
Hay otra solución sin rtcwake, usando wakealarm en / sys / class / rtc / rtc0. Utilice el código obsoleto en las funciones pm (/ usr / lib / pm-utils) después de los comentarios # dado que el núcleo no admite directamente ..., (porque el núcleo actual (después de 3.6 algo) sí admite directamente). Revierta ese código y coloque la parte do_suspend () en lugar de do_suspend_hybrid ().
Código obsoleto (suspender e hibernar cuando se invoca suspend_hybrid):
Recomendado. Aún más fácil de usar uswsusp mientras que al mismo tiempo maximiza el beneficio de s2both, es decir, s2both cuando se suspende. Ponga el código revertido en do_suspend () parte del módulo uswsusp (/usr/lib/pm-utils/module.d).
Código revertido (suspend_hybrid cuando se llama a suspender):
Con uswsusp, podemos ver el progreso de la suspensión / hibernación y el proceso inverso que se muestra en el texto, incluso podemos abortarlo presionando la tecla de retroceso. Sin uswsusp, suspender / hibernar simplemente aparece-desaparece de manera molesta, especialmente cuando se activa wakealarm y ejecuta hibernate (s2disk en uswsusp). Establezca el período de sueño antes de hibernar en el lugar habitual en el archivo pm-functions.
Aquí está el mod uswsusp: (recuerde, este módulo se llama desde las funciones pm, por lo que las variables insertadas son las mismas)
fuente