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

Я сделал файл.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

4 ответа

Решение

Создать новый файл в /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" "$@"

Вы также можете изменить

      Exec=APP_COMMAND

к

      Exec=sh -c "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY APP_COMMAND"

Таким образом, вас спросят о пароле, и программа запустится как обычно.

(См. Как запустить приложение от имени пользователя root из Unity Launcher? для получения дополнительной информации и рассуждений. TL; DR: sh -cзапускает его в оболочке, где сработал последующий код, как подтвердил оператор. pkexecзатем запускает «APP_COMMAND» от имени пользователя root, но ему нужны переменные среды, чтобы действительно иметь возможность запускать приложение с графическим интерфейсом.)

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

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

Содержимое файла рабочего стола (/usr/share/applications/Flashtool.desktopили~/.local/share/applications/Flashtool.desktop).

      [Desktop Entry]
Name=Flashtool
GenericName=Flashtool
Comment=Tool for Xperia Devices
Type=Application
Categories=Qt;FileTransfer;Chat
Terminal=false
Icon=/usr/share/icons/Numix-Circle-Light/48x48/apps/nitrotasks.svg
Exec=/home/natasha/FlashTool/FlashTool
Actions=new-root-window

[Desktop Action new-root-window]
Name=New Root Window
Exec=sh -c "pkexec --disable-internal-agent env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY /home/natasha/FlashTool/FlashTool"
Terminal=true

Щелкните правой кнопкой мыши значок на рабочем столе и выберитеNew Root Window.

Другие вопросы по тегам