我正在使用Gnome3 Flashback桌面环境附带的Trisquel GNU/Linux-Libre 。
我知道我可以通过sudo&以 root 身份运行 GUI 应用程序,gksudo但我想知道如何在 的帮助下以 root 身份运行 GUI 应用程序pkexec?
当我尝试运行gedit(或像任何其他应用程序:nautilus)由pkexec gedit然后,它会提示输入密码进行验证: -

输入密码后,它退出并出现错误:-
$ pkexec gedit
error: XDG_RUNTIME_DIR not set in the environment.
(gedit:6135): Gtk-WARNING **: cannot open display:
Run Code Online (Sandbox Code Playgroud)
所以,似乎显示环境出了问题。
我也试过,DISPLAY=:0 pkexec gedit但不起作用。
以下信息可从man pkexec:-
PROGRAM 将运行它的环境将设置为最小的已知和安全环境,以避免通过 LD_LIBRARY_PATH 或类似机制注入代码。此外,PKEXEC_UID 环境变量设置为调用 pkexec 的进程的用户 ID。因此,pkexec 将不允许您以其他用户身份运行 X11 应用程序,因为 $DISPLAY 和 $XAUTHORITY 环境变量未设置。如果操作上的 org.freedesktop.policykit.exec.allow_gui 注释设置为非空值,则将保留这两个变量;但是,这是不鼓励的,并且应该仅用于遗留程序。
现在我不知道该怎么做才能做到这一点。
因此,请帮助我了解如何通过pkexec. …
在 CentOS 5 的旧时代,我有一个以另一个用户身份运行的应用程序。我创建了一个 .desktop 文件,它运行如下命令:
gksu -u anotheruser someapplication
Run Code Online (Sandbox Code Playgroud)
当用户单击该图标时,弹出窗口要求输入“另一个用户”的密码,当密码正确时,“某个应用程序”启动。
现在,在 CentOS 7 的现代,我找不到这种行为的替代品。我尝试过beesu:
beesu -l -P someapplication anotheruser
Run Code Online (Sandbox Code Playgroud)
但它要求我输入 root 密码而不是“另一个用户”密码。
我也尝试过 pkexec:
pkexec --user anotheruser someapplication
Run Code Online (Sandbox Code Playgroud)
结果相同。
这两种方法在寻找正确的显示变量时也存在问题:
Failed to parse arguments: Cannot open display:
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激。
谢谢。
如何强制“machinectl shell”或systemd-run在终端而不是对话框窗口中询问密码?
我可以使用以下命令以 root 身份运行命令:
machinectl shell --uid=root --setenv='DISPLAY=:1.0' --setenv=SHELL=/bin/bash .host /bin/bash -lc 'startxfce4'
Run Code Online (Sandbox Code Playgroud)
我想拥有与 sudo 相同的行为(sudo 使用终端询问密码,以便我可以轻松编写脚本)
我发现正在使用 ssh 这样的方式:
ssh -t MyActualNormalUser@localhost
Run Code Online (Sandbox Code Playgroud)
然后运行与上面相同的命令:
machinectl shell --uid=root --setenv='DISPLAY=:1.0' --setenv=SHELL=/bin/bash .host /bin/bash -lc 'thunar'
Run Code Online (Sandbox Code Playgroud)
现在 machinectl 使用终端而不是 GUI 对话框窗口询问密码!

如何在不使用 ssh 的情况下获得相同的结果?是否可以强制 machinectl/pkexec 在终端中询问密码?
为什么不使用sudo?sudo 不要为我运行的命令创建一个新会话,machinectl 运行一个完全分离的会话,这使脚本编写工作更轻松。当我读到 machinectl/pkexec 时,如果我没记错的话,su/sudo 将被替换...
我刚刚在 freedesktop.org 上阅读 David Z 为 pkexec 编写的参考手册:
https://www.freedesktop.org/software/polkit/docs/latest/polkit.8.html
和
https://www.freedesktop.org/software/polkit/docs/latest/pkexec.1.html
手册说,使用 auth_admin_keep 选项只会将您的密码保留 5 到 15 分钟,如果我们想设置自定义超时,我们可以编写自定义规则。
有人知道我如何编写超时的自定义规则吗?我尝试按照手册进行操作,但我不是编码员,我无法理解 Syntax,也没有提到与超时相关的 Syntax。
天哪..我刚刚犯了一个可怕的错误:chown -R root:root /usr。Mea [maxima] culpa..我已经修复sudo了pkexec,但我想确定,将来不会有“睡眠”问题等着我。
有人可以使用简单的命令找出哪些文件/目录具有“特殊”权限吗?我知道/usr/bin/sudo,/usr/bin/pkexec而且/usr/lib/policykit-1只知道。谢谢..
我正在使用 Debian 11..