web-dev-qa-db-fra.com

Commande pkexec dans un fichier .desktop

J'ai créé un fichier .desktop pour Flashtool d'Androxyde (utilitaire pour les périphériques Sony Xperia que je dois ouvrir avec un fichier exécutable dans son dossier) qui nécessite des privilèges root pour pouvoir utiliser les utilitaires fastboot. J'avais l'habitude de le faire fonctionner avec gksu, mais je suis sur Ubuntu 15.04 et gksu est maintenant vieux.

J'ai essayé de modifier la ligne exec de

Exec=gksu /home/natasha/FlashTool/FlashTool
Exec=pkexec /home/natasha/FlashTool/FlashTool

enter image description here

Lien vers l'image complète sur Imgur.com

Le problème est maintenant: il me demande le mot de passe mais l'interface graphique de Flashtool ne démarre pas. MAIS si j'exécute cette commande en terminal, le programme démarre sans problèmes. Que puis-je faire?

enter image description here

Lien vers l'image complète sur Imgur.com

11
nplezka

Créer un nouveau fichier dans /usr/share/polkit-1/actions/

Sudo nano /usr/share/polkit-1/actions/FlashTool.policy

et ajoutez les lignes ci-dessous:

<?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-FlashTool">
    <description>Run FlashTool</description>
    <message>Authentication is required to run FlashTool</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">/home/natasha/FlashTool/FlashTool</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
  </action>

</policyconfig>

Puis créez un nouveau fichier /home/natasha/FlashTool/

nano /home/natasha/FlashTool/flashtool-pkexec

et ajoutez les lignes ci-dessous:

#!/bin/sh
pkexec "/home/natasha/FlashTool/FlashTool" "$@"

Utilisez la ligne ci-dessous pour Exec dans votre fichier desktop:

Exec=/home/natasha/FlashTool/flashtool-pkexec

Testé sur mon système Ubuntu 15.04 GNOME avec les fichiers suivants:


$ cat /usr/share/applications/gedit.root.desktop 
[Desktop Entry]
Name=Gedit as root
GenericName=Text Editor
X-GNOME-FullName=
Comment=
Exec=gedit-pkexec
Icon=gedit
Terminal=false
Type=Application
Categories=GNOME;System;Filesystem;Settings;
StartupNotify=true
X-Ubuntu-Gettext-Domain=gedit

$ cat /usr/share/polkit-1/actions/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.run-FlashTool">
    <description>Run FlashTool</description>
    <message>Authentication is required to run FlashTool</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">/usr/bin/gedit</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
  </action>

</policyconfig>

$ cat /usr/bin/gedit-pkexec 
#!/bin/sh
pkexec "gedit" "$@"
8
A.B.

Sudo -H suffit pour démarrer une application graphique empêchant toute modification des fichiers de configuration de l'utilisateur dans ~/, car le répertoire de base de l'environnement en cours est défini sur le répertoire de base de la racine:

Exec=Sudo -H /home/natasha/FlashTool/FlashTool
0
kos