我查看了我的 12.04 Ubuntu 系统上的 .desktop 文件,其中许多文件没有为其图标文件指定完整路径。它们更像是:
Icon=anjuta
或者
Icon=vlc
或者
Icon=application-x-clementine
是否有一个可以存储图标的通用路径,以便可以工作?如果没有,那么它是如何工作的?如果我尝试对我自己的图标执行相同的操作,我必须指定完整路径。
例如
Icon=/usr/local/share/my-icon.png
工作正常,但是
Icon=my-icon.png
将失败。
欢迎任何形式的帮助!
答案1
是的,查找过程相当复杂。以下是freedesktop 图标规格目录布局:
在一组目录中寻找图标和主题。默认情况下,应用程序应该在 $HOME/.icons(为了向后兼容)、$XDG_DATA_DIRS/icons 和 /usr/share/pixmaps(按此顺序)中查找。应用程序可以进一步将自己的图标目录添加到此列表中,用户可以扩展或更改列表(以特定于应用程序/桌面的方式)。在每个目录中,主题都存储为子目录。通过具有相同名称的子目录,主题可以分布在多个基本目录中。这样,用户可以扩展和覆盖系统主题。
为了让第三方应用程序有地方安装它们的图标,应该始终存在一个名为“hicolor”的主题1。hicolor 主题的数据可从以下网址下载: http://www.freedesktop.org/software/icon-theme/. 如果在当前主题中找不到图标,则实现需要在“hicolor”主题中查找。
每个主题都存储为基目录的子目录。主题的内部名称是子目录的名称,尽管主题指定的用户可见名称可能不同。因此,主题名称区分大小写,并且仅限于 ASCII 字符。主题名称也不能包含逗号或空格。
至少一个主题目录中必须有一个名为 index.theme 的文件来描述主题。按顺序搜索基础目录时找到的第一个 index.theme 将被使用。此文件描述了主题的一般属性。
主题目录中还有一组包含图像文件的子目录。每个目录都包含为特定标称图标大小设计的图标,如 index.theme 文件所述。子目录可以有几层深,例如主题“hicolor”中的子目录“48x48/apps”最终位于 $basedir/hicolor/48x48/apps。
图像文件必须是以下类型之一:PNG、XPM 或 SVG,扩展名必须是“.png”、“.xpm”或“.svg”(小写)。对 SVG 文件的支持是可选的。不支持 SVG 的实现应该忽略任何“.svg”文件。除此之外,每个文件可能都有一个包含额外图标数据的附加文件。它应该具有与图像文件相同的基本名称,扩展名为“.icon”。例如,如果图标文件名为“mime_source_c.png”,则相应的文件将被命名为“mime_source_c.icon”。
完整的规范比这更详尽,但关键是:有一些固定的目录,您可以将图标塞进去,桌面就会找到它们。哪种最适合您取决于您的问题和您的耐心 :)
答案2
如果您将图标放入/usr/share/icons/
(系统范围)或主目录中~/.icons
,则您只能在 .desktop 文件中使用图标文件名,而无需使用扩展名。例如
Icon=vlc
如果不是,那么您必须在 .desktop 文件中使用图标的绝对路径。例如
Icon=/usr/local/share/my-icon.png
答案3
我有使用徽章而非图标的经验,但这应该可行:
mkdir -p $HOME/.icons/hicolor/48x48/
把图标放在那个目录中,我们假设它是myicon.png
cp myicons.png $HOME/.icons/hicolor/48x48/
添加描述文件:
gedit $HOME/.icons/hicolor/48x48/myicon.icon
内容:
[Icon Data]
DisplayName=myicon
现在你的Icon=myicon
代码应该可以正常工作了。如果你将徽章放在“徽章”子目录中,它就可以与徽章一起使用:
感谢@Oli 现在我知道了为什么有用 :-)