Commande pkexec dans un fichier .desktop


13

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

J'ai essayé de modifier la execligne de

Exec=gksu /home/natasha/FlashTool/FlashTool
à
Exec=pkexec /home/natasha/FlashTool/FlashTool
Ensuite, j'ai lu que pkexec ne permet pas d'exécuter des applications X11 et je remplace donc de cette manière:

entrez la description de l'image ici

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 dans le terminal, le programme démarre sans problème. Que puis-je faire?

entrez la description de l'image ici

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


pkexec a besoin d'un fichier de stratégie pour fonctionner, vous devez en créer un, quelques informations ici - freedesktop.org/software/polkit/docs/0.105/pkexec.1.html ou utiliser les fichiers existants pour voir comment faire, - / usr / share / polkit-1 / actions. Notez que les politiques sont parfois mieux loties lorsqu'elles font partie d'une installation d'application, (c'est-à-dire qu'elles fonctionnent sans problème), si vous obtenez une erreur «Impossible d'ouvrir l'affichage», il existe des solutions de contournement telles que ubuntuforums.org/…
doug

Réponses:


9

Créez 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>

Créez ensuite 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 Execdans votre desktopfichier:

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" "$@"

Ça marche! La seule chose que j'ai modifiée est sur la Execcommande: j'ai écrit Exec=pkexec /home/natasha/FlashTool/FlashToolcomme avant, car flashtool-pkexec ne fonctionne pas sur le fichier .desktop. Grâce au fichier de politique, cela fonctionne comme un charme. Je vous remercie!
nplezka

@nplezka Pour exécuter un script shell à partir d'un fichier .desktop, même avec #!, vous devez préfixer la Execcommande avec /bin/sh.
TheSola10

0

sudo -Hest suffisant pour démarrer une application graphique empêchant les modifications des fichiers de configuration de l'utilisateur ~/, car il définit le répertoire de base de l'environnement en cours d'exécution sur le répertoire de base de root:

Exec=sudo -H /home/natasha/FlashTool/FlashTool

Dans un desktopdossier?
AB

@AB Oui, pourquoi pas?
kos

@AB C'est la même chose que de l'exécuter dans n'importe quelle shinstance (probablement avec certaines variables d'environnement définies ad hoc, mais ce n'est pas un problème).
kos

Je ne pense pas que ça va demander votre mot de passe et lancer l'application avec sudosi vous avez une Terminal=falseligne dans le .desktoplanceur (comme OP l'a ici). Cependant, cela fonctionnerait probablement avec Terminal=true.
pomsky
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.