我可以在 python 脚本或 .desktop 文件中使用 pkexec 吗?

Tak*_*kat 8 python gksu .desktop pkexec

从以下问题

我们看到 gksu 将不再受长期支持,并且从 >= 13.04 开始默认不会安装。相反,我们应该使用 pkexec ,它可以很好地用于非图形应用程序,但不适用于 GUI 上的应用程序:

pkexec gedit
Run Code Online (Sandbox Code Playgroud)

在 .desktop 文件中替换 gksu 时

EXEC=pkexec /usr/bin/gedit
Run Code Online (Sandbox Code Playgroud)

或者当我运行 python 脚本以运行具有 root 权限的图形应用程序时,我收到以下错误:

>>>subprocess.Popen(['pkexec','gedit'])
** (gedit:3203): WARNING **: Could not open X display
Run Code Online (Sandbox Code Playgroud)

如果我不应该让它依赖于 gksu,我将如何重写我的脚本或我的 .desktop 文件以支持身份验证对话框并以 root 身份运行应用程序?

use*_*787 6

首先.policy/usr/share/polkit-1/actions/. 通常以“供应商分层”方式命名操作文件,例如com.ubuntu.pkexec.gparted.policyorg.debian.apt.policy

然后粘贴以下内容:

<?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="org.freedesktop.policykit.pkexec.run-[Short Program Name]">
    <description>Run [Full Program Name]</description>
    <message>Authentication is required to run [Full Program Name]</message>
    <defaults>
      <allow_any>no</allow_any>
      <allow_inactive>no</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">[Full Program Path]</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
  </action>

</policyconfig>
Run Code Online (Sandbox Code Playgroud)

替换[Short/Full Program Name/Path]为适当的值,例如geditgedit Text Editor/usr/bin/gedit<action id>value 不需要匹配所选文件名(并且单个文件可以包含多个操作),但通常文件名是其所有操作的前缀。

保存文件后,特定程序将使用 X 和 GUI 等运行。

另一个修复似乎是:在 /etc/pam.d/polkit-1 中添加以下行:

会话可选 pam_xauth.so