Como configurar o sistema para o estado Suspend sedation quando fechar a tampa do laptop

Quando o seu laptop suspende o sistema, armazenando seu estado atual na RAM, ele passa a usar uma quantidade ínfima de energia (apenas o suficiente para manter a imagem do sistema).
No modo de suspensão, contudo, a sessão em que você está ou estava trabalhando não persiste no disco rígido. Portanto, quando a carga da bateria chega ao nível crítico, o sistema será forçado a desligar e você terá que passar por todo o processo de boot novamente.
Há 2 formas de resolver este problema:

  1. O modo clássico (e simples), que consiste na suspensão híbrida, na qual a máquina é suspensa e, ainda assim, guarda o estado atual no disco (como na hibernação). Funciona com a velocidade da suspensão e, quando a carga da bateria acaba, oferece a comodidade da hibernação (que é ainda mais rápida que um boot completo).
    Se você quer conhecer mais sobre esta solução leia os seguintes tutoriais:
    Para usuários Ubuntu 14.04 LTS ou anterior. sugiro a leitura do artigo Suspender, hibernar e suspender-híbrido.
    Como configurar para suspender, hibernar ou suspender-híbrido no systemd, para usuários Debian 8 ou Ubuntu 15.10 (ou superior) ou de qualquer outra distro que use o systemd.
  2. Se você preferir o modo suspend sedation, este texto é pra você. Boa leitura!

O que é suspend sedation

Para escrever este guia, estou usando o Debian 8.2 “Jessie” que, a exemplo do Ubuntu 15.10, faz uso do systemd — o que acarreta algumas mudanças e adições no sistema.
A proposta é usar o real-time wake timer para permitir que o sistema acorde da suspensão, após um tempo predeterminado, e ative a hibernação.
É nisto que consiste o suspend sedation, que faz uso de alguns dos recursos do systemd.

Como ativar o suspend sedation no Debian

Crie o arquivo /etc/systemd/system/suspend-sedation.service, com o seguinte conteúdo:

# /etc/systemd/system/suspend-sedation.service
[Unit]
Description=Hibernate after suspend
Documentation=https://bbs.archlinux.org/viewtopic.php?pid=1420279#p1420279
Documentation=https://wiki.archlinux.org/index.php/Power_management
Documentation=https://wiki.debian.org/SystemdSuspendSedation
Conflicts=hibernate.target hybrid-suspend.target
Before=suspend.target
StopWhenUnneeded=true

[Service]
Type=oneshot
RemainAfterExit=yes
Environment="ALARM_SEC=300"
Environment="WAKEALARM=/sys/class/rtc/rtc0/wakealarm"

ExecStart=/usr/sbin/rtcwake --seconds $ALARM_SEC --auto --mode no
ExecStop=/bin/sh -c '\
ALARM=$(cat $WAKEALARM); \
NOW=$(date +%%s); \
if [ "$NOW" -ge "$ALARM" ]; then \
  echo "suspend-sedation: Acordei - sem alarme definido. Hibernando..."; \
  systemctl hibernate; \
else \
  echo "suspend-sedation: Acordei antes do alarme. Despertar normal."; \
  /usr/sbin/rtcwake --auto --mode disable; \
fi \
'

[Install]
WantedBy=sleep.target

Depois de criar o arquivo, ative-o, através do seguinte comando:

sudo systemctl enable suspend-sedation
Created symlink from /etc/systemd/system/sleep.target.wants/suspend-sedation.service to /etc/systemd/system/suspend-sedation.service.

Se você estiver interessade em ver as mensagens de log deste script, use o journalctl:

journalctl -u suspend-sedation

ou verifique o arquivo /var/log/daemon.log:

cat /var/log/daemon.log | grep suspend-sedation

Discussão

Se você quiser alterar o script acima, não esqueça de repetir o processo de criação do symlink, depois de salvar as mudanças:

sudo systemctl disable suspend-sedation; sudo systemctl enable suspend-sedation

Esta solução foi desenvolvida pelo e12e (link no final) para usar no sistema com dual boot Windows/Linux. Funciona bem em sistemas com boot Linux Exclusive (meu caso). Devo relatar que tive problemas para aplicar esta solução com um monitor HDMI conectado ao notebook (ele não entra em modo de suspensão) — Tudo bem. Eu só fecho a tampa do notebook quando estou fora de casa e sem um segundo monitor conectado.

Referência

https://wiki.debian.org/SystemdSuspendSedation

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como “Rick and Morty” e “BoJack Horseman”.
Me siga no Twitter e vamos trocar ideias!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *