Como habilitar a hibernação no Debian 12 bookworm

Boa tarde a todos.

Gostaria de saber se é possível habilitar a opção de “hibernar” no Debian 12, e como faço isso, se possível. Com hibernar eu quero dizer desligar o computador com aplicativos abertos, e quando ligar novamente, os aplicativos estarem do mesmo jeito, assim como é possível no Windows.
Já procurei alguns artigos, mas nenhum foi muito claro sobre isso. Sei que preciso ter uma certa quantidade de memória swap disponível (no meu caso vou usar o GParted para aumentar a minha) mas, além disso, não achei mais nenhuma informação clara do que é necessário.
Como alguns dos artigos que eu encontrei falavam sobre mexer diretamente em arquivos do kernel, mas não deixavam claro o que fazer, resolvi não fazer nada ainda.
Seguem as minhas configurações:

gabriel@gabrielDebian:~$ inxi -Fxz

System:
  Kernel: 6.1.0-33-amd64 arch: x86_64 bits: 64 compiler: gcc v: 12.2.0
    Desktop: GNOME v: 43.9 Distro: Debian GNU/Linux 12 (bookworm)
Machine:
  Type: Desktop Mobo: N/A model: X79G serial: <superuser required>
    UEFI: American Megatrends v: 4.6.5 date: 08/25/2022
CPU:
  Info: 8-core model: Intel Xeon E5-2650 v2 bits: 64 type: MT MCP
    arch: Ivy Bridge rev: 4 cache: L1: 512 KiB L2: 2 MiB L3: 20 MiB
  Speed (MHz): avg: 1487 high: 3400 min/max: 1200/3400 cores: 1: 2146
    2: 1509 3: 1200 4: 1200 5: 3400 6: 1200 7: 1200 8: 1200 9: 1372 10: 1200
    11: 1200 12: 1785 13: 1200 14: 1200 15: 1445 16: 1347 bogomips: 83196
  Flags: avx ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 ssse3 vmx
Graphics:
  Device-1: AMD Polaris 20 XL [Radeon RX 580 2048SP] driver: amdgpu v: kernel
    arch: GCN-4 bus-ID: 03:00.0 temp: 32.0 C
  Display: wayland server: X.Org v: 1.22.1.9 with: Xwayland v: 22.1.9
    compositor: gnome-shell driver: dri: radeonsi gpu: amdgpu
    resolution: 1920x1080~75Hz
  API: OpenGL v: 4.6 Mesa 22.3.6 renderer: AMD Radeon RX 580 2048SP
    (polaris10 LLVM 15.0.6 DRM 3.49 6.1.0-33-amd64) direct-render: Yes
Audio:
  Device-1: Intel C600/X79 series High Definition Audio driver: snd_hda_intel
    v: kernel bus-ID: 1-1.3:4
  Device-2: AMD Ellesmere HDMI Audio [Radeon RX 470/480 / 570/580/590]
    driver: snd_hda_intel v: kernel bus-ID: 03:00.1
  Device-3: Zoran Personal Media Division (Nogatech) USB Audio and HID
    type: USB driver: snd-usb-audio
  API: ALSA v: k6.1.0-33-amd64 status: kernel-api
  Server-1: PipeWire v: 0.3.65 status: active
Network:
  Device-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet
    driver: r8169 v: kernel port: d000 bus-ID: 07:00.0
  IF: enp7s0 state: up speed: 1000 Mbps duplex: full mac: <filter>
Drives:
  Local Storage: total: 1.82 TiB used: 121.49 GiB (6.5%)
  ID-1: /dev/nvme0n1 vendor: Kingston model: SNV2S1000G size: 931.51 GiB
    temp: 34.9 C
  ID-2: /dev/sda vendor: Toshiba model: MQ01ABD100 size: 931.51 GiB
  ID-3: /dev/sdb type: USB model: MBED VFS size: 64.1 MiB
Partition:
  ID-1: / size: 914.38 GiB used: 121.45 GiB (13.3%) fs: ext4
    dev: /dev/nvme0n1p2
  ID-2: /boot/efi size: 511 MiB used: 5.8 MiB (1.1%) fs: vfat
    dev: /dev/nvme0n1p1
Swap:
  ID-1: swap-1 type: partition size: 977 MiB used: 35.5 MiB (3.6%)
    dev: /dev/nvme0n1p3
Sensors:
  System Temperatures: cpu: 34.0 C mobo: N/A gpu: amdgpu temp: 32.0 C
  Fan Speeds (RPM): N/A gpu: amdgpu fan: 1382
Info:
  Processes: 339 Uptime: 3h 52m Memory: 23.39 GiB used: 5.73 GiB (24.5%)
  Init: systemd target: graphical (5) Compilers: gcc: 12.2.0 Packages: 1867
  Shell: Bash v: 5.2.15 inxi: 3.3.26

Desde já, agradeço.

Pelo que pesquisei o processador até suporta, mas algumas placas mães (BIOS) podem ter desabilitado esse recurso se economia de energia (processador S3/S4 state).

Rodar o comando cat /sys/power/state pode indicar se o kernel já detectou esse recurso. No meu caso aparece “freeze mem disk” indicando que suspende para memória e para disco (mas eu tenho processador amd).

Se sua placa mãe suportar, então vc precisa ter um swap grande o suficiente pra hibernação (geralmentente 50% da RAM é suficiente, mas se vc quiser hibernar com muitos programas abertos, pode ser necessário até algo como 75% da RAM).

O segundo ponto é que você deve indicar pro kernel qual a partição da swap deve ser usado para recuperar os dados da hibernação. É usado um parâmetro de kernel “resume=UUID” onde o UUID da sua swap deve ser indicado. Talvez já esteja configurado. Confira com cat /proc/cmdline os parâmetros de inicialização atuais.

Tendo isso setado, fica só a cargo do gerenciador de janelas fazer o meio de campo, habilitando os botões respectivos.

3 curtidas

Agradeço a resposta amigo.
Rodei os comandos que você indicou e foi isso o que retornaram:

gabriel@gabrielDebian:~$ cat /sys/power/state 
freeze mem disk
gabriel@gabrielDebian:~$ cat /proc/cmdline 
BOOT_IMAGE=/boot/vmlinuz-6.1.0-33-amd64 root=UUID=be28a22c-a1ab-466a-900f-d6fc01fcb2b1 ro quiet splash

Pelo “freeze mem disk” também ter aparecido, eu suponho que minha CPU tenha suporte a hibernação, certo?
No caso do segundo comando, o arquivo não tem nenhum parâmetro “resume” como o que você disse. Usei o blkid para ver a UUID da partição swap e retornou isso:

gabriel@gabrielDebian:~$ sudo blkid
/dev/nvme0n1p3: UUID="2e08fb82-4b81-4aec-9d4e-c753a4e9c08e" TYPE="swap" PARTUUID="42658aef-9e86-4868-af93-cc0676571905"

Posso simplesmente adicionar o parâmetro resume=2e08fb82-4b81-4aec-9d4e-c753a4e9c08e no arquivo cmdline com o Vim e estaria pronto? Ou precisaria de mais algum outro passo?

Os arquivos no /proc são gerados dinamicamente pelo kernel, muitos deles são apenas leitura.

Vc usa o Debian, então precisa adicionar o parâmetro do kernel resume=UUID=2e08fb82-4b81-4aec-9d4e-c753a4e9c08e no arquivo /etc/defaul/grub, na linha que começa com GRUB_CMDLINE_LINUX=, dentro das aspas que começam depois do =, e com um espaço na frente e atrás, pra não ficar colado com outros parâmetros.

Você precisará de permissões de administrador para conseguir salvar o arquivo (com su para criar um prompt de administrador, ou sudo na frente dos comandos).

Após isso, atualize as entradas do grub com update-grub e poderá reiniciar o computador caso não tenha aparecido erros.

Após reiniciar, verifique que o parâmetro está no /proc/cmdline. Se estiver, então e possível que vc já consiga usar o botão hibernar da sua interface gráfica. Caso negativo, vc pode tentar hibernar manualmente com systemctl hibernate e veja se funciona.

3 curtidas

Muito obrigado!
Só precisei habilitar o botão para a hibernação com uma extensão do Gnome, mas de resto funcionou perfeitamente. Agradeço demais a ajuda.

Este tópico foi fechado automaticamente 3 dias depois da última resposta. Novas respostas não são mais permitidas.