从用户GUI以root身份运行脚本

所以,我有一个需要安装软件的脚本,但脚本需要以root身份运行。

我已经在GUI上创build了一个桌面图标(使用Ubuntu桌面),理想情况下,用户将点击这个图标,它会提示input密码,然后以root身份运行脚本。

到目前为止,如果以root用户身份运行脚本,脚本的作用并不如用户。 脚本看起来像这样:

#!/bin/bash -l zenity --question --text "This script will reboot after installation is complete" --title="Warning\!" 2> /dev/null if [ $? = 0 ]; then install dependencies dpkg -i package.deb etc fi reboot 

但是,如果我点击图标来运行脚本,它加载,它什么都不做,然后我检查日志,并意识到它失败: sudo: no tty present and no askpass program specified我知道我可以修改sudoers文件,但我不想这样做,因为我需要保持这个用户独立。

有没有办法强制运行脚本时要求用户成为root用户? 或者强制GUI要求input密码? 什么是最好的办法做到这一点? 我需要用户运行这个程序,但我需要以root用户身份运行程序,sudo不会因为任何原因执行此程序。

您收到的错误消息告诉您您需要执行的操作:

 sudo: no tty present and no askpass program specified 

您需要configuration一个askpass程序才能使其工作。 如果你还没有安装,你首先需要安装一个。 它看起来像ssh-askpass应该工作。

 sudo apt-get install ssh-askpass 

接下来你需要configurationsudo来使用它。 这可以通过sudo.conf或者一个环境variables来完成。 既然你正在写一个脚本,我想你想使用一个环境variables。 我testing了这个命令:

 SUDO_ASKPASS=/usr/lib/ssh/x11-ssh-askpass sudo -A ls 

第一部分设置环境variables。 -A参数强制sudo始终使用GUI来请求密码,即使它在terminal中运行。