Rastreie se estamos ou não vindo de uma sessão de usuário
Estou postando uma resposta para minha própria pergunta aqui. Se alguém tiver outras soluções, adoraria vê-las.
Visão geral da solução
Não é suficiente verificar se alguém está logado quando o session-cleanup-script
é executado, porque esse script é executado depois que os usuários foram completamente desconectados. Eu decidi rastrear isso assim.
- Use
greeter-setup-script
para definir um arquivo temporário no login - Ao executar
session-cleanup-script
, verifique se o arquivo existe.- Se houver, reinicialize / desligue a pré-forma
- Se isso não ocorrer, encerre o script sem reinicializar / desligar
Exemplo de configuração
Exemplo /etc/lightdm/lightdm.conf.d/50-ubuntu-mate.conf
file
[Seat:*] user-session=mate greeter-setup-script=/path/to/greeter-setup.sh session-cleanup-script=/path/to/session-cleanup.sh # ... (other settings)
Exemplo de greeter-setup.sh
script
#!/bin/bash
# Start watching for login and on login, set a status file
(
while [ $(who | grep "(:0)" | wc -l) -eq 0 ]
do
sleep 1
done
touch /tmp/loggedIn
) &
# ... do anything else that needs to be done when the greeter starts
Exemplo de session-cleanup.sh
script
#!/bin/bash
# Check the status file. If it exists, remove it and continue the script.
# If it does not exist, drop out of the script.
[ -e /tmp/loggedIn ] && rm /tmp/loggedIn || exit
# ... do whatever else needs to be done when sessions end
# in my case this amounts to ...
/sbin/shutdown -h 0