
Não consigo fazer com que a funcionalidade "Suspender" funcione corretamente no Ubuntu 18.04. No entanto, a funcionalidade do Hibernate funciona conforme o esperado.
Descrição do problema: Quando uso Suspender no menu Power ou "sudo systemctl suspend", o comportamento é:
- A máquina entra no modo Sleep e o LED do botão liga/desliga pisca lentamente (respira).
- Quando o laptop é reiniciado, o sistema operacional é inicializado, vejo a tela de login normal, mas nenhum dos aplicativos que estavam em execução foi restaurado.
O que eu fiz até agora:
$ sudo apt-get install uswsusp
$ sudo update-initramfs -u
$ sudo systemctl edit systemd-suspend.service
Colei as seguintes linhas em 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
- salvou o arquivo. Ele é salvo em /etc/systemd/system/
correr:
$ sudo systemctl daemon-reload
Teste-o:
$ sudo systemctl suspender
Os resultados são os descritos acima, o laptop dorme, porém a sessão salva não é restaurada na reinicialização.
Eu sei que o script systemd-suspend.service está sendo chamado. Se eu alterar a linha ExecStart=/usr/sbin/s2ram para ExecStart=/usr/sbin/s2disk o laptop entra em hibernação e restaura a sessão.
Informação adicional:
Para fazer o Hibernate funcionar, mudei o grub:
sudoedit /etc/default/grub
alterei esta linha:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
to:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=<string of hex> resume_offset=34816"
então correu:
$ sudo update-grub
Informações do kernel:
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.
Há alguma etapa ou item de configuração que estou faltando?
Responder1
Depois de muito procurar por uma resposta e bater a cabeça na mesa, cheguei sozinho a uma solução, juntando pedaços de informações de várias fontes. Esta solução funciona no meu Sony Vaio modelo VPCEB15FM rodando Ubuntu 18.04, sua milhagem pode ser diferente.
Parte do problema de fazer com que o modo de hibernação/suspender funcionasse corretamente era a maneira como o Ubuntu carrega e atribui /dev/sda2, /dev/sdb2, etc., já que a ordem de atribuição da unidade às vezes muda de inicialização para inicialização. Portanto, o primeiro passo é identificar o UUID da partição swap. Como o UUID é constante, ele cria um ponto de montagem muito mais confiável.
O UUID pode ser obtido em:
sudo blkid
Procure a entrada que diz "trocar"
/dev/sda2: UUID="5c555600-2e37-477d-62df-6013d61dc36" TYPE="swap" PARTUUID="2f501554-02"
Seu UUID será diferente do meu. Não use o meu, use o seu.
Se você estiver usando um arquivo de troca em vez de uma partição de troca, use o UUID da partição Linux principal e também precisará saber o deslocamento do arquivo de troca.
Para obter o deslocamento para o arquivo de troca:
sudo filefrag -v /swapfile
A saída será semelhante a esta:
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:
O deslocamento que você procura é o primeiro "physical_offset", neste caso seria 34816.
Agora você tem as informações necessárias para começar.
Modifique /etc/default/grub
sudoedit /etc/default/grub
mude a linha:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
se estiver usando uma partição swap para:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=5c555600-2e37-477d-62df-6013d61dc36"
se estiver usando um arquivo de troca para:
GRUB_CMDLINE_LINUX_DEFAULT="no_console_suspend initcall_debug resume=UUID=5c555600-2e37-477d-62df-6013d61dc36 resume_offset=34816"
Instale o uswsusp.
Isso instala os métodos s2disk, s2ram e s2both.
sudo apt-get install uswsusp
Configure systemd-hibernate.service e systemd-suspend.service.
Esses arquivos estão em /etc/systemd/system/ ou serão criados lá se ainda não existirem.
sudo systemctl edit systemd-hibernate.service
Cole nestas linhas:
[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: meu sistema tem um caminho para/lib/systemd/system-sleep, outros podem ter um local diferente, como/usr/lib/systemd/system-sleep.
sudo systemctl edit systemd-suspend.service
Cole nestas linhas:
[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
Observe que use s2both em vez de s2ram na configuração "suspender". s2ram não funcionou no meu sistema, mas s2both sempre funciona.
Ubuntu 18.04 e 20.04:
Edite /etc/uswsusp.conf.
Use o UUID e, se estiver usando um arquivo de troca, o deslocamento:
sudo nano /etc/uswsusp.conf
Modifique para usar seu 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: Existe uma página man para uswsusp.conf que descreve completamente todos os parâmetros. Existem várias outras configurações, este é o mínimo necessário. As linhas comentadas foram deixadas para que você possa ver algumas das outras opções.
Ubuntu 22.04:
Edite /etc/suspend.conf.
16/09/2022 O arquivo /etc/uswsusp.conf foi substituído por /etc/suspend.conf
Ver:https://wiki.archlinux.org/title/Uswsusp
sudo nano /etc/suspend.conf
Apenas o "retomar dispositivo"A linha mudou em relação às instruções acima, todo o resto pode permanecer igual.
Use esta linha em vez disso:
resume device = /dev/disk/by-label/swap
Edite /etc/initramfs-tools/conf.d/resume
sudo nano /etc/initramfs-tools/conf.d/resume
adicione esta linha: RESUME=UUID=5c555600-2e37-477d-62df-6013d61dc3
Nota: se estiver usando um arquivo de troca, o deslocamento precisará ser adicionado. adicione: resume offset = 34816 após o UUID
Ok, isso deve cuidar dos vários itens de configuração.
Atualize o grub e o initramfs:
sudo update-grub
sudo update-initramfs -u or update-initramfs -u -k all to do all kernels
Reinicie o Ubuntu.
Após a reinicialização, teste a funcionalidade de hibernação e suspensão. O Hibernate pode levar vários minutos para gravar o arquivo de currículo no swap e desligar a máquina. Não entrar em pânico. Suspender é um pouco mais rápido.
Teste tudo!
sudo systemctl hibernate
sudo systemctl suspend
O que você deve ver:
- hibernar - desliga o sistema completamente, leva vários minutos. Depois de reiniciar o computador e fazer login novamente, seus aplicativos deverão ser retomados. Nota: O processo de retomada pode levar alguns minutos e a máquina pode parecer travada enquanto a retomada ocorre. Ser paciente.
- suspender - o sistema entra no modo "suspensão" e a luz de energia pisca lentamente (respira). Pressionar o botão liga / desliga principal ativa a máquina. Você deverá ver a tela de login e suas inscrições deverão ser retomadas.
Outras etapas:
você poderá entrar no modo de suspensão/suspensão no menu suspenso de energia. Ao abrir o menu suspenso, pressione a tecla Alt. O ícone de energia deve mudar para o ícone de suspensão.
Uma opção de menu Hibernar também pode ser adicionada. Já existem alguns bons tutoriais sobre isso que podem ser encontrados pesquisando por "ubuntu add hibernate power menu"