web-dev-qa-db-ja.com

`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またはconsolehelperのような他の方法を使用した認証でGUIアプリケーションを実行する方法はありますか?

前もって感謝します!

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>

それでおしまい!

1