.desktop文件中的pkexec命令


13

我为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应用程序的信息,因此我以这种方式进行覆盖:

在此处输入图片说明

链接到Imgur.com上的完整图像

现在的问题是:它询问我密码,但Flashtool的GUI无法启动。但是,如果我在终端中执行该命令,程序将启动而不会出现问题。我能做什么?

在此处输入图片说明

链接到Imgur.com上的完整图像


pkexec需要一个策略文件的工作,你需要创建一个,这里的一些信息- freedesktop.org/software/polkit/docs/0.105/pkexec.1.html或现有的使用看怎么做, -在/ usr /股/ polkit-1 / actions。请注意,在安装应用程序的一部分时,有时策略会更好(例如,可以正常工作),如果出现“无法打开显示”错误,则存在变通办法,例如ubuntuforums.org/…–
doug

Answers:


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

Execdesktop文件中使用以下行:

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文件运行shell脚本#!,也需要在Exec命令前加上/bin/sh
TheSola10 '17

0

sudo -H足以启动一个图形应用程序,防止更改中的用户配置文件~/,因为它将运行环境的主目录设置为root的主目录:

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

desktop文件中?
AB

@AB是的,为什么不呢?
kos 2015年

@AB与在任何sh实例中运行它相同(可能带有一些临时设置的环境变量,但这不是问题)。
kos 2015年

我认为它不会询问您的密码并启动您的应用程序(sudo如果您Terminal=false.desktop启动器中有行)(如OP此处所示)。但是,很可能它将Terminal=true代替它。
pomsky '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.