Источник этого вопроса, для меня, заключается в том, что при установке пользовательского дистрибутива на основе Centos можно запустить команду whiptail в сценарии %pre
из файла кикстарта. Однако поведение, наблюдаемое в Anaconda, может быть легко воспроизведено через виртуальные терминалы любой системы Linux.
Для запуска команды whiptail в Anaconda в качестве сценария kickstart %pre
необходимо переключить TTY и выполнить команду в этом новом TTY. Преобладающее предложение относительно того, как это сделать:
%pre
exec </dev/tty6 >/dev/tty6 2>/dev/tty6
chvt 6
# then execute your command, for example:
whiptail --inputbox "Enter some text..." 10 30
# switch back to the original TTY
chvt1
exec </dev/tty1 >/dev/tty1 2>/dev/tty1
%end
При использовании этого метода диалоговое окно whiptail корректно отображается в новом TTY, однако никакое взаимодействие не может иметь место с диалоговым окном - например, нажатие клавиши tab
вместо переключения между элементами ввода текста, элементами "Ok" и "Cancel" фактически вставляет вкладка в поле ввода текста. Точно так же использование клавиш со стрелками приводит к тому, что escape-последовательности записываются в диалоге:
Такое поведение также наблюдается при использовании python snack (использует ту же библиотеку, что и whiptail - libnewt) и диалоговом окне.
Конечно, я мог бы просто использовать интерактивный сценарий оболочки, а не использовать whiptail, но мне было просто интересно, есть ли у кого-нибудь какие-либо предложения относительно того, почему это поведение наблюдается, так как я бы подумал, что единственными требованиями для получения этой работы будут правильно перенаправить входной и выходной потоки.
TL; DR
Я заинтересован в создании сценария, содержащего команды whiptail/dialog, которые могут быть выполнены в одном TTY и получать / вводить сценарий в / из другого TTY.