comando pkexec en un archivo .desktop

13

Hice un archivo .desktop para Flashtool de Androxyde (utilidad para dispositivos Sony Xperia que tengo que abrir con un archivo ejecutable en su carpeta) que requiere privilegios de root para usar las utilidades de arranque rápido. Solía ​​hacerlo funcionar gksu, pero estoy en Ubuntu 15.04 y gksu ahora es viejo.

Traté de modificar la execlínea de

Exec=gksu /home/natasha/FlashTool/FlashTool
a
Exec=pkexec /home/natasha/FlashTool/FlashTool
Luego, leí acerca de que pkexec no permite ejecutar aplicaciones X11 y anulo de esta manera:

ingrese la descripción de la imagen aquí

Enlace a la imagen completa en Imgur.com

El problema ahora es: me pide la contraseña pero la GUI de Flashtool no se inicia. PERO si ejecuto ese comando en la terminal, el programa se inicia sin problemas. ¿Que puedo hacer?

ingrese la descripción de la imagen aquí

Enlace a la imagen completa en Imgur.com

nplezka
fuente
pkexec necesita un archivo de política para funcionar, necesitaría crear uno, alguna información aquí: freedesktop.org/software/polkit/docs/0.105/pkexec.1.html o use los existentes para ver cómo se hace, - / usr / share / polkit-1 / actions. Tenga en cuenta que las políticas a veces son mejores cuando parte de la instalación de una aplicación (es decir, funciona sin problemas), si obtiene un error 'No se puede abrir la pantalla', entonces hay soluciones como ubuntuforums.org/…
doug

Respuestas:

9

Crea un nuevo archivo en /usr/share/polkit-1/actions/

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

y agregue las líneas a continuación:

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

Luego crea un nuevo archivo /home/natasha/FlashTool/

nano /home/natasha/FlashTool/flashtool-pkexec

y agregue las líneas a continuación:

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

Use la línea a continuación para Execen su desktoparchivo:

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

Probado en mi sistema Ubuntu 15.04 GNOME con los siguientes archivos:


$ 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
fuente
¡Funciona! Lo único que modifiqué es el Execcomando: escribí Exec=pkexec /home/natasha/FlashTool/FlashToolcomo antes, porque flashtool-pkexec no funciona en el archivo .desktop. Gracias al archivo de política funciona como un encanto. ¡Gracias!
nplezka
@nplezka Para ejecutar un script de shell desde un archivo .desktop, incluso con #!, debe anteponer el Execcomando con /bin/sh.
TheSola10
0

sudo -Hes suficiente para iniciar una aplicación gráfica que evita cambios en los archivos de configuración del usuario ~/, ya que establece el directorio de inicio del entorno en ejecución en el directorio de inicio de la raíz:

Exec=sudo -H /home/natasha/FlashTool/FlashTool
kos
fuente
En un desktoparchivo?
AB
@AB Sí, ¿por qué no?
kos
@AB Es lo mismo que ejecutarlo en cualquier shinstancia (probablemente con algunas variables de entorno configuradas ad hoc, pero esto no es un problema).
kos
No creo que le pida su contraseña y lance la aplicación sudosi tiene Terminal=falselínea en el .desktopiniciador (como OP aquí). Sin embargo, lo más probable es que funcione en su Terminal=truelugar.
pomsky