Pourquoi ça ne marche pas?
Par défaut, pkexecne vous permet pas d'exécuter des applications graphiques (X11). Depuis la page de manuel:
The environment that PROGRAM will run it, will be set to a minimal
known and safe environment in order to avoid injecting code through
LD_LIBRARY_PATH or similar mechanisms. In addition the PKEXEC_UID
environment variable is set to the user id of the process invoking
pkexec.
As a result, pkexec will not allow you to run X11 applications
as another user since the $DISPLAY and $XAUTHORITY environment
variables are not set.
These two variables will be retained if the
org.freedesktop.policykit.exec.allow_gui annotation on an action is set
to a nonempty value; this is discouraged, though, and should only be
used for legacy programs.
Comme indiqué dans la page de manuel, vous pouvez le faire fonctionner même si je ne sais vraiment pas si cela est dangereux ou recommandé .
Pour activer gedit par exemple, vous pouvez créer /usr/share/polkit-1/actions/com.ubuntu.gedit.policyavec 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.0/policyconfig.dtd">
<policyconfig>
<vendor>gedit</vendor>
<vendor_url>gedit</vendor_url>
<icon_name>accessories-text-editor</icon_name>
<action id="org.freedesktop.policykit.pkexec.gedit">
<description>Run "gedit"</description>
<message>Authentication is required to run Text Editor</message>
<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>
Ensuite, pkexec geditdevrait fonctionner comme prévu:

Comme vous pouvez le deviner, cela ne fera que geditfonctionner. En théorie, si vous avez ajouté allow_guià "org.freedesktop.policykit.exec" (l'action par défaut), cela devrait fonctionner pour toutes les applications, mais dans mes tests, j'ai obtenu le même résultat que le vôtre.
Pourquoi pkexec est-il préféré?
Ici vous pouvez trouver une discussion sur les points forts de pkexec.