Criei um pequeno script de monitoramento há algum tempo que chamará uma função de interrupção quando o script detectar a tentativa do usuário ao desligar o computador. A pequena modificação necessária para o seu caso específico é cancelar a ação de desligamento, executar o script e, em seguida, chamar o desligamento.
#!/bin/bash
main()
{
dbus-monitor --profile "interface='com.canonical.Unity.Session',type=signal,member=RebootRequested" | \
while read -r line;
do
# echo $line
grep -q '.*NameAcquired.*' <<< "$line" && continue # Ignore that first line
if [ -n "$line" ];then
interrupt
fi
done
}
interrupt()
{
# The first command will close the shutdown dialog
qdbus com.canonical.Unity /com/canonical/Unity/Session com.canonical.Unity.Session.CancelAction
# place call to your script bellow this comment
zenity --info --text='Remember to push changes to git repo'
# Uncomment line bellow for shutdown
# qdbus com.canonical.Unity /com/canonical/Unity/Session com.canonical.Unity.Session.Shutdown
}
main
Este script, claro, deve ser adicionado como parte dos aplicativos de inicialização ou você pode criar manualmente o arquivo .desktop para ele
OBSERVAÇÃO : Este script funciona apenas com a GUI, portanto, se o usuário emitir um comando sudo shutdown -P now
, não funcionará. Você precisaria também monitorar o comando shutdown
através de outro script usando pgrep shutdown
ou integrar outra função no script.
Por exemplo, no meu script acima, você deseja adicionar essa função
manual_shutdown_monitor()
{
while true
do
if pgrep shutdown > /dev/null
then
zenity --info --text="GOT MANUAL"
fi
sleep 0.25
done
}
E, em seguida, chame essa função em main()
como esta
manual_shutdown_monitor &