次の質問から
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
Gksuに依存しないようにするには、スクリプトまたは.desktopファイルを書き換えて認証ダイアログをサポートし、rootとしてアプリケーションを実行する必要がありますか?
まず、.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]
を適切な値、たとえばgedit
、gedit Text Editor
、および/usr/bin/gedit
に置き換えます。 <action id>
の値は、選択したファイル名と一致する必要はありません(1つのファイルに複数のアクションを含めることができます)が、従来のファイル名はすべてのアクションのプレフィックスです。
ファイルを保存すると、特定のプログラムがXやGUIなどで実行されます。
別の修正は次のようです:/etc/pam.d/polkit-1に次の行を追加します。
セッションオプションpam_xauth.so
ユーザースクリプトのさらに別の修正:スクリプト内の適切な環境変数を決定します。
これを行うには、次のようなスニペットを使用できます。
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 commandline
をsh
スニペットでラップしてみてください。例:
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=937