Pythonスクリプトまたは.desktopファイルでpkexecを使用できますか?


8

次の質問から

gksuは長期的にサポートされなくなり、デフォルトでは13.04以降からインストールされないことがわかります。代わりに、非グラフィカルアプリケーションでは問題なく機能するが、GUIでのアプリケーションでは機能しないpkexecを使用する必要があります。

pkexec gedit

.desktopファイルのgksuを置き換える場合

EXEC=pkexec /usr/bin/gedit

または、Pythonスクリプトを実行してroot権限でグラフィカルアプリケーションを実行すると、次のエラーが発生します。

>>>subprocess.Popen(['pkexec','gedit'])
** (gedit:3203): WARNING **: Could not open X display

認証ダイアログをサポートするためにスクリプトまたは.desktopファイルを書き直して、gksuに依存させるべきではない場合、アプリケーションをrootとして実行するにはどうすればよいですか?


sudo私が見た更新の1つは、gksuのサポートをsudoに統合することについて何か言っていました。もう1つ注目すべき点はsudo -A、manページによれば、(おそらく)グラフィカルなログインが起動されることです。
j0h 2013年

回答:


6

まず、で.policyアクションファイルを作成します/usr/share/polkit-1/actions/com.ubuntu.pkexec.gparted.policyまたはなど、「ベンダー階層」の方法でアクションファイルに名前を付けるのが一般的です。org.debian.apt.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.run-[Short Program Name]">
    <description>Run [Full Program Name]</description>
    <message>Authentication is required to run [Full Program Name]</message>
    <defaults>
      <allow_any>no</allow_any>
      <allow_inactive>no</allow_inactive>
      <allow_active>auth_admin_keep</allow_active>
    </defaults>
    <annotate key="org.freedesktop.policykit.exec.path">[Full Program Path]</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
  </action>

</policyconfig>

交換[Short/Full Program Name/Path]例えば、適切な値でgeditgedit Text Editorそして/usr/bin/gedit<action id>値は、選択したファイル名と一致する必要はありません(1つのファイルに複数のアクションを含めることができます)が、通常、ファイル名はそのすべてのアクションのプレフィックスです。

ファイルを保存した後、特定のプログラムはXやGUIなどで実行されます。

別の修正のようです:/etc/pam.d/polkit-1に次の行を追加します:

セッションオプションのpam_xauth.so


1

ユーザースクリプトのさらに別の修正:スクリプト内の適切な環境変数を決定します。

これを行うには、次のようなスニペットを使用できます。

getXuser() {
        user=`pinky -fw | awk '{ if ($2 == ":'$displaynum'" || $(NF) == ":'$displaynum'" ) { print $1; exit; } }'`
        if [ x"$user" = x"" ]; then
                startx=`pgrep -n startx`
                if [ x"$startx" != x"" ]; then
                        user=`ps -o user --no-headers $startx`
                fi
        fi
        if [ x"$user" = x"" ]; then
               user=$(pinky -fw | awk '{ print $1; exit; }')
        fi
        if [ x"$user" != x"" ]; then
                userhome=`getent passwd $user | cut -d: -f6`
                export XAUTHORITY=$userhome/.Xauthority
        else
                export XAUTHORITY=""
        fi
        export XUSER=$user
}


for x in /tmp/.X11-unix/*; do
   displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
   getXuser;
      if [ x"$XAUTHORITY" != x"" ]; then
        export DISPLAY=":$displaynum"
      fi
done

(ACPI getXuser関数に基づく)

あなたが見つけた場合は.desktop、ファイルをまだあなたはあなたのラップ試みることができる機能していないpkexec commandlinesh、スニペット、例えば:

Exec=sh -c "pkexec --user root script_that_needs_root.sh"

最後の問題は既知のバグであり、明らかに:

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=690339

https://bugzilla.xfce.org/show_bug.cgi?id=9373

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=650038

https://bugzilla.gnome.org/show_bug.cgi?id=686059

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.