É possível fazer o Ubuntu entrar no estado de Hibernate a partir do Suspend, também conhecido como "Suspend Sedation"?
O que estou procurando é o seguinte:
Quando fecho a tampa, o laptop é colocado em Suspender. Depois de um tempo pré-determinado (mesmo que a bateria esteja ficando forte), se eu ainda não a usar, ela deverá se colocar no Hibernate para economizar energia da bateria.
Por exemplo, meu laptop está configurado para entrar em Suspender quando eu fechar a tampa. Se não o uso durante todo o dia, a bateria fica descarregada, porque mesmo no modo de suspensão o hardware ainda consome uma pequena quantidade de energia e a bateria acaba descarregando. O que eu quero é poder dizer ao Ubuntu que, mesmo que esteja suspenso, ele ainda precisa entrar no Hibernate após algumas horas de inatividade.
O Windows pode fazer isso. O Ubuntu pode ser programado para entrar no modo de espera ou de hibernação no timer, mas não nos dois.
fonte
Respostas:
No Ubuntu 18.04 é muito mais fácil. No systemd está disponível um novo modo de suspensão e hibernação . Para começar a usar esta função, você precisa criar um arquivo /etc/systemd/sleep.conf com o próximo conteúdo:
Então você pode testá-lo por comando:
você pode editar
HibernateDelaySec
para reduzir o atraso da hibernação.Se tudo funcionar bem, você pode alterar a ação Fechar tampa, para isso, é necessário editar o arquivo /etc/systemd/logind.conf
Você precisa encontrar a opção
HandleLidSwitch=
, descomentar e alterar paraHandleLidSwitch=suspend-then-hibernate
. Em seguida, você precisa reiniciar o serviço systemd-logind (aviso! A sessão do usuário será reiniciada) pelo próximo comando:Isso é tudo! Agora você pode usar esta boa função.
fonte
A solução para isso é simples. Primeiro, ao suspender e retomar, o programa pm-suspend executa uma série de scripts em
/etc/pm/sleep.d
e/usr/lib/pm-utils/sleep.d
. Portanto, minha solução é adicionar um script que faça o seguinte:Aqui está um script que faz isso. Nomeie-o
0000rtchibernate
e coloque-o no/etc/pm/sleep.d
diretório (o 0000 é importante, para que o script seja executado primeiro na suspensão e por último no resumo).Espero que este código seja exibido neste quadro de mensagens (este é o meu primeiro post aqui).
Edite o valor do tempo limite
autohibernate=7200
na parte superior, por quantos segundos você deseja dormir antes de entrar em hibernação. O valor atual acima é de 2 horas. Observe que seu laptop ACORDARÁ naquele momento por alguns segundos, enquanto estiver executando a função de hibernação.Portanto, se você planeja colocar seu laptop em um estojo, não o suspenda, mas hiberne. Caso contrário, seu laptop poderá superaquecer em esp. se estiver em um estojo de encaixe apertado (embora esteja ligado apenas por alguns segundos a um minuto).
Eu tenho usado esse método nos últimos dois dias, até agora ele foi bem-sucedido (e me salvou de uma bateria descarregada esta tarde). Desfrutar.
Para outras distribuições Linux que usam
systemd
versões mais recentes do Ubuntu, isso ainda funcionará se você inserir o script em/usr/lib/systemd/system-sleep
vez de/etc/pm/sleep.d
. Além disso, substitua o/usr/sbin/pm-hibernate
comando porsystemctl hibernate
.fonte
Para explicar como isso funciona (isso é semelhante ao Windows) em palavras simples: a máquina não acorda do modo de espera quando a bateria fica fraca para poder salvar o estado da máquina na partição swap, salva tudo na partição swap imediatamente no modo de espera, e quando a bateria acabar, ela se recuperará disso carregando o estado da partição swap (como faria no caso de hibernação).
O AFAIK linux deve / deve usar o modo de espera híbrido / hibernar em vez do modo de espera "normal" se souber que funciona para o seu hardware. Também é possível que isso esteja desativado no momento por causa de muitos bugs ou algo assim ...;)
Se você gosta de experimentar, talvez consiga ver bons resultados com o pm-suspend-hybrid .
Se o seguinte diz que você tem sorte, em teoria, a suspensão híbrida é suportada no seu sistema:
fonte
Você pode estar interessado em s2both . É fornecido pelo pacote
uswsusp
no Ubuntu 10.10. Ele suspende para o disco, mas, em vez de desligar o sistema, coloca-o no S3, que é o modo de energia geralmente associado à opção "Suspender" no Ubuntu. pm-suspend-hybrid é outra ferramenta que pretende fazer a mesma coisa.Para tornar isso automatizado na tampa, dê uma olhada no seguinte guia, que permite executar um script arbitrário quando um evento de tampa é capturado:
http://ubuntuforums.org/showthread.php?t=1076486
Se você possui um ThinkPad, a página de manual
tpctl
faz referência a um argumento--pm-sedation-hibernate-from-suspend-timer
, que parece fornecer o recurso que você está procurando. Eu o advertiria contra tentar isso em hardware não-ThinkPad.Para referência, procurei na página de manual hibernate.conf ; não parecia ter opções relevantes, mas poderia valer uma segunda leitura.
fonte
Ubuntu 16.04 - da suspensão / suspensão para a hibernação após um tempo predeterminado
Parece que no Ubuntu 16.04 as coisas são um pouco diferentes, então as etapas que tomei para fazê-lo funcionar foram:
Verifique se o hibernate está funcionando conforme o esperado ao executar
Copie o
suspend.target
arquivo original :Em seguida, edite o arquivo
/etc/systemd/system/suspend.target
e adicione a linha:para a
[Unit]
seção desse arquivo.Crie o arquivo
/etc/systemd/system/delayed-hibernation.service
com o seguinte conteúdo:/etc/delayed-hibernation.conf
para o script com o seguinte conteúdo:Crie o script que realmente fará o trabalho duro.
Crie um arquivo
/usr/local/bin/delayed-hibernation.sh
com o conteúdo:Demorei bastante até escrever este script com base em outras respostas deste tópico, coisas que encontrei na internet como https://bbs.archlinux.org/viewtopic.php?pid=1554259
Minha versão do script tenta lidar com muitos problemas, como suspender novamente se o hibernar não tiver sido bem-sucedido, mas não for ativado novamente após o tempo pré-determinado, repetidamente.
Etapa final que eu assumo seria apenas executar
para garantir que novos serviços / configurações estejam sendo usados.
Para verificar o log de serviço, você pode usar:
ou para um log completo do uso do serviço:
Um log normal que recebo do serviço em execução é:
Então é isso, espero que realmente ajude alguém, pois passei dias tentando descobrir a combinação certa de configurações e versões de script para fazer esse útil recurso funcionar.
fonte
/bin/systemctl hibernate
sempre retornaria 1 ao executar no script systemd, mesmo que funcione bem na linha de comando.Apenas no caso de algo dar errado durante
pm-hibernate
eu prefiro suspender o computador do que deixá-lo funcionar. Então você pode usar:fonte
Aqui está uma versão atualizada da resposta de Derek Pressnall que funciona com systemd e inclui a sugestão de Eliah Kagan , basta soltá-la em /usr/lib/systemd/system-sleep/delayed_hibernation.sh e torná-lo executável:
fonte
Aqui está minha receita (testei em dois notebooks Ubuntu 16.04):
Coloque esse script onde quiser (eu o coloco como root
/syspend.sh
) e o torne executável (chmod +x /suspend.sh
)Em seguida, crie o destino do systemd:
# touch /etc/systemd/system/suspend-to-sleep.target
Cole este conteúdo:Então habilite-o
# systemctl enable suspend-to-sleep.target
.Eu enfrentei um problema no notebook: fechar a tampa não acionava esse alvo. Isso ocorreu devido ao xfce4-power-manager. Existem duas maneiras de solucionar esse problema. O primeiro é editar o
/etc/systemd/logind.conf
arquivo e substituí-loHandleLidSwitch=ignore
porHandleLidSwitch=suspend
. Mas será em todo o sistema, então acabei de adicionar um link simbólico ao meu script# ln -s /suspend.sh /etc/pm/sleep.d/0000rtchibernate
fonte
Outra solução alternativa mais comum que você pode usar
hybrid-sleep
(como o Mac OS). Se o seu computador suportar hibernação, você poderá usar este recurso:Esse comando deve suspender e enviar para o disco (hibernar) o computador. Depois de algum tempo, o computador será desligado (ao ligar, os arquivos de hibernação serão ativados).
ps: Eu sei que não é exatamente o que o OP postou, mas é bem próximo
fonte
Não se esqueça de chmod + x esse arquivo, torná-lo executável.
Existe outra solução sem o rtcwake, usando o wakealarm em / sys / class / rtc / rtc0. Faça uso de código obsoleto nas funções pm (/ usr / lib / pm-utils) após os comentários #since o kernel não suporta diretamente ..., (porque o kernel atual (após algo do 3.6) suporta diretamente). Reverta esse código e insira a parte do_suspend () em vez de do_suspend_hybrid ().
Código obsoleto (suspenda e hiberne quando o suspend_hybrid for chamado):
Recomendado. Ainda mais fácil de usar uswsusp, ao mesmo tempo, maximiza os benefícios do s2both, ou seja, s2both ao suspender. Coloque o código revertido na parte do_suspend () do módulo uswsusp (/usr/lib/pm-utils/module.d).
Código revertido (suspend_hybrid quando a suspensão é chamada):
Com uswsusp, podemos ver o progresso de suspender / hibernar e o processo inverso exibido no texto, até podemos abortá-lo pressionando backspace. Sem o uswsusp, suspender / hibernar apenas parece desaparecer irritantemente, especialmente quando o wakealarm é acionado e executa o hibernar (s2disk em uswsusp). Defina o período de suspensão antes da hibernação no local usual no arquivo pm-functions.
Aqui está o mod uswsusp: (lembre-se, este módulo é chamado de pm-functions para que as variáveis inseridas sejam as mesmas)
fonte