Suspender en Ubuntu 18.04 sin guardar el estado usando uswsusp y s2ram

Suspender en Ubuntu 18.04 sin guardar el estado usando uswsusp y s2ram

No puedo lograr que la funcionalidad "Suspender" funcione correctamente en Ubuntu 18.04. Sin embargo, la funcionalidad Hibernar funciona como se esperaba.

Descripción del problema: cuando uso Suspender desde el menú de encendido o "sudo systemctl suspend", el comportamiento es:

  • La máquina entra en modo de suspensión y el LED del botón de encendido parpadea lentamente (respira).
  • Cuando se reinicia la computadora portátil, el sistema operativo se inicia, veo la pantalla de inicio de sesión habitual, pero no se restaura ninguna de las aplicaciones que se estaban ejecutando.

Lo que he hecho hasta ahora:

$ sudo apt-get install uswsusp
$ sudo update-initramfs -u
$ sudo systemctl edit systemd-suspend.service

Pegué las siguientes líneas en systemd-suspend.service:

[Service]
ExecStart=
ExecStartPre=-/bin/run-parts -v -a pre /usr/lib/systemd/system-sleep
ExecStart=/usr/sbin/s2ram
ExecStartPost=-/bin/run-parts -v --reverse -a post /usr/lib/systemd/system-sleep
  • guardó el archivo. Se guarda en /etc/systemd/system/
  • correr:

    $ sudo systemctl daemon-recarga

  • Pruébalo:

    $ sudo systemctl suspender

Los resultados son los descritos anteriormente: la computadora portátil duerme, sin embargo, la sesión guardada no se restaura al reiniciar.

Sé que se está llamando al script systemd-suspend.service. Si cambio la línea ExecStart=/usr/sbin/s2ram a ExecStart=/usr/sbin/s2disk, la computadora portátil entra en hibernación y restaura la sesión.

Información adicional:

Para que Hibernate funcione, cambié grub:

sudoedit /etc/default/grub

cambió esta línea:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
 to:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=<string of hex> resume_offset=34816"
  • luego ejecutó:

    $ sudo actualizar-grub

Información del núcleo:

lsb_release -a

Distributor ID: Ubuntu
Description:    Ubuntu 18.04.2 LTS
Release:    18.04
Codename:   bionic

uname -a 
Linux <machinename> 4.18.0-21-generic #22~18.04.1-Ubuntu SMP Thu May 16 15:07:19 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux


sudo s2ram -K
This kernel has KMS support.

¿Hay algún paso o elemento de configuración que me falta?

Respuesta1

Después de mucho buscar una respuesta y golpearme la cabeza contra la mesa, llegué a una solución por mi cuenta reuniendo fragmentos de información de varias fuentes. Esta solución funciona en mi Sony Vaio modelo VPCEB15FM con Ubuntu 18.04, su kilometraje puede diferir.

Parte del problema para hacer que hibernar/suspender funcione correctamente fue la forma en que Ubuntu carga y asigna /dev/sda2, /dev/sdb2, etc., ya que el orden de asignación de unidades a veces cambia de un arranque a otro. Entonces, el primer paso es identificar el UUID de la partición de intercambio. Dado que el UUID es constante, constituye un punto de montaje mucho más confiable.

El UUID se puede obtener de:

sudo blkid

Busque la entrada que dice "intercambiar"

/dev/sda2: UUID="5c555600-2e37-477d-62df-6013d61dc36" TYPE="swap" PARTUUID="2f501554-02"

Tu UUID será diferente al mío. No uses el mío, usa el tuyo.

Si está utilizando un archivo de intercambio en lugar de una partición de intercambio, utilice el UUID de la partición principal de Linux y también necesitará conocer el desplazamiento del archivo de intercambio.

Para obtener el desplazamiento del archivo de intercambio:

sudo filefrag -v /swapfile

El resultado será similar a este:

ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..   32767:      34816..     67583:  32768:            
   1:    32768..   63487:      67584..     98303:  30720:            
   2:    63488..   96255:     100352..    133119:  32768:      98304:

El desplazamiento que busca es el primer "desplazamiento_físico", en este caso sería 34816.

Ahora tiene la información que necesita para comenzar.

Modificar /etc/default/grub

sudoedit /etc/default/grub

cambiar la linea:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

si usa una partición de intercambio para:

GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=5c555600-2e37-477d-62df-6013d61dc36"

si usa un archivo de intercambio para:

GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=5c555600-2e37-477d-62df-6013d61dc36 resume_offset=34816"

Instale uswsusp.
Esto instala los métodos s2disk, s2ram y s2both.

sudo apt-get install uswsusp

Configure systemd-hibernate.service y systemd-suspend.service.
Estos archivos están en /etc/systemd/system/ o se crearán allí si aún no existen.

sudo systemctl edit systemd-hibernate.service

Pegue estas líneas:

[Service]
ExecStart=
ExecStartPre=-/bin/run-parts -v -a pre /lib/systemd/system-sleep
ExecStart=/usr/sbin/s2disk
ExecStartPost=-/bin/run-parts -v --reverse -a post /lib/systemd/system-sleep

Nota: mi sistema tiene una ruta a /lib/systemd/system-sleep, otros pueden tener una ubicación diferente como /usr/lib/systemd/system-sleep.

sudo systemctl edit systemd-suspend.service

Pegue estas líneas:

[Service]
ExecStart=
ExecStartPre=-/bin/run-parts -v -a pre /lib/systemd/system-sleep
ExecStart=/usr/sbin/s2both
ExecStartPost=-/bin/run-parts -v --reverse -a post /lib/systemd/system-sleep

Tenga en cuenta que utilice s2both en lugar de s2ram en la configuración de "suspensión". s2ram no funcionó en mi sistema, pero s2both siempre funciona.

Ubuntu 18.04 y 20.04:

Edite /etc/uswsusp.conf.

Utilice el UUID y, si utiliza un archivo de intercambio, el desplazamiento:

sudo nano /etc/uswsusp.conf

Modifique para usar su UUID, etc.

# /etc/uswsusp.conf(5) -- Configuration file for s2disk/s2both 
resume device = UUID=5c555600-2e37-477d-62df-6013d61dc36
compress = y
# early writeout = y
# image size = 1741570539
# RSA key file = /etc/uswsusp.key
shutdown method = platform
# only needed if using a swapfile
# resume offset = 34816

Nota: Hay una página de manual para uswsusp.conf que describe completamente todos los parámetros. Hay muchas otras configuraciones, este es el mínimo requerido. Las líneas comentadas se dejaron aquí para que puedas ver algunas de las otras opciones.

Ubuntu 22.04:

Edite /etc/suspend.conf.

16-09-2022 El archivo /etc/uswsusp.conf ha sido reemplazado por /etc/suspend.conf

Ver:https://wiki.archlinux.org/title/Uswsusp

sudo nano /etc/suspend.conf

Solo el "reanudar el dispositivo"La línea ha cambiado con respecto a las instrucciones anteriores, todo lo demás puede permanecer igual.

Utilice esta línea en su lugar:

resume device = /dev/disk/by-label/swap

Editar /etc/initramfs-tools/conf.d/resume

sudo nano /etc/initramfs-tools/conf.d/resume

agregue esta línea: RESUME=UUID=5c555600-2e37-477d-62df-6013d61dc3

Nota: si se utiliza un archivo de intercambio, es necesario agregar el desplazamiento. agregar: reanudar desplazamiento = 34816 después del UUID

Bien, eso debería encargarse de los distintos elementos de configuración.

Actualizar grub e initramfs:

sudo update-grub
sudo update-initramfs -u  or update-initramfs -u -k all  to do all kernels

Reinicie Ubuntu.
Después del reinicio, pruebe la funcionalidad de hibernación y suspensión. Hibernate puede tardar varios minutos en escribir el archivo de currículum en el swap y apagar la máquina. No entrar en pánico. Suspender es un poco más rápido.

¡Pruébalo todo!

sudo systemctl hibernate
sudo systemctl suspend

lo que deberías ver:

  • hibernar: apaga el sistema por completo; tardará varios minutos. Después de reiniciar la computadora y volver a iniciar sesión, se deben reanudar sus aplicaciones. Nota: El proceso de reanudación puede tardar unos minutos y es posible que la máquina parezca bloqueada mientras se realiza la reanudación. Ser paciente.
  • suspender: el sistema entra en modo de "suspensión" y la luz de encendido parpadea lentamente (respira). Al presionar el botón de encendido principal se activa la máquina. Debería ver la pantalla de inicio de sesión y sus aplicaciones deberían reanudarse.

Pasos adicionales:
Debería poder ingresar al modo de suspensión/suspensión desde el menú desplegable de energía. Cuando abras el menú desplegable, presiona la tecla Alt. El ícono de encendido debería cambiar al ícono de suspensión.

También se puede agregar una opción de menú Hibernar. Ya hay algunos buenos tutoriales sobre esto que se pueden encontrar buscando "ubuntu add hibernate power menu"

información relacionada