Eu tento dar um comportamento a uma tampa de fechamento de um laptop seguindo estas regras:
Quando a tampa está fechada:
- Após 1m, deve ser bloqueado;
- Após 10m, deve ser suspenso;
- Após 15m, deve ser desligado.
Então, eu faço o seguinte script:
#!/bin/bash
USER=fauve
sleep 1m
# set screensaver
su -c "$HOME/.local/bin/screenlock" - $USER
# hibernate
sleep 9m
systemctl suspend
sleep 5m
# shutdown
shutdown 0
Mas, como você vê, shutdown
o laptop vem quando o laptop está em suspensão, então ele nunca será desligado.
Então, como posso programar uma suspensão ou desligamento por 5 minutos e, em seguida, fazer com que o script continue a desligar completamente o computador?
resumindo: não pode. Pelo menos não em software. Quando você coloca seu computador em suspensão, ele é suspenso. Software como
sleep
(ou mais precisamente, o sysstick ou timer que diz ao seu kernel para ativar a tarefa após um determinado tempo) simplesmente não será executado.Então, a única coisa aqui é uma solução de hardware. Seu notebook precisa ter algum despertador para acordar e sair da suspensão!
Felizmente, isso é bastante normal;
faria isso. SE o seu laptop suporta.
Note que duvido do sentido disso. Da maneira como você escreveu seu script, seu laptop sempre desliga diretamente quando sai da suspensão após 5 minutos ou mais. Acho que você quer outra coisa. Meu palpite é que você gostaria de verificar se os 5 minutos realmente se passaram e, se não, suponha que o laptop foi retirado manualmente da suspensão e não o desligou. Nesse caso, você precisaria salvar o tempo de pré-suspensão e compará-lo com o tempo depois.
Talvez você queira
systemctl suspend-then-hibernate
? Isso pareceria uma coisa provável. Sob o capô, ele faz o mesmo: confie no RTC para sair da suspensão em algum momento, salve o estado do sistema no disco e desligue , a menos que seja acordado manualmente antes.