.desktop 文件:如何指定图标路径

.desktop 文件:如何指定图标路径

我查看了我的 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 现在我知道了为什么有用 :-)

相关内容