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:
- 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. - 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.