Parmi les questions suivantes
nous voyons que gksu ne sera plus supporté à long terme et qu'il ne sera pas installé par défaut à partir de> = 13.04. Au lieu de cela, nous devrions utiliser pkexec qui fait bien son travail pour les applications non graphiques mais pas pour les applications sur l'interface graphique:
pkexec gedit
lors du remplacement de gksu dans un fichier .desktop
EXEC=pkexec /usr/bin/gedit
ou lorsque j'exécute un script python pour exécuter une application graphique avec des autorisations root, le message d'erreur suivant s'affiche:
>>>subprocess.Popen(['pkexec','gedit'])
** (gedit:3203): WARNING **: Could not open X display
Comment devrais-je réécrire mes scripts ou mes fichiers .desktop pour prendre en charge une boîte de dialogue d'authentification et exécuter une application en tant que root si je ne devais pas la faire dépendre de gksu?
Commencez par créer un fichier d'action .policy
dans /usr/share/polkit-1/actions/
. Il est classique de nommer les fichiers d'action de manière "hiérarchique par le fournisseur", tels que com.ubuntu.pkexec.gparted.policy
ou org.debian.apt.policy
Puis collez le contenu suivant:
<?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>
Remplacez [Short/Full Program Name/Path]
par les valeurs appropriées, par exemple gedit
, gedit Text Editor
et /usr/bin/gedit
. <action id>
la valeur n'a pas besoin de correspondre au nom de fichier choisi (et un seul fichier peut contenir plusieurs actions), mais classiquement, nom de fichier est le préfixe de toutes ses actions.
Après avoir enregistré le fichier, le programme spécifique s’exécutait avec X, une interface graphique, etc.
Une autre solution semble être: Ajoutez la ligne suivante dans /etc/pam.d/polkit-1:
session optionnelle pam_xauth.so
Encore un autre correctif pour les scripts utilisateur: Déterminez les variables d’environnement appropriées dans votre script.
Pour cela, vous pouvez utiliser un extrait comme le suivant:
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
(basé sur la fonction ACPI getXuser
)
Si vous constatez que votre fichier .desktop
ne fonctionne toujours pas, vous pouvez essayer d’envelopper votre pkexec commandline
dans un extrait sh
, par exemple:
Exec=sh -c "pkexec --user root script_that_needs_root.sh"
Le dernier problème est un bug connu, apparemment:
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=690339
https://bugzilla.xfce.org/show_bug.cgi?id=937