команда pkexec у файлі .desktop


13

Я створив файл .desktop для Flashtool Androxyde (утиліта для пристроїв Sony Xperia, яку я маю відкрити з виконуваним файлом у своїй папці), який вимагає привілеїв root для використання утиліт 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


pkexec потребує файлу політики для роботи, вам потрібно створити його, деяку інформацію тут - freedesktop.org/software/polkit/docs/0.105/pkexec.1.html або використовувати існуючі, щоб побачити, як це зроблено, - / usr / share / polkit-1 / дії. Зверніть увагу , що політика іноді буває краще , коли частина установки додатка, (тобто працювати без проблем.), Якщо ви отримаєте «Не вдається відкрити дисплей» помилку , то існує обхідні шляхи , такі як ubuntuforums.org / ...
Дуги

Відповіді:


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

Це працює! Єдине, що я змінив - це 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 Так, чому б і ні?
kos

@AB Це те саме, що запускати його в будь-якому shекземплярі (можливо, з деякими змінними середовища встановлені ad hoc, але тут не проблема).
kos

Я не думаю, що буде потрібно просити ваш пароль і запускати програму, sudoякщо у вас є Terminal=falseрядок у .desktopзапуску (як тут є ОП). Однак, швидше за все, це працювало б Terminal=trueзамість цього.
pomsky
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.