シェルから次のパスワードプロンプトダイアログを使用するにはどうすればよいですか? (GNOME)

シェルから次のパスワードプロンプトダイアログを使用するにはどうすればよいですか? (GNOME)

ここに画像の説明を入力してください

パスワードの入力を求めるシェル スクリプトから上記のダイアログをトリガーするにはどうすればよいですか?

私はすでにzenityその目的に遭遇し、使用していますが、美観上の理由から前者の方が好きでした (ええ、それは時々重要です ;-) )。

Zenityの代替品:

ここに画像の説明を入力してください

zenity --password --title="Enter private passphrase"

Ubuntu 20.04、GTK、GNOME

答え1

この投稿が 6 か月近く前のものであることは承知していますが、yad (yet another dialog) ツールの使用を提案した人はいません。これは次のようになります。

ヤドのスクリーンショット

完全なコマンドは次のとおりです。

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 から) になり、OK ボタンが押された場合の戻りコードは 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。私の記憶が正しければ、それは の依存関係です。gpg

askpass() {
    prompt=$1
    echo -e "SETPROMPT $prompt\nGETPIN\nBYE" | pinentry-gnome3 | grep -E '^D ' | sed 's/D //'
}

password=$(askpass 'Enter your password:')

関連情報