使用Gnome启动器的相对路径

时间:2010-09-28 08:40:49

标签: relative-path gnome launcher

我们正在开发一款需要在可移动设备(例如USB记忆棒)上运行的应用。在Linux上,我们使用Gnome启动器在设备的根目录上放置应用程序的快捷方式。但是,我们需要使用可执行文件和图标的相对路径,因为我们事先并不知道设备将在哪里安装。在.desktop文件中,我有类似的内容:

Exec的= .. / MyApp的/ myexecutable
图标= .. / MyApp的/ myicon.png

找不到可执行文件或图标。我在.desktop文件(http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html#icon_lookup)中阅读了关于图标查找的规范,但它没有启发我。

有没有办法让发射器使用相对路径?如果没有,是否有另一种方法来实现我想要的(即带有图标和可执行文件的快捷方式,使用相对路径指定)?

2 个答案:

答案 0 :(得分:3)

不支持相对路径*。

一种解决方案是安装一个安装程序。此脚本根据运行脚本的位置更新桌面文件。使脚本可执行,用户可以单击它进行安装。该脚本要求桌面文件可写。

这是在考虑Linux的情况下完成的。该文件名为 autorun.sh ;但这只是一种惯例,它通常不会自动运行。如果您将此部署在Linux以外的其他设备上,则将该文件命名为其他内容( autorun.linux ),或根据平台调整它以执行不同的操作。

#! /bin/sh

####  Fixup $APPNAME.desktop.
APPNAME=xvscatter
ICONNAME=xv_logo.png

cd $(dirname "$0")
APPDIR="$PWD/$APPNAME"
EXEC="$APPDIR/$APPNAME"
ICON="$APPDIR/$ICONNAME"

sed -i -e "s@^Icon=.*@Icon=$ICON@" \
    -e "s@^Exec.*@Exec=$EXEC@"  "$APPNAME.desktop"

* freedesktop的约定是将图标放在$ HOME / .icons,/ usr / share / icons或/ usr / share / pixmaps中。在这些目录下是不同图标大小和类型的子目录。使用其中一个目录存储图标时,桌面文件中仅列出图标名称(不包含目录);否则记录文件的完整路径。

如果在路径中,可执行文件可以列出没有路径名(不安全)。最好列出完整路径。想象一下错误的程序启动,因为没有指定完整路径。

另一种可能性是将桌面文件复制到用户的桌面或 / usr / share / applications ,然后在那里进行编辑。当程序在只读媒体上时执行此操作。

由于以上都不会导致真正的安装,如果可能,请使用平台的本机安装程序和打包工具(rpm,dep,portage等)。这些工具提供了完整安装的框架,包括适当的文件权限(想想selinux)和桌面菜单。它们还提供轻松卸载。

如果程序必须从可移动媒体运行,请考虑使用系统安装仅安装符号链接,也可以使用/ opt / vendor / progname。

答案 1 :(得分:0)

我做得很好的事情是:

Exec=sh -e -c "exec \\"\\$(dirname \\"\\$0\\")/.sh/server.sh\\";$SHELL" %k

解释命令:

下面的代码段将获取执行此操作的用户的目录名称,因此启动器目录名称

$(dirname \\"\\$0\\")

因此,添加所需的路径将使该路径执行相对路径。

参考:https://askubuntu.com/questions/1144341/execute-shell-on-a-relative-path-on-ubuntu-launcher