这是对问题的扩展如何在启动器中包含环境变量?。这个问题解释了如何使用环境变量作为文件Exec
的一部分.desktop
,而不是图标
一个例子:
[Desktop Entry]
Name=My Application name
Comment=a comment
Exec=sh -c '$HOME/.bin/path/to/bin'
Icon= $HOME/.bin/path/to/icon
此启动器可以工作,但图标未显示。我无法使用类似
Icon=sh -c '$HOME/.bin/path/to/icon'
对于图标...该做什么呢?
答案1
老实说,在启动器中使用图标的最佳方法是确保图标文件位于图标搜索路径中。参考freedesktop.org 图标目录方案和基本目录定义,在 Ubuntu 系统上至少应该在以下目录中搜索图标:
$HOME/.icons
$HOME/.local/share/icons
/usr/local/share/icons
/usr/share/icons
/usr/share/pixmaps
因此,如果您想使用自己的图标,但没有 root 权限,请将图标安装到 或 中$HOME/.icons
。$HOME/.local/share/icons
使用后者,您甚至可以在 和 等目录下使用相同的基本名称模拟具有多分辨率图标的系统图标目录$HOME/.local/share/icons/hicolor/48x48/apps
结构$HOME/.local/share/icons/hicolor/256x256/apps
。
如果图标位于这些可搜索目录之一中,您可以简单地Icon=myapp
在.desktop
文件中使用。
答案2
您可以尝试这样的操作:
[Desktop Entry]
Type=Application
Name=MyApp
Exec=sh -c "mv %k %k-bak && sed -e "s,^Icon=.*,Icon=$HOME/.bin/path/to/icon.png,g" %k-bak > %k && chmod +x %k; rm %k-bak"
Icon=???
运行后,这将把相对图标路径添加到 .desktop 文件。
更多细节:
%k
代表 .desktop 文件的路径
mv %k %k-bak
创建备份文件sed -e "s,^Icon=.*,Icon=$HOME/.bin/path/to/icon.png,g" ...
用当前的 $HOME... 路径替换旧的图标路径(“^” -> 开始行,这里真的很重要,不要替换命令本身)并创建新的 .desktop 文件chmod +x %k
使新的 .desktop 文件可执行rm %k-bak
删除旧的备份文件
您可以在更改图标路径之后或之前添加自己的命令。
灵感来自https://stackoverflow.com/a/3464561和https://askubuntu.com/a/345123/265974