Você pode conseguir as duas coisas
- Desligar em modo inativo após o período especificado.
- Tempo em que um usuário fez login ou não deve ser desligado.
com um script simples.
O script verificará o tempo ocioso e, se for maior que o número dado, desligará completamente o sistema.
Você pode definir esse script para executar a cada minuto ou a cada 10 segundos (como preferir) pelo cronjob da raiz. A execução do cron do root sempre que você estiver logado ou não estiver logado, contanto que o seu PC esteja rodando. Então, isso resolverá seu problema.
Para obter o tempo ocioso atual em milissegundos, você pode instalar xprintidle
:
sudo apt-get install xprintidle
Eu criei um script bash simples para você, que você pode colocar para ser executado pelo cron do root:
#!/bin/bash
export DISPLAY=:0
IDLE_TIME='xprintidle'
MAX_IDLE_TIME=3600000
if [ "$IDLE_TIME" -ge "$MAX_IDLE_TIME" ]; then
shutdown -h now
fi
Observe que export DISPLAY=:0
é necessário para que o xprintidle funcione corretamente no cron. MAX_IDLE_TIME
é o tempo ocioso máximo em milissegundos depois que o computador será desligado. 3 600 000 milissegundos é igual a uma hora. Você pode alterar esse valor de acordo com suas necessidades.
Agora, salve este arquivo em algum lugar do seu sistema de arquivos (de preferência, não a sua pasta pessoal, porque ela pode estar criptografada). Dê as premissions executáveis do arquivo sh:
chown +x file.sh
Em seguida, defina o cron do root para executá-lo a cada minuto:
sudo crontab -e
e coloque:
* * * * * /path/to/file.sh