次のポリシーファイルを作成しました。/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) シェルスクリプト /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>
それだけです!