我为 Androxyde 的 Flashtool(适用于 Sony Xperia 设备的实用程序,我必须使用其文件夹中的可执行文件打开)创建了一个 .desktop 文件,该文件需要 root 权限才能使用 fastboot 实用程序。我曾经让它与 一起工作gksu
,但我使用的是 Ubuntu 15.04,而 gksu 现在已经过时了。
exec
我尝试修改
Exec=gksu /home/natasha/FlashTool/FlashTool
到Exec=pkexec /home/natasha/FlashTool/FlashTool
然后,我读到有关 pkexec 不允许运行 X11 应用程序的信息,因此我以这种方式覆盖:
现在的问题是:它要求我输入密码,但 Flashtool 的 GUI 没有启动。但如果我在终端中执行该命令,程序就会顺利启动。我该怎么办?
答案1
在中创建新文件/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" "$@"
答案2
您也可以更改
Exec=APP_COMMAND
到
Exec=sh -c "pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY APP_COMMAND"
这样,您将被询问密码,程序将照常启动。
(看如何从 Unity Launcher 以 root 身份启动应用程序?了解更多信息和推理。TL;DR:sh -c
在 shell 中启动它,后续代码在其中工作,正如 op 所确认的那样。pkexec
然后以 root 身份启动“APP_COMMAND”,但需要环境变量才能真正启动 GUI 应用程序。)
答案3
sudo -H
足以启动图形应用程序以防止更改用户的配置文件~/
,因为它将运行环境的主目录设置为 root 的主目录:
Exec=sudo -H /home/natasha/FlashTool/FlashTool
答案4
桌面文件的内容(/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
。