对于我的一个Linux应用程序,我有应用程序二进制文件,一个launcher.sh脚本(对于LD_LIBRARY_PATH)和一个.desktop文件,都在同一个文件夹中。
我想使用相对路径而不是图标的绝对路径。
我试过了:
Icon=app.svg
Icon=./app.svg
Icon=$PWD/app.svg
Icon=$(dirname %k)/app.svg
但这些都不起作用(仅Icon=/path/to/app.svg
)。如果无法指定相对路径并且我必须使用解决方法,那么每次运行launcher.sh脚本时,我都认为我可以在.desktop文件中重新生成图标路径。
最好的方法是什么?使用sed
或其他替换实用程序可能会使用Icon=([valid path chars]+)\n
这样的伪正则表达式吗?
答案 0 :(得分:15)
在做了一些更多的研究之后,就我所见,它看起来似乎不可能为桌面条目文件中的图标指定相对路径。
我使用的解决方法是将以下代码添加到我的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
这将在每次运行启动器脚本时更新图标的路径,并且由于.desktop文件指向启动器脚本,因此单击.desktop文件可以有效地更新其图标。
我知道您可以使用cat
或-i选项来缩短上述代码但我已经读过我使用的解决方案更可靠。如果有人有进一步的信息,请发表评论。
答案 1 :(得分:2)
FreeDesktop specification的确是 不允许相对路径:
标准键
Icon
要显示在文件管理器,菜单等中的图标。如果名称是绝对路径, 给定的文件将被使用。如果名称不是绝对路径,则 Icon Theme Specification中描述的算法将是 用于定位图标。
[。 。 。 ]
类型
iconstring
的值是图标的名称;这些可能是绝对的 路径或使用以下算法描述的图标的符号名称 Icon Theme Specification。这样 值不能由用户显示,并以UTF-8编码。
解决方法足够,
尽管它可能不适用于菜单和面板启动器。
但是,如果您愿意修补桌面文件
运行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-icon-resource
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
然后,您可以像这样将iconstring
设置为example-app
:
Icon=example-app
这不是相对路径, 但这解决了必须使用绝对路径的问题 并且如果桌面文件移到其他位置也不会中断。
对于它的价值, 支持相对路径 在FreeDesktop邮件列表中进行了讨论 早在2008年9月:
Magnus Bergmark magnus.bergmark在gmail.com
2008年9月23日星期二01:01:32
[。 。 。 ]
我建议我们也以某种方式允许使用相对路径。
用例
我使用很多.directory文件来制作包含电影的目录 将电影海报作为图标。此行为可能适用于任何形式的 媒体,例如漫画书,音乐(相册)和照片。
供应商可能希望将图标捆绑到他们所使用的软件中 分发以与.desktop文件一起使用,而该文件不在 桌面菜单,因此仍位于应用程序目录中。
https://lists.freedesktop.org/archives/xdg/2008-September/009940.html
我唯一能找到的反驳 该提案的位置在这里:
.desktop文件 不打算进入标准应用程序目录的是 几乎完全没用。也许您应该看一些 软件包建议和实施,并与使用 这些,代替。另一个选择是xdg utils脚本,用于安装 .desktop文件和图标放在适当的位置。我只能 假定您卸载的应用程序也打算不遵循 图标主题和图标命名规范。我看不到 将目录的图标设置为确实有用。设置图标 实际的可执行文件会有用得多,尽管elf二进制文件确实可以 没有像win32二进制文件那样的资源。
https://lists.freedesktop.org/archives/xdg/2008-September/009962.html
相关问题:
相关链接:
答案 2 :(得分:0)
您可以使用echo $(echo ~)
来使用命令输出,或者使用echo $(echo $var)
来获取变量
例如:
echo "Icon=$(echo ~)/Pictures/Icons/whatsapp-webapp.svg" > path/to/file.desktop
如果您对多行回声命令感兴趣,请查看this link