Parece que qualquer script interativo iniciado a partir de rc.local terá problemas semelhantes com stdin. Eu encontrei uma solução no superusuário :
Just launch your script using
openvt -s -w /path/to/script.sh
(explicação no post original)
Eu preciso iniciar um script Bash contendo chamadas para o diálogo no momento da inicialização do Debian. Foi assim que consegui:
No entanto, o diálogo tem um comportamento incomum: a caixa aparece, mas stdin parece estar transbordando de stdout. Quando pressiono as teclas de seta, nenhum botão é selecionado, mas, em vez disso, os caracteres ASCII correspondentes são exibidos na parte superior da caixa de diálogo, começando da posição de escolha padrão:
exibe bug na caixa de diálogo http://nsa37.casimages.com/img/2015/04 /30/150430104952858013.png
Observe que, se eu pressionar enter, as chaves serão enviadas para a caixa de diálogo e a opção correspondente será selecionada como pretendido. O script está testando quando é executado normalmente.
Suponho que algo está faltando na inicialização do shell: se eu colocar /bin/bash
em rc.local
, recebo no job control in this shell
message e não posso enviar sinal para processos nem obter pids (recebo pontos de interrogação em vez de pids em top
).
Por que esse comportamento e como posso superá-lo?
Parece que qualquer script interativo iniciado a partir de rc.local terá problemas semelhantes com stdin. Eu encontrei uma solução no superusuário :
Just launch your script using
openvt -s -w /path/to/script.sh
(explicação no post original)
O console não está conectado a stdin
do processo whiptail
.
Parece o mesmo problema visto em rc.local com leitura não ecoará os toques de tecla .
A resposta sugerida é adicionar plymouth quit
antes de tentar a entrada do console.
Alternativamente, pode ser possível organizar o próprio Plymouth para exibir sua advertência; algo como
plymouth pause-progress
plymouth message --text="Your system will be hosed. Is that what you want? What you really, really want? [yn]"
plymouth watch-keystroke --keys="YyNn " --command="tee /tmp/key_pressed"
case $(cat /tmp/key_pressed) in
[nN])
poweroff; # abort!
;;
esac
plymouth message --text="Okay, you asked for this"
plymouth unpause-progress
Advertência: Eu não sou especialista em Plymouth, e não tentei o que foi dito acima.