为什么 pkexec 不能以 root 用户身份启动基于 Qt 的应用程序?

为什么 pkexec 不能以 root 用户身份启动基于 Qt 的应用程序?

之前有人说,使用sudo来启动基于 GUI 的应用程序是个坏主意。
所以应该使用pkexec

我记起来了,所以我尝试在 Kubuntu 20.04 LTS 上使用终端启动 Kubuntu 驱动程序管理器

pkexec kubuntu-driver-manager

但是这个命令不起作用,它崩溃并显示以下输出:

qt.qpa.xcb: could not connect to display
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: wayland-org.kde.kwin.qpa, dxcb, eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, xcb.

Aborted (core dumped)

我最近报告过错误 1885615。但我对这种行为感到非常惊讶。有趣的是,它sudo kubuntu-driver-manager正常工作。
我仍然可以在 Kubuntu 上使用pkexec- 命令启动基于 Gtk 的应用程序,例如pkexec pluma使用以下命令打开应用程序权利。

所以我的问题就在标题里。

答案1

确实有某种黑客使用pkexec而不是sudo启动没有特定 PolicyKit 的应用程序。政策文件。我们需要指定缺少的环境变量,如下所示:

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY kubuntu-driver-manager

经过实验我发现它只需要一个/usr/share/polkit-1/actions/org.freedesktop.policykit.policy文件即可运行。

答案2

要启动某个程序,目录中必须有该程序的pkexec正确文件。这与使用哪个图形工具包(Gtk 或 Qt)无关。.policy/usr/share/polkit-1/actions

相关内容