Eu não acho que você possa encontrar uma alternativa melhor e simples no comando gnome-screensaver-command -q
, mas eu encontrei uma solução para fazer seu script funcionar como você espera:
#!/bin/bash
is_active=0
while :
do
sleep 2
if (gnome-screensaver-command -q | grep "is active");
then
if [ "$is_active" -eq "0" ];
then
is_active=1
motion 2> ~/.motion/log &
fi
elif (gnome-screensaver-command -q | grep "is inactive");
then
if [ "$is_active" -eq "1" ];
then
is_active=0
/etc/init.d/motion stop 1> /dev/null
fi
fi
done
Algumas explicações:
-
O comando
motion 2> ~/.motion/log
seguido por&
iniciará o processomotion
para executar no terminal; sem&
, quando a execução do script chegar a essa linha, ela permanecerá bloqueada / bloqueada. - você não precisa executar a cada 2 segundos
motion 2> ~/.motion/log &
ou/etc/init.d/motion stop 1> /dev/null
, mas apenas quando o estado do protetor de tela está mudando; Por esse motivo, outras alterações do script.