如何在 shell 中使用以下密码提示对话框?(GNOME)

如何在 shell 中使用以下密码提示对话框?(GNOME)

在此处输入图片描述

我怎样才能从需要提示输入密码的 shell 脚本中触发上述对话框?

我已经遇到过并且用于zenity此目的,尽管出于审美原因我更喜欢前者(是的,有时这很重要;-)。

Zenity 替代方案:

在此处输入图片描述

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

Ubuntu 20.04,GTK,GNOME

答案1

我知道这篇文章已经快 6 个月了,但没有人建议使用 yad(又一个对话)工具。它看起来是这样的:

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“确定”和“取消”按钮。在此示例中,可以从变量 $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。如果我没记错的话,它是gpg

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

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

相关内容