Tenho um script que implementa um menu simples usando o dialog (um ncurses
aplicativo para gerar widgets TUI). Ele é executado imediatamente após a inicialização em um sistema baseado em Arch.
O script de diálogo funciona de forma independente, mas há um problema quando é executado após a inicialização. O processo de inicialização grava uma saída atrasada no console ("Iniciando serviço de despacho de script do gerenciador de rede" e possivelmente um tempo limite posterior), e isso sobrescreve o menu e bagunça os modos tty. Posso consertar o modo tty ( stty sane
), mas também preciso impedir que o texto chegue ao console.
Existe alguma maneira de despejar qualquer saída do console do kernel do script?
Não conheço nenhuma maneira de despejar qualquer saída do console do kernel do script, mas talvez você possa tentar impedir que o kernel inunde seu console
Para fazer isso, descomente esta linha em /etc/sysctl.conf
e aplicar: é recomendado reinicializar, mas você pode tentar:
Há alguns problemas aqui. O primeiro é que a saída de inicialização do kernel não pode ser desativada por nenhuma variante de
kernel.printk
(definindo 1 ou todos os 4 valores, oudmesg
, ou definindologlevel=n
na linha de comando de inicialização). Não examinei isso em detalhes, mas presumivelmente a inicialização não usaprintk
para registro. Além disso, akernel.printk
configuração padrão é1 4 1 4
(durante a inicialização no Arch), o que deve desativar as mensagens de qualquer maneira.Isso vale tanto para o modo "direto" quanto para o modo de tela. No entanto, é possível desativar quase toda a saída de inicialização com um
quiet
parâmetro do kernel, então optei por isso.O segundo problema é que os modos tty ficam confusos em algum momento se você tiver vários widgets de diálogo. O primeiro está OK, o segundo não; TAB e as teclas de seta não funcionam mais. Isso não pode ser corrigido com um
stty sane
ou umreset
. No entanto, tudo fica OK se você executar o script em uma sessão de tela (inicie seu script com algo comoif [ -z "$STY" ]; then exec screen -S netinst /bin/bash "$0"; fi
).