pkexec comando em um arquivo .desktop

6

Eu criei um arquivo .desktop para o Flashtool do Androxyde (utilitário para dispositivos Sony Xperia que tenho que abrir com um arquivo executável em sua pasta) que requer privilégios de root para usar utilitários de fastboot. Eu costumava fazer isso funcionar com gksu , mas eu estou no Ubuntu 15.04 e o gksu agora está velho.

Eu tentei modificar a linha exec de

Exec=gksu /home/natasha/FlashTool/FlashTool
to
Exec=pkexec /home/natasha/FlashTool/FlashTool
Então, eu li sobre o pkexec não permite executar aplicativos X11 e, portanto, eu substituo desta forma:

Link para a imagem completa no Imgur.com

O problema agora é: ele me pergunta a senha, mas a GUI do Flashtool não inicia. MAS se eu executar esse comando no terminal, o programa será iniciado sem problemas. O que eu posso fazer?

Link para a imagem completa no Imgur.com

    
por nplezka 27.06.2015 / 14:00

2 respostas

5

Crie um novo arquivo em /usr/share/polkit-1/actions/

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

e adicione as linhas abaixo:

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

Em seguida, crie um novo arquivo /home/natasha/FlashTool/

nano /home/natasha/FlashTool/flashtool-pkexec

e adicione as linhas abaixo:

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

Use a linha abaixo para Exec no seu arquivo desktop :

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

Testado no meu sistema Ubuntu 15.04 GNOME com os seguintes arquivos:

$ 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" "$@"
    
por A.B. 27.06.2015 / 15:40
0

sudo -H é suficiente para iniciar um aplicativo gráfico impedindo alterações nos arquivos de configuração do usuário em ~/ , pois define o diretório inicial do ambiente em execução como o diretório inicial do root:

Exec=sudo -H /home/natasha/FlashTool/FlashTool
    
por kos 27.06.2015 / 14:55