在脚本中使用sudo时,如何通过GUI提示询问密码?


14

我将Trisquel GNU / Linux与GNOME闪回桌面环境一起使用。我需要一个GUI密码提示符,以便用户sudo在脚本中执行命令。示例考虑以下脚本:

zenity --question --text="Do you want to install this package?"
if [[ $? -eq 0 ]]; then sudo apt-get install package
else zenity --warning
fi

将以以下方式(运行)执行,即不在终端内执行:

屏幕截图

因此,需要输入密码才能运行命令,sudo否则将无法完成工作。

因此,如何通过GUI提示询问密码?

Answers:


19

您可以在的帮助下通过GUI提示符询问密码-A, --askpass

从联机帮助页:

-A, --askpass
                 Normally, if sudo requires a password, it will read it from the user's terminal.  If the -A
                 (askpass) option is specified, a (possibly graphical) helper program is executed to read the user's
                 password and output the password to the standard output.  If the SUDO_ASKPASS environment variable
                 is set, it specifies the path to the helper program.  Otherwise, if sudo.conf(5) contains a line
                 specifying the askpass program, that value will be used.  For example:

                     # Path to askpass helper program
                     Path askpass /usr/X11R6/bin/ssh-askpass

                 If no askpass program is available, sudo will exit with an error.

所以,你可以图形化的辅助程序,如ssh-askpass会提示输入密码短语用户使用GNOME:

$ which ssh-askpass
/usr/bin/ssh-askpass

因此,将以下行添加到/etc/sudo.conf

# Path to askpass helper program
Path askpass /usr/bin/ssh-askpass

您会发现GUI密码提示:

屏幕截图1

您也可以zenity为此使用其他程序。我使用以下示例:

$ cat /etc/sudo.conf
# Path to askpass helper program
Path askpass /usr/local/bin/zenity_passphrase

zenity_passphrase自定义脚本在哪里设置,可以直接用作命令:

$ cat $(which zenity_passphrase)
#!/bin/bash
zenity --password --title="sudo password prompt" --timeout=10

像这样工作:

屏幕截图2


注意:

  • 您也可以使用gksudo(GTK + su和sudo的前端)代替sudo在带有GUI提示的脚本中使用:

    屏幕截图3

  • 您还可以将pkexecpolkit应用程序)与某些(对于其他需要配置的)应用程序/命令一起使用:

    屏幕截图


例如pkexec leafpad,当使用pkexec时,它Cannot open display:在输入密码后给出。是否需要其他配置?
GTRONICK

试试DISPLAY=:0 pkexec leafpad
Pandya

仍然无法正常工作,Cannot open display:出现相同的消息
GTRONICK
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.