Como habilitar a hibernação no Ubuntu (ao usar um arquivo de swap)

24 de agosto de 2021

Hibernate Linux

Este artigo explica como habilitar a hibernação usando o systemd em versões recentes do Ubuntu ao usar um arquivo de swap (que é padrão para o Ubuntu pelo menos desde a versão 18.04).

A bateria do meu laptop drena muito rápido enquanto está dormindo. Eu tentei algumas soluções/soluções alternativas, como esta (exceto que para mim o problema não era que o laptop estivesse perdendo metade da sua energia durante a noite, mas tudo isso em apenas algumas horas), mas sem sucesso. Então eu decidi habilitar a opção Hibernate (suspender ao disco) e usar, em vez da opção de sono padrão (suspender para RAM), porque ele usa menos energia, então a bateria do laptop não é drenada enquanto não está em uso, embora tome um pouco mais tempo para acordar da hibernação do que do sono. Então aqui está como fazer isso.

As instruções abaixo podem funcionar em outras distribuições do Linux, mas eu apenas testei isso no Ubuntu (ele deve funcionar da mesma maneira em qualquer distribuição Linux baseada em Debian e Ubuntu, incluindo Pop!_OS, etc.). Em distribuições Linux não baseadas em Debian, você pode precisar usar comandos diferentes para atualizar o GRUB 2 (passo 4) e gerar novamente o initramfs (etapa 6), pois são comandos específicos do Debian.

Também é importante notar que a hibernação no Ubuntu é desativada porque há problemas com ele em alguns computadores, por isso pode não funcionar para todos. Houve um pouco de discussão sobre rever a hibernação no Ubuntu com o lançamento 20.10, mas permaneceu desativado por padrão.

Pré-requisitos

Vale a pena notar que você vai querer ter um arquivo de swap pelo menos tão grande quanto a RAM do computador (a hibernação pode ou não ter sucesso se o seu computador tiver um arquivo de swap menor que a RAM do sistema). Este artigo explica como fazer a transição de uma partição de swap para um arquivo de swap - você também pode usar essas instruções para criar um arquivo de swap maior.

Além disso, essas instruções não funcionam se você criptografar especificamente o seu swap. Como a swap do meu laptop não é criptografada, não consigo tentar isso com um swap criptografado, portanto, as instruções abaixo são apenas para arquivos de swap não criptografados. Mas você deve saber que, se você já tiver um sistema de arquivos root criptografado, todos os arquivos nele - incluindo o arquivo de swap - também serão criptografados e as instruções abaixo funcionam nesse caso.

Para descobrir o tamanho do swap do seu computador, e se ele usar um arquivo ou partição de swap (você precisará saber isso mais tarde), você poderá usar este comando:

Comandos para usar no terminal

cat /proc/swaps

Aqui está um exemplo com a saída do meu laptop:

$ cat /proc/swaps
Filename    Type    Size        Used        Priority
/swapfile   file    8388604     3213700     -2

Como pode ver, sob Type, diz file, então meu computador está usando um arquivo de troca (e seu caminho é /swapfile), e seu tamanho é 8388604 kilobytes (8,3 GB).

Por padrão, o Ubuntu usa um arquivo de swap já a algum tempo (pelo menos começando com o Ubuntu 18.04), para que as instruções abaixo assumem que é isso que você está usando. Caso use uma partição de swap, use o UUID da partição de swap em vez do UUID da partição na qual o arquivo de swap está localizado nas instruções abaixo e não adicione um deslocamento de arquivo de troca (parâmetro resume_offset) em qualquer lugar. Essas são as diferenças entre hibernação com uma partição de swap e um arquivo de troca.

Você também pode estar interessado em: 3 ferramentas para exibir informações da bateria do laptop na linha de comando do Linux

Como habilitar a hibernação no Ubuntu (ao usar um arquivo de swap)

1. Descubra o UUID da partição na qual o arquivo de swap reside.

Precisamos adicionar isso ao arquivo GRUB e o arquivo de retomada initramfs.

Para descobrir o UUID da partição em que seu arquivo de swap está localizado, você pode usar o seguinte comando:

Comandos para usar no terminal

findmnt -no UUID -T /swapfile

(/swapfile o caminho para o arquivo de swap, e pode ser diferente emvseu computador; Use o caminho exato, conforme retornado pelo comando cat /proc/swaps).

Exemplo do meu computador (com saída):

$ findmnt -no UUID -T /swapfile4a59c6a7-ca54-4e24-a362-3eac83bfe226

2. Descubra o deslocamento do arquivo de swap.

Em seguida, precisaremos descobrir o deslocamento do arquivo de swap. Como o UUID, precisaremos adicionar isso ao arquivo GRUB e o arquivo initramfs resume.

Isso pode ser feito executando o seguinte comando:

Comandos para usar no terminal

sudo filefrag -v /swapfile

Da saída deste comando, o primeiro bloco de números da coluna "physical_offset" é o deslocamento do arquivo de swap que você precisará mais tarde. Copie apenas os números e não os pontos que seguem o bloco numérico.

Por exemplo. No meu caso, esta é a saída do comando sudo filefrag -v /swapfile:

$ sudo filefrag -v /swapfile
Filesystem type is: ef53
File size of /swapfile is 8589934592 (2097152 blocks of 4096 bytes)
 ext:     logical_offset:        physical_offset: length:   expected: flags:
   0:        0..    6143:    4974592..   4980735:   6144:            
   1:     6144..    8191:    4982784..   4984831:   2048:    4980736:
   2:     8192..   10239:    4988928..   4990975:   2048:    4984832:
   3:    10240..   12287:    4997120..   4999167:   2048:    4990976:
........................................

Neste exemplo, o deslocamento do arquivo de swap é 4974592 (este é o primeiro bloco de números da coluna psysical_offset).

3. Edite o arquivo /etc/default/grub para inicializar com o resume e retomar os parâmetros do kernel offset.

É muito importante certificar-se de que suas edições deste arquivo estão corretas, ou então seu computador pode falhar em inicializar!

Abra o arquivo /etc/default/grub com um editor de texto como root, e, usando o comando abaixo, vamos abri-lo usando o editor de texto da linha de comando nano:

Comandos para usar no terminal

sudo nano /etc/default/grub

Neste arquivo, no final da linha GRUB_CMDLINE_LINUX_DEFAULT, antes do final ", adicione o seguinte: resume=UUID=UUID_FROM_STEP_1 resume_offset=SWAP_OFFSET_FROM_STEP_2. Substitua os valores pelo UUID que você tem na etapa 1 e o deslocamento de currículo de swap você tem no passo 2.

Para salvar o arquivo e sair do nano, pressione Ctrl + o, depois Enter e, em seguida, Ctrl + x.

Exemplo. É assim que a linha GRUB_CMDLINE_LINUX_DEFAULT aparece no meu computador depois que adicionei a troca UUID e troca de deslocamento:

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=4a59c6a7-ca54-4e24-a362-3eac83bfe226 resume_offset=4974592"

4. Atualize a configuração do grub.

Para atualizar o GRUB 2 em distribuições Linux baseadas em Debian, tudo o que você precisa fazer é executar o seguinte comando:

Comandos para usar no terminal

sudo update-grub

5. Criar (ou editar se já existe) /etc/initramfs-tools/conf.d/resume com o troca UUID e retomar o deslocamento.

Em seguida, precisamos editar (ou criar se não existir) o arquivo /etc/initramfs-tools/conf.d/resume com um editor de texto como root. Use o comando abaixo para abrir este arquivo com o editor de linha de comando nano:

Comandos para usar no terminal

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

Neste arquivo, se você tiver uma linha começando com "RESUME", edite essa linha, ou se não houver tal linha (ou o arquivo estiver completamente vazio), adicione a linha para que seja assim:

RESUME=UUID=UUID_FROM_STEP_1 resume_offset=SWAP_OFFSET_FROM_STEP_2

Para salvar o arquivo e sair do nano, pressione Ctrl + S, depois Enter e, em seguida, Ctrl + x.

Exemplo com o conteúdo do arquivo /etc/initramfs-tools/conf.d/resume do meu laptop:

RESUME=UUID=4a59c6a7-ca54-4e24-a362-3eac83bfe226 resume_offset=4974592

6. Gerando novamente o initramfs.

Agora você precisa gerar novamente o initramfs usando este comando:

Comandos para usar no terminal

sudo update-initramfs -c -k all

7. Reinicie o computador.

Depois de reinicializar, hiberne seu computador usando o seguinte comando:

Comandos para usar no terminal

sudo systemctl hibernate

Por enquanto, você precisa fornecer sua senha para ser capaz de hibernar, e não há opção de menu para hibernar seu computador, então você deve fazer tudo pela linha de comando. Para poder hibernar seu sistema sem inserir uma senha (e ter uma opção para hibernar o computador na opção de energia da sua área de trabalho, por exemplo, em um applet no painel), consulte os próximos 2 etapas.

Para retomar da hibernação, pressione o botão liga/desliga no seu computador.

Se você receber um erro ao executar este comando, dizendo "Failed to hibernate system via logind: Not enough swap space for hibernation", então você pode ter perdido o aviso perto do topo do artigo no qual menciono que é melhor ter um arquivo de swap pelo menos tão grande quanto a RAM do seu computador. Este artigo explica como fazer a transição de uma partição de swap para um arquivo de swap - você também pode usar essas instruções para criar um arquivo de troca maior.

Você pode verificar se há erros relacionados ao serviço Systemd Hibernate usando:

Comandos para usar no terminal

systemctl status systemd-hibernate.service

8. Opcional. Permitir a hibernação sem inserir uma senha (necessária para a próxima etapa). Em alguns ambientes de desktop, isto rehabilita as opções de menu de energia de hibernação e sono híbrido.

Por padrão, para hibernar seu computador, você precisará inserir sua senha. Para permitir a hibernação sem uma senha, crie/abra /etc/polkit-1/localauthority/10-vendor.d/com.ubuntu.desktop.pkla com um editor de texto como root.

Usando o comando abaixo será aberto /etc/polkit-1/localauthority/50-local.d/com.ubuntu.desktop.pkla como root usando o editor de linha de comando nano:

Comandos para usar no terminal

sudo nano /etc/polkit-1/localauthority/50-local.d/com.ubuntu.desktop.pkla

Neste arquivo, cole o seguinte:

[Enable hibernate in upower]
Identity=unix-user:*
Action=org.freedesktop.upower.hibernate
ResultActive=yes

[Enable hibernate in logind]
Identity=unix-user:*
Action=org.freedesktop.login1.hibernate;org.freedesktop.login1.handle-hibernate-key;org.freedesktop.login1;org.freedesktop.login1.hibernate-multiple-sessions;org.freedesktop.login1.hibernate-ignore-inhibit
ResultActive=yes

Agora salve o arquivo e saia do nano (Pressione Ctrl + o, depois Enter e, em seguida, Ctrl + x).

Em alguns ambientes desktop, depois de fazer isso (e depois de um logout/re-login), você receberá as opções de energia de hibernação e sono híbrido. Aqui está um exemplo com as opções de energia XFCE após seguir esta etapa:

Isso não funciona em alguns ambientes de desktop usando o Ubuntu, como com o GNOME Shell. Nesse caso, precisaremos de um passo extra (veja abaixo).

Isso veio via AskUbuntu

9. Opcional. Adicione uma entrada de menu nos aplicativos para hibernar ou use um botão de status de hibernação para GNOME Shell.

Se você usar o GNOME Shell, poderá usar uma extensão que adiciona uma opção para hibernar o computador no menu de energia do sistema na barra superior, chamada Hibernate Status Button.

Aqui está o menu Power Off/Logout do GNOME Shell com esta extensão habilitada:

Hibernate Menu Gnome Shell

Se você não usa o GNOME Shell, mas seu ambiente de desktop não mostra uma opção de energia para hibernar, ou não quiser usar a extensão do GNOME acima, você pode criar uma entrada de menu dos seus aplicativo criando um arquivo chamado hibernate.desktop em ~/.local/share/applications/, por exemplo, abrindo o editor de linha de comando nano com este arquivo:

Comandos para usar no terminal

nano ~/.local/share/applications/hibernate.desktop

E neste arquivo, adicione o seguinte:

[Desktop Entry]
Type=Application
Name=Hibernate desktop
GenericName=Hibernate desktop
Comment=Enter hibernation
NoDisplay=false
Icon=drive-multidisk
Exec=systemctl hibernate
Terminal=true
Categories=System;Utility;Settings;

Agora poderá entrar no menu de aplicativos do seu desktop e clicar no ícone Hibernate para hibernar seu sistema. Para isso funcionar, você precisa seguir o passo opcional 9 de cima para poder hibernar sem inserir a senha.

Eu também devo esclarecer o que há com a opção de sono híbrido. Além do sono/suspender (suspender ao ram) e hibernar (suspender ao disco), há também a opção de sono híbrido (também chamado de suspensão híbrida) que começa colocando seu computador para dormir, depois transitando para a hibernação após um determinado período de tempo. Você pode definir o tempo de sono híbrido entre suspensão e hibernação (junto com outras opções) editando o arquivo /etc/systemd/sleep.conf, então reinicializando seu sistema. Para mais sobre isso, veja o Arch Wiki.

Você pode gostar: Como habilitar a decodificação de vídeo acelerada por hardware no Google Chrome, Brave, Vivaldi e Opera Browsers no Debian, Ubuntu ou Linux Mint

Esse post foi traduzido do site LinuxUprising.com pela rtland.team.

Linux Uprising Blog

Confira a versão original desse post em inglês:

How To Enable Hibernation On Ubuntu (When Using A Swap File)
Propaganda
Propaganda