代码之家  ›  专栏  ›  技术社区  ›  Jake Petroules

如何为Linux桌面条目文件指定具有相对路径的图标?

  •  13
  • Jake Petroules  · 技术社区  · 14 年前

    对于我的一个Linux应用程序,我有一个应用程序二进制文件launcher.sh 脚本(用于ldu库路径)和一个.desktop文件,都在同一个文件夹中。

    我试过:

    Icon=app.svg
    Icon=./app.svg
    Icon=$PWD/app.svg
    Icon=$(dirname %k)/app.svg
    

    但这些都不起作用(只有 Icon=/path/to/app.svg ). 如果无法指定相对路径,并且必须使用变通方法,我想每次launcher.sh 脚本已运行。

    最好的办法是什么?使用 sed 或者其他类似于伪正则表达式的替换工具 Icon=([valid path chars]+)\n 也许?

    1 回复  |  直到 14 年前
        1
  •  16
  •   Jake Petroules    14 年前

    在做了更多的研究之后,就我所见,似乎不可能为桌面条目文件中的图标指定相对路径。

    我使用的解决方法是将以下代码添加到launcher.sh 脚本:

    mv myapp.desktop myapp.desktop-bak
    sed -e "s,Icon=.*,Icon=$PWD/app.svg,g" myapp.desktop-bak > myapp.desktop
    rm myapp.desktop-bak
    

    我知道你需要 cat 或者-i选项来缩短上面的代码,但是我已经读到我使用的解决方案更可靠。如果有人对此有进一步的信息,请发表评论。

        2
  •  4
  •   Nathaniel M. Beaver    4 年前

    事实上 FreeDesktop specification 不允许相对路径:

    Icon

    在文件管理器、菜单等中显示的图标。如果名称是绝对路径, 中描述的算法 Icon Theme Specification 将 用于定位图标。

    [ . . . ]

    iconstring 是图标的名称;这些可能是绝对的 使用中描述的算法定位的图标的路径或符号名称 这个 规范

    尽管它可能不适用于菜单和面板启动器。 运行 launcher.sh 脚本, 您可以用两行代码来完成:

    cp app.svg ~/.local/share/icons/hicolor/48x48/apps/
    cp app.svg ~/.local/share/icons/hicolor/scalable/apps/
    

    然后把

    Icon=app
    

    在桌面文件中( app 只是没有文件扩展名的文件名)。

    这是定位图标的预期机制 没有绝对路径, 这个 spec has this to say :

    所以,你是一个应用程序作者,想安装应用程序 图标,以便它们在KDE和Gnome菜单中工作。至少是你 应该在hicolor主题中安装一个48x48图标。这意味着 在$prefix/share/icons/hicolor/48x48/apps中安装PNG文件。 在$prefix/share/icons/hicolor/scalable/apps中安装svg图标

    一种方法可以做到这一点 是和 xdg-icon-resource 命令,例如。

    $ xdg-icon-resource install --novendor --context apps --size 48 example-app.png
    

    然而, xdg图标资源 does not support SVG images ,

    $ cp example-app.svg ~/.local/share/icons/hicolor/48x48/apps/
    $ cp example-app.svg ~/.local/share/icons/hicolor/scalable/apps/
    

    (这不是打字错误:将SVG文件放在 48x48/apps 菜单和面板都会非常满意。)

    对于菜单,最好在安装后更新图标缓存。

    $ update-icon-caches ~/.local/share/icons
    

    I约束 作为 example-app

    Icon=example-app
    

    这不是相对路径, 但它解决了必须使用绝对路径的问题 如果桌面文件移动到其他位置,则不会中断。

    不管它值多少钱, 支持相对路径 在免费桌面邮件列表中讨论过

    马格努斯伯格马克magnus.bergmark 在gmail.com

    [ . . . ]

    我建议我们也允许以某种方式使用相对路径。

    用例

    1. 我使用了很多.directory文件来制作包含电影的目录 媒体,如漫画书,音乐(专辑艺术)和照片。

    2. 供应商可能希望将图标捆绑到他们正在开发的软件中 因此,桌面菜单仍位于应用程序目录中。

    https://lists.freedesktop.org/archives/xdg/2008-September/009940.html

    我能找到的唯一的反驳

    一个.desktop文件 几乎完全没用。也许你应该看看 软件包建议和实现,并使用 将.desktop文件和图标放在适当的位置。我只能 图标主题和图标命名规范。我看不出来 实际的可执行文件会更有用,尽管elf二进制文件确实有用 没有像win32二进制文件那样的资源。

    https://lists.freedesktop.org/archives/xdg/2008-September/009962.html

    相关链接:

        3
  •  0
  •   Yedhrab    6 年前

    echo $(echo ~) echo $(echo $var) 对于变量

    echo "Icon=$(echo ~)/Pictures/Icons/whatsapp-webapp.svg" > path/to/file.desktop 
    

    如果您对多行echo命令感兴趣,请查看 this link