comando pkexec in un file .desktop


13

Ho creato un file .desktop per Flashtool di Androxyde (utility per i dispositivi Sony Xperia che devo aprire con un file eseguibile nella sua cartella) che richiede i privilegi di root per utilizzare le utilità di avvio rapido. Ero abituato a farlo funzionare gksu, ma sono su Ubuntu 15.04 e gksu è ormai vecchio.

Ho provato a modificare la execlinea da

Exec=gksu /home/natasha/FlashTool/FlashTool
per
Exec=pkexec /home/natasha/FlashTool/FlashTool
Quindi, ho letto che pkexec non consente di eseguire applicazioni X11 e quindi eseguo l'override in questo modo:

inserisci qui la descrizione dell'immagine

Link all'immagine completa su Imgur.com

Il problema ora è: mi chiede la password ma la GUI di Flashtool non si avvia. MA se eseguo quel comando nel terminale, il programma si avvia senza problemi. Cosa posso fare?

inserisci qui la descrizione dell'immagine

Link all'immagine completa su Imgur.com


pkexec ha bisogno di un file delle politiche per funzionare, dovresti crearne uno, alcune informazioni qui - freedesktop.org/software/polkit/docs/0.105/pkexec.1.html o usare quelli esistenti per vedere come fatto, - / usr / share / polkit-1 / azioni. Tieni presente che a volte i criteri sono migliori quando parte di un'installazione di un'app (ad es. Funziona
doug

Risposte:


9

Crea un nuovo file in /usr/share/polkit-1/actions/

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

e aggiungi le righe seguenti:

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

Quindi crea un nuovo file /home/natasha/FlashTool/

nano /home/natasha/FlashTool/flashtool-pkexec

e aggiungi le righe seguenti:

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

Usa la riga qui sotto per Execnel tuo desktopfile:

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

Testato sul mio sistema Ubuntu 15.04 GNOME con i seguenti file:


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

Funziona! L'unica cosa che ho modificato è sul Execcomando: ho scritto Exec=pkexec /home/natasha/FlashTool/FlashToolcome prima, perché flashtool-pkexec non funziona sul file .desktop. Grazie al file delle politiche funziona come un fascino. Grazie!
nplezka,

@nplezka Per eseguire uno script di shell da un file .desktop, anche con #!, è necessario aggiungere il prefisso al Execcomando /bin/sh.
TheSola10

0

sudo -Hè sufficiente avviare un'applicazione grafica che impedisce le modifiche ai file di configurazione dell'utente ~/, poiché imposta la home directory dell'ambiente in esecuzione sulla home directory di root:

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

In un desktopfile?
AB,

@AB Sì, perché no?
kos,

@AB È lo stesso che eseguirlo in qualsiasi shistanza (probabilmente con alcune variabili d'ambiente impostate ad hoc, ma qui non è un problema).
kos,

Non credo che chiederà la tua password e avvierà l'applicazione con sudose hai una Terminal=falselinea nel programma di .desktopavvio (come OP ha qui). Comunque molto probabilmente funzionerebbe con Terminal=trueinvece.
pomsky,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.