【问题标题】:Using relative paths for Gnome launcher使用 Gnome 启动器的相对路径
【发布时间】:2023-04-02 16:42:01
【问题描述】:

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

Exec=../myapp/myexecutable
图标=../myapp/myicon.png

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

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

【问题讨论】:

    标签: relative-path gnome launcher


    【解决方案1】:

    不支持相对路径*。

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

    这是在考虑 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。

    【讨论】:

      【解决方案2】:

      我所做的和完美的工作是:

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

      解释命令:

      下面的 sn-p 将获取执行者的目录名称,因此是启动器目录名称

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

      所以附加所需的路径,将使这个执行相对路径。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多