Befehl pkexec in einer .desktop-Datei

13

Ich habe eine .desktop-Datei für Androxyde's Flashtool (Dienstprogramm für Sony Xperia-Geräte, das ich mit einer ausführbaren Datei in seinem Ordner öffnen muss) erstellt, für die Root-Berechtigungen für die Verwendung von Fastboot-Dienstprogrammen erforderlich sind. Früher habe ich damit gearbeitet gksu, aber ich bin auf Ubuntu 15.04 und gksu ist jetzt alt.

Ich habe versucht, die execZeile von zu ändern

Exec=gksu /home/natasha/FlashTool/FlashTool
zu
Exec=pkexec /home/natasha/FlashTool/FlashTool
Dann habe ich gelesen, dass pkexec keine X11-Anwendungen zulässt und ich überschreibe dies folgendermaßen:

Bildbeschreibung hier eingeben

Link zum Vollbild auf Imgur.com

Das Problem ist jetzt: Es fragt mich nach dem Passwort, aber die Benutzeroberfläche des Flashtools startet nicht. ABER wenn ich diesen Befehl im Terminal ausführe, startet das Programm ohne Probleme. Was kann ich tun?

Bildbeschreibung hier eingeben

Link zum Vollbild auf Imgur.com

nplezka
quelle
pkexec benötigt eine Richtliniendatei, Sie müssten eine erstellen, einige Informationen hier - freedesktop.org/software/polkit/docs/0.105/pkexec.1.html oder vorhandene verwenden, um zu sehen, wie es gemacht wird, - / usr / share / polkit-1 / aktionen. Beachten Sie, dass Richtlinien manchmal besser geeignet sind, wenn sie Teil einer App-Installation sind (dh ohne Probleme
funktionieren

Antworten:

9

Erstellen Sie eine neue Datei in /usr/share/polkit-1/actions/

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

und füge die folgenden Zeilen hinzu:

<?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>

Dann erstelle eine neue Datei /home/natasha/FlashTool/

nano /home/natasha/FlashTool/flashtool-pkexec

und füge die folgenden Zeilen hinzu:

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

Verwenden Sie Execin Ihrer desktopDatei die folgende Zeile für :

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

Getestet auf meinem System Ubuntu 15.04 GNOME mit den folgenden Dateien:


$ 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" "$@"
AB
quelle
Es klappt! Das einzige, was ich geändert habe, ist der ExecBefehl: Ich habe Exec=pkexec /home/natasha/FlashTool/FlashToolwie zuvor geschrieben, da flashtool-pkexec nicht mit der .desktop-Datei funktioniert. Dank der Richtliniendatei funktioniert es wie ein Zauber. Vielen Dank!
Nplezka
@nplezka Um ein Shell-Skript auch mit einer .desktop-Datei auszuführen #!, müssen Sie dem ExecBefehl das Präfix voranstellen /bin/sh.
TheSola10
0

sudo -HDies reicht aus, um eine grafische Anwendung zu starten, die Änderungen an den Konfigurationsdateien des Benutzers verhindert ~/, da das Basisverzeichnis der ausgeführten Umgebung auf das Basisverzeichnis von root festgelegt wird:

Exec=sudo -H /home/natasha/FlashTool/FlashTool
kos
quelle
In einer desktopDatei?
AB
@AB Ja, warum nicht?
Kos
@AB Es ist dasselbe wie das Ausführen in einer beliebigen shInstanz (wahrscheinlich mit einigen Umgebungsvariablen, die ad hoc festgelegt wurden, aber hier ist kein Problem).
Kos
Ich glaube nicht, dass es nach Ihrem Passwort fragen und die Anwendung mit starten wird, sudowenn Sie eine Terminal=falseZeile im .desktopLauncher haben (wie OP hier). Jedoch würde es höchstwahrscheinlich mit Terminal=truestattdessen funktionieren .
Pomsky