![无法使用“pkexec”以其他用户身份执行 GUI 应用程序](https://linux22.com/image/123770/%E6%97%A0%E6%B3%95%E4%BD%BF%E7%94%A8%E2%80%9Cpkexec%E2%80%9D%E4%BB%A5%E5%85%B6%E4%BB%96%E7%94%A8%E6%88%B7%E8%BA%AB%E4%BB%BD%E6%89%A7%E8%A1%8C%20GUI%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F.png)
我在以下位置创建了以下策略文件/usr/share/polkit-1/actions/com.xyz.xyz.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>
<vendor>XYZ Technologies Inc.</vendor>
<vendor_url>http://www.xyz.com</vendor_url>
<action id="org.xyz.policykit.pkexec.run-xyz">
<description>Run XYZ</description>
<message>Authentication is required to run XYZ</message>
<defaults>
<allow_any>no</allow_any>
<allow_inactive>no</allow_inactive>
<allow_active>auth_admin</allow_active>
</defaults>
<annotate key="org.freedesktop.policykit.exec.path">/usr/bin/xyz</annotate>
<annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
</action>
</policyconfig>
和桌面文件位于/usr/local/share/applications/xyz-gui-root.desktop
[Desktop Entry]
Encoding=UTF-8
Version=1.0
Type=Application
Terminal=false
Name[en_in]=XYZ administrator (root)
Exec=pkexec xyz
Comment[en_IN]=Launches XYZ administrator
Name=XYZ administrator (root)
Comment=Launches XYZ administrator
Icon[en_IN]=/xyz/xyzroot.png
Icon=/xyz/xyzroot.png
当我搜索 XYZ 并运行时Activity->Search
,它没有显示任何活动,甚至不要求输入密码。但是双击xyz-gui-root.desktop
文件,它可以通过密码身份验证按预期工作。
如果我改变
Exec=pkexec xyz
作为
Exec=gnome-terminal -x pkexec xyz
它可以与Activity->Search
身份验证配合使用,但会打开不需要的终端。
我在上面的文件中缺少什么?如何避免不需要的终端通过gnome-terminal
输入打开?有没有什么方法可以使用身份验证pkexec
或任何其他方法来执行 GUI 应用程序consolehelper
?
提前致谢!
答案1
我的问题的完整答案是这里。简而言之:
1) 创建一个 shell 脚本 /usr/local/bin/foo.sh:
#!/bin/sh
pkexec "/usr/sbin/foo" "$@"
2)给上述脚本赋予可执行权限:
chmod +x /usr/local/bin/foo.sh
3) 如果您使用.desktop 文件,请将 Exec 值更改为:
Exec=/usr/local/bin/foo.sh
4) 确保 /usr/share/polkit-1/actions/ 中的策略文件具有以下条目以允许 GUI:
<annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
就是这样!