Команда 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 не запускается. НО, если я выполню эту команду в терминале, программа запустится без проблем. Что я могу сделать?
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
.