Fedora
無法使用“pkexec”以其他使用者身份執行 GUI 應用程序
我在以下位置創建了以下策略文件
/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
嗎?提前致謝!
我的問題的完整答案在這裡。簡而言之:
- 創建一個 shell 腳本為 /usr/local/bin/foo.sh:
#!/bin/sh pkexec "/usr/sbin/foo" "$@"
- 賦予上述腳本可執行權限:
chmod +x /usr/local/bin/foo.sh
- 如果您使用的是 .desktop 文件,請將 Exec 值更改為:
Exec=/usr/local/bin/foo.sh
- 確保 /usr/share/polkit-1/actions/ 中的策略文件具有以下條目以允許 GUI:
<annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
就是這樣!