如何从非管理员用户会话中以管理员身份运行GUI应用程序?
我定义了2个用户帐户:
- 一个具有管理员权限(使用
sudo
权限)=>让我们称之为adminuser
。 - 没有任何特权的第二个=>让我们称它为
normaluser
我在这个第二个用户normaluser
上配置了自动登录。
因此,当我打开一个normaluser
会话并希望运行具有管理员权限的应用程序时,
我打开一个终端Ctrl + Alt + T并:
su adminuser sudo anyapplication ...
它工作正常,无需退出normaluser
会话(无需打开normaluser
会话)。
但是,如果应用程序需要使用GUI(图形用户界面)运行,我该怎么办?
我虽然这样:
su adminuser gksu anyapplication ...
但我明白了
** (gksu:9122): WARNING **: the connexion is closed No protocol specified No protocol specified (gksu:9122): Gtk-WARNING **: cannot open display: :0.0
术语
在这个答案中:
-
normaluser
是一个普通用户,不是管理员,不能以root
身份运行sudo
。 -
admin
是一个管理员,可以使用sudo
以root
身份运行命令。 (当然,任何图形命令都应该使用像gksu
/gksudo
这样的图形前端 ,而不是直接使用sudo
。) -
anyapplication
是normaluser
想要以root
身份运行的图形应用程序的名称。normaluser
知道admin
的密码,并且(可能)被告知他/她可能会将其用于此目的。
问题
你的问题的原因,以及迄今为止大多数其他答案不起作用的原因( Marty Fried的优秀答案除外)是:
-
gksu
可以配置为使用sudo
或su
作为其后端。 Ubuntu中gksu
的默认行为是充当sudo
的前端, 而不是su
。 也就是说,默认情况下,gksu
和gksudo
表现完全相同 。 请参阅联机帮助页 。 -
normaluser
不是管理员,因此无法以sudo
身份运行root
sudo
。sudo
提示输入运行它的用户的密码,而不是他们想要成为的用户的密码。 无法使用您的密码执行操作,因为不是您的人是不是管理员的意思 。 -
normaluser
,如果它不是Guest帐户, 可以 用su
作为另一个用户运行命令,输入其他用户的密码 。 但是gksu
是sudo
的前端,而不是su
。 -
normaluser
不能直接以root
身份运行任何命令,因为normaluser
不能使用sudo
,因为没有root
密码,所以没有人可以成为su
root
用户 。
解决方案
该解决方案需要编写执行两个身份validation步骤的命令:
-
normaluser
必须成为admin
才能运行图形命令。 为此,normaluser
必须使用-w
标志运行gksu
以使其以su模式运行而不是默认的sudo-mode ,并使用-u
标志以admin
而不是root
运行命令。 - 以
admin
身份运行的命令必须在没有-w
标志的情况下调用gksu
才能使用sudo
成为root
。
这是命令 (是的,我测试了它😉 ):
gksu -w -u admin gksu anyapplication
系统将提示您输入两次密码:
- 首先,您必须输入
admin
的密码,让normaluser
以su
后端作为admin
运行命令。 - 其次,你必须输入
admin
的密码,让admin
以sudo
后端的root
身份运行命令。
那就对了。 您输入admin
密码两次。
杂项说明:
- 如果您愿意,可以用
gksudo
替换第二个gksu
,以减少混乱。 在Ubuntu中,它们是等价的。 (你也可以用gksudo
替换第一个gksu
,但这会非常违反直觉和令人困惑。) -
-w
是--su-mode
的缩写forms。 -
-S
是--sudo-mode
的缩写forms,但--sudo-mode
使用,因为sudo-mode是默认模式 。 - 您可能希望首先使用一些非常无害的命令来测试它,以确保它能够满足您的需求。 (它会,但你不需要相信我。)例如:
gksu -w -u admin gksu xclock
xclock
是一个很好的简单时钟窗口应用程序。
一种可能有效的方法是在第一次切换到admin用户时使用“sux”而不是“su”。 sux修复了从欺骗用户运行x应用程序的问题。 它在标准sudo apt-get install sux
中,可以通过在命令行输入sudo apt-get install sux
。
然后,只需使用“sux”而不是“su”,它应该按照您期望的方式工作。
让我们重用应用程序xclock
的例子:
sux admin gksu xclock
PAM可以照顾它
这适用于Ubuntu 16.04:
放线:
session optional pam_xauth.so
在某处:
/etc/pam.d/su
和/或
/etc/pam.d/sudo
然后做“su – ”或“sudo su – ”我可以使用图形应用程序作为root。
pkexec
kdesudo和gksu – pkexec
是一种无处不在的替代品,它来自许多软件包所需的policykit-1
软件包。
代替
su admin gksu任何应用......
我建议你尝试使用gksu -u admin anyapplication
,你可以使用gksu
命令自行完成所有操作。 另请注意,您必须输入命令中提到的用户的密码,即,在这种情况下,您必须输入admin的密码。
这是完成此任务的命令。
gksu app-name
先运行它而不先运行su
。 您只需要从普通用户会话运行上述命令,应用程序将以root身份运行。
你应该使用:
gksudo AppName
这首先会显示一个图形密码请求(您的用户密码),然后以root身份启动GUI-app(我刚试过,它确实这样做。有趣的是:我之后立即尝试了gksu AppName
,这也很有效 – 就像它可能应该是,正如“gk”前缀所暗示的那样。所以我不能完全确定你的问题可能位于何处)。
只有一个超级用户,这是root用户。
用户1是管理员并具有sudo权限。
用户2不是管理员,也没有sudo权限。
尝试以用户1身份登录,然后使用该命令
gksudo app-name
(用应用名称替换app-name)
希望有所帮助 – 让我知道。 :O)
编辑:根据要求提供更多信息
如果只是你在电脑上,
然后使用用户1(谁有权使用sudo)
与使用用户2(谁没有使用sudo的权限)没什么不同。
用户1具有与用户2相同的权限。
除非用户1发出带有sudo前缀的命令和/或提供密码以允许应用程序使用root privelages运行。
唯一的区别是用户2无法以root身份运行应用程序。
希望有助于为您解释一下。 :O)