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.
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:
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
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:
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:
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
:
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:
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
:
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:
sudo update-initramfs -c -k all
7. Reinicie o computador.
Depois de reinicializar, hiberne seu computador usando o seguinte comando:
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:
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:
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:
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:
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.
Confira a versão original desse post em inglês:
How To Enable Hibernation On Ubuntu (When Using A Swap File)