Bug de entrada de caixa de diálogo / Whiptail quando executada a partir de rc.local

1

Eu preciso iniciar um script Bash contendo chamadas para o diálogo no momento da inicialização do Debian. Foi assim que consegui:

  • Desbloquear senha raiz padrão
  • Definir a opção - autologin para tty1 em initrd ( 1: 2345: respawn: / sbin / getty --ututinativo raiz tty1 )
  • Escreva o caminho completo do meu script em /etc/rc.local

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?

    
por pedroapero 30.04.2015 / 11:12

2 respostas

3

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)

    
por 30.04.2015 / 14:50
2

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.

    
por 30.04.2015 / 13:12