Команда pkexec в файле .desktop

13

Я сделал файл .desktop для Flashtool от Androxyde (утилита для устройств Sony Xperia, которую мне нужно открыть с исполняемым файлом в папке), для которой требуются права суперпользователя для использования утилит fastboot. Раньше я заставлял его работать gksu, но я на Ubuntu 15.04 и gksu устарел.

Я пытался изменить execстроку из

Exec=gksu /home/natasha/FlashTool/FlashTool
в
Exec=pkexec /home/natasha/FlashTool/FlashTool
Затем я прочитал о том, что pkexec не позволяет запускать приложения X11, и поэтому я переопределяю это следующим образом:

введите описание изображения здесь

Ссылка на полное изображение на Imgur.com

Теперь проблема в том, что он запрашивает пароль, но графический интерфейс Flashtool не запускается. НО, если я выполню эту команду в терминале, программа запустится без проблем. Что я могу сделать?

введите описание изображения здесь

Ссылка на полное изображение на Imgur.com

nplezka
источник
Для работы pkexec нужен файл политики, вам нужно его создать, некоторая информация здесь - freedesktop.org/software/polkit/docs/0.105/pkexec.1.html или использовать существующие, чтобы увидеть, как это делается, - / usr / share / polkit-1 / действия. Обратите внимание, что политики иногда лучше выполнять при установке приложения (т. Е.
doug

Ответы:

9

Создать новый файл в /usr/share/polkit-1/actions/

sudo nano /usr/share/polkit-1/actions/FlashTool.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">/home/natasha/FlashTool/FlashTool</annotate>
    <annotate key="org.freedesktop.policykit.exec.allow_gui">TRUE</annotate>
  </action>

</policyconfig>

Затем создайте новый файл /home/natasha/FlashTool/

nano /home/natasha/FlashTool/flashtool-pkexec

и добавьте строки ниже:

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

Используйте строку ниже для Execв вашем desktopфайле:

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

Протестировано на моей системе Ubuntu 15.04 GNOME со следующими файлами:


$ 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
источник
Оно работает! Единственное, что я изменил, - это Execкоманда: я писал Exec=pkexec /home/natasha/FlashTool/FlashToolкак раньше, потому что flashtool-pkexec не работает с файлом .desktop. Благодаря файлу политики он работает как шарм. Спасибо!
nplezka
@nplezka Чтобы запустить сценарий оболочки из файла .desktop, даже с #!, вам нужно добавить Execкоманду к префиксу /bin/sh.
TheSola10
0

sudo -Hдостаточно запустить графическое приложение, предотвращающее изменения в файлах конфигурации пользователя ~/, поскольку оно устанавливает домашний каталог работающей среды в домашний каталог root:

Exec=sudo -H /home/natasha/FlashTool/FlashTool
кос
источник
В desktopфайле?
AB
@AB Да, а почему бы и нет?
Кос
@AB Это то же самое, что запускать его в любом другом shэкземпляре (возможно, с некоторыми переменными окружения, установленными ad hoc, но здесь это не проблема).
Кос
Я не думаю, что он спросит ваш пароль и запустит приложение, sudoесли у вас есть Terminal=falseстрока в .desktopпанели запуска (как у OP здесь). Однако, скорее всего, он будет работать Terminal=trueвместо.
Помский