Как вызвать вышеуказанное диалоговое окно из скрипта оболочки, который должен запрашивать пароль?
Я уже сталкивался с этим и использую его zenity
для этой цели, хотя первый вариант мне нравится больше по эстетическим причинам (да, иногда это имеет значение ;-).
Альтернатива Zenity:
zenity --password --title="Enter private passphrase"
Ubuntu 20.04, GTK, GNOME
решение1
Я знаю, что этому посту почти 6 месяцев, но никто не предложил использовать инструмент yad (еще один диалог). Вот как это выглядит:
Полная команда:
password="$(yad --center --width=300 --image=keys.png --entry --hide-text --button=gtk-ok:0 --button=gtk-cancel:1 --title="Authentication required" --text="Enter password:")"
Пароль не отображается на экране по мере ввода (это делает "--hide-text"). Кнопки — стандартные gtk "OK" и "Cancel". В этом примере доступ к введенному паролю можно получить из переменной $password, например
echo $password
Если нажата кнопка отмены, код возврата ($?) от yad равен 1 (от --button=gtk-cancel:1), а код возврата равен 0 при нажатии кнопки ОК (от --button=gtk-ok:0).
yad можно установить в более поздних версиях Ubuntu из Центра программного обеспечения, для версии 16.04 требуется установка с помощью:
sudo apt install yad
Домашняя страница yad находится здесь: https://sourceforge.net/projects/yad-dialog/
Другие примеры использования yad можно найти здесь: https://sourceforge.net/p/yad-dialog/wiki/browse_pages/
решение2
Я думаю, что правильным решением было бы использовать pinentry-gnome3
. IIRC, это зависимостьgpg
askpass() {
prompt=$1
echo -e "SETPROMPT $prompt\nGETPIN\nBYE" | pinentry-gnome3 | grep -E '^D ' | sed 's/D //'
}
password=$(askpass 'Enter your password:')