使用policykit+dbus代替gksu运行图形应用程序
我在找一个命令,它能像gksu或beesu那样工作,但需要依赖policykit。
关于policykit和dbus的文档有点复杂,看起来不太清楚。
我找到了“pkexec”,但是在尝试运行图形应用程序时,它会显示错误。
pkexec gedit
结果:
(gedit:7243): Gtk-WARNING **: cannot open display:
2 个回答
0
大多数图形程序都需要使用dbus,所以即使你成功运行了它,也可能会出现问题。对于gnome程序,至少需要设置以下几个变量:'SESSION_MANAGER', 'DBUS_SESSION_BUS_ADDRESS', 'DISPLAY', 'GNOME_DESKTOP_SESSION_ID', 'XAUTHORITY'
。而对于kde程序,你需要设置这些变量:'SESSION_MANAGER', 'DBUS_SESSION_BUS_ADDRESS', 'DISPLAY', 'KDE_FULL_SESSION', 'XAUTHORITY'
。我觉得pkexec至少需要'XAUTHORITY'和'DISPLAY'这两个变量,才能连接到xorg服务器。
2
你需要在 /usr/share/polkit-1/actions
目录下创建一个 action definition file
,这个文件要用 XML
格式写。
把这个文件复制到 /usr/share/polkit-1/actions/com.example.gedit
这个位置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE policyconfig PUBLIC
"-//freedesktop//DTD PolicyKit Policy Configuration 1.0//EN"
"http://www.freedesktop.org/standards/PolicyKit/1/policyconfig.dtd">
<policyconfig>
<action id="com.example.gedit">
<message gettext-domain="gedit">Authentication is required to run gedit as root</message>
<icon_name>accessories-text-editor</icon_name>
<defaults>
<allow_any>auth_admin</allow_any>
<allow_inactive>auth_admin</allow_inactive>
<allow_active>auth_admin</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gedit</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
</action>
</policyconfig>
这里的 org.freedesktop.policykit.exec.allow_gui = true
设置会允许 gedit 连接到你的 Xorg 服务器。这样它会自动把 XAUTHORITY
和 DISPLAY
这些信息传递给它。