pkexecを使用してGUIアプリケーションをルートとして実行するにはどうすればよいですか?


14

Gnome3 Flashback Desktop Environmentに付属のTrisquel GNU / Linux-Libreを使用しています。

私はsudo&によってGUIアプリケーションをルートとして実行できることgksudoを知っていますが、どうすればルートとしてGUIアプリケーションを実行できますpkexecか?

私が実行しようとするとgedit(など他のアプリケーション:nautilus)でpkexec gedit、それは認証用のパスワードを求めるプロンプトが表示されます-

スクリーンショット

パスワードを入力した後、エラーで終了します-

$ pkexec gedit
error: XDG_RUNTIME_DIR not set in the environment.

(gedit:6135): Gtk-WARNING **: cannot open display:

それで、ディスプレイ環境に何か問題があるようです。

私も試しましたDISPLAY=:0 pkexec geditが、動作しません。


次の情報は以下から入手できますman pkexec

PROGRAMが実行する環境は、LD_LIBRARY_PATHまたは同様のメカニズムを介したコードの挿入を回避するために、最小限の既知の安全な環境に設定されます。さらに、PKEXEC_UID環境変数は、pkexecを呼び出すプロセスのユーザーIDに設定されます。その結果、$ DISPLAYおよび$ XAUTHORITY環境変数が設定されていないため、pkexecはX11アプリケーションを別のユーザーとして実行することを許可しません。アクションのorg.freedesktop.policykit.exec.allow_guiアノテーションが空でない値に設定されている場合、これらの2つの変数は保持されます。ただし、これはお勧めできません。レガシープログラムにのみ使用してください。

今、私はこれを達成するために何をすべきかわかりません。

したがって、を使用してrootとしてGUIアプリケーションを実行する方法を見つけるのに役立ちますpkexec。またはこれは可能ですか?


ところで、gparted-pkexecうまく機能するコマンドに触発されました。どのようにgparted使いますかpkexec


(後で発見)関連:pkexecの設定方法は?
パンディア

私のために働いたこのリンクをチェックしてください。
TinyRickHole

回答:


10

これは、カスタムアクションをpolicykitに追加することで実行できます。rootでgeditを実行したい場合は、たとえばpkexec新しいファイルを作成する必要があります/usr/share/polkit-1/actions/org.freedesktop.policykit.gedit.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>
    <action id="org.freedesktop.policykit.pkexec.gedit">
    <description>Run gedit program</description>
    <message>Authentication is required to run the gedit</message>
    <icon_name>accessories-text-editor</icon_name>
    <defaults>
        <allow_any>auth_admin</allow_any>
        <allow_inactive>auth_admin</allow_inactive>
        <allow_active>auth_admin</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/gedit</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">true</annotate>
    </action>
</policyconfig>

最終的にpkexec gedit期待どおりに動作するはずです。


次のような例で説明されているマンページまたはリファレンスマニュアルをご覧ください。

$ man pkexec | grep -i ^Example -A 60
EXAMPLE
       To specify what kind of authorization is needed to execute the program /usr/bin/pk-example-frobnicate as
       another user, simply write an action definition file like this

           <?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>Examples for the PolicyKit Project</vendor>
             <vendor_url>http://hal.freedesktop.org/docs/PolicyKit/</vendor_url>

             <action id="org.freedesktop.policykit.example.pkexec.run-frobnicate">
               <description>Run the PolicyKit example program Frobnicate</description>
               <description xml:lang="da">Kør PolicyKit eksemplet Frobnicate</description>
               <message>Authentication is required to run the PolicyKit example program Frobnicate (user=$(user), program=$(program), command_line=$(command_line))</message>
               <message xml:lang="da">Autorisering er påkrævet for at afvikle PolicyKit eksemplet Frobnicate (user=$(user), program=$(program), command_line=$(command_line))</message>
               <icon_name>audio-x-generic</icon_name>
               <defaults>
                 <allow_any>no</allow_any>
                 <allow_inactive>no</allow_inactive>
                 <allow_active>auth_self_keep</allow_active>
               </defaults>
               <annotate key="org.freedesktop.policykit.exec.path">/usr/bin/pk-example-frobnicate</annotate>
             </action>

           </policyconfig>

       and drop it in the /usr/share/polkit-1/actions directory under a suitable name (e.g. matching the namespace of
       the action). Note that in addition to specifying the program, the authentication message, description, icon
       and defaults can be specified. Note that occurences of the strings $(user), $(program) and $(command_line) in
       the message will be replaced with respectively the user (of the form "Real Name (username)" or just "username"
       if there is no real name for the username), the binary to execute (a fully-qualified path, e.g.
       "/usr/bin/pk-example-frobnicate") and the command-line, e.g. "pk-example-frobnicate foo bar". For example, for
       the action defined above, the following authentication dialog will be shown:

           [IMAGE][2]

               +----------------------------------------------------------+
               |                     Authenticate                     [X] |
               +----------------------------------------------------------+
               |                                                          |
               |  [Icon]  Authentication is required to run the PolicyKit |
               |          example program Frobnicate                      |
               |                                                          |
               |          An application is attempting to perform an      |
               |          action that requires privileges. Authentication |
               |          is required to perform this action.             |
               |                                                          |
               |          Password: [__________________________________]  |
               |                                                          |
               | [V] Details:                                             |
               |  Command: /usr/bin/pk-example-frobnicate                 |
               |  Run As:  Super User (root)                              |
               |  Action:  org.fd.pk.example.pkexec.run-frobnicate        |
               |  Vendor:  Examples for the PolicyKit Project             |
               |                                                          |
               |                                  [Cancel] [Authenticate] |
               +----------------------------------------------------------+

はい、ついにマンページ(man pkexec)でも見つけました!
パンディア


@Pandya、本当のエラーは「死んだ親にサービスを提供することを拒否する」です、私がそれをグーグルで検索したとき、いくつかのバグレポートがあります。回避策として、次のようなものを含む実行可能ファイルを/ usr / local / binに作成できます。/ bin / sh "pkexec" "nautilus"そしてF7で実行します。うまくいくと思う。
タリエジン

OK。F7で問題なく動作する実行可能ファイルを作成してみました。
パンディア

2
そのようなツールが/ etcの外に、そして/ usr / local / shareではなく/ usr / shareの下に最悪の何かを設定することを余儀なくされたことに本当に失望しています。
ニールス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.