A situação aqui é que você começa na linha de comando e depois chama startx
quando estiver pronto. Empiricamente, você acredita que a GUI tenta executar novamente o .profile
e o script python não pode sair para que a GUI seja interrompida.
Uma solução que pode valer a pena tentar é definir uma variável de ambiente para garantir que seu código seja executado apenas uma vez:
# This is .profile
#
if test -z "$DONE_PROFILE" -o "X$DONE_PROFILE" != "X${USER:-unknown}"
then
# Protected code here will be called only once
#
echo "About to run keyboard polling"; sleep 3
python /home/pi/poll_keyboard.py
export DONE_PROFILE="${USER:-unknown}"
fi
Outra opção é chamar o código somente se stdin estiver conectado a um terminal:
# This is .profile
#
if test -t 0 -a -t 1
then
# Protected code here will be called only if stdin and stdout is a tty
#
echo "About to run keyboard polling"; sleep 3
python /home/pi/poll_keyboard.py
fi
Esta segunda sugestão provavelmente é mais segura, porque ela tratará de programas que fazem login remotamente para executar um serviço (como rsync
ou scp
).
Você pode mesclar os dois de forma que o código seja considerado apenas uma vez e só executado se stdin e stdout estiverem conectados a um terminal. (Apenas aninhe as instruções if...fi
.)
Fui solicitado a explicar a condição test
que protege o código no primeiro exemplo.
if test -z "$DONE_PROFILE" -o "X$DONE_PROFILE" != "X${USER:-unknown}"
Isso pode ser escrito em inglês como " Se $DONE_PROFILE
estiver vazio Ou $DONE_PROFILE
não corresponder a $USER
... ".
A construção ${USER:-unknown}
substitui unknown
se $USER
estiver vazia ou não definida.
Colocar X
na frente de ambos os lados da expressão !=
provavelmente é desnecessário nessa instância, mas é proveniente de uma abordagem de script defensiva. Considere uma variável $A
que tenha o valor -z
e outra variável $B
com o valor apple
. Em alguns shells, escrever test "$A" != "$B"
seria expandido como test -z != apple
, o que é sintaticamente inválido. Prefixar ambos os lados com X
resultaria em uma expansão de test X-z != Xapple
que é sintaticamente segura.