Fedora

無法使用“pkexec”以其他使用者身份執行 GUI 應用程序

  • December 18, 2017

我在以下位置創建了以下策略文件/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. 創建一個 shell 腳本為 /usr/local/bin/foo.sh:
#!/bin/sh
pkexec "/usr/sbin/foo" "$@"
  1. 賦予上述腳本可執行權限:
chmod +x /usr/local/bin/foo.sh
  1. 如果您使用的是 .desktop 文件,請將 Exec 值更改為:
Exec=/usr/local/bin/foo.sh
  1. 確保 /usr/share/polkit-1/actions/ 中的策略文件具有以下條目以允許 GUI:
<annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>

就是這樣!

引用自:https://unix.stackexchange.com/questions/411251