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

use*_*409 26 icons .desktop

我查看了 12.04 Ubuntu 系统上的 .desktop 文件,其中许多文件没有完整的图标文件路径规范。它更像是:

Icon=anjuta
Run Code Online (Sandbox Code Playgroud)

或者

Icon=vlc
Run Code Online (Sandbox Code Playgroud)

或者

Icon=application-x-clementine
Run Code Online (Sandbox Code Playgroud)

是否有可以存储图标的通用路径,以便它可以工作?如果没有,这是如何工作的?如果我尝试用我自己的图标做同样的事情,我必须指定完整路径。

例如

Icon=/usr/local/share/my-icon.png
Run Code Online (Sandbox Code Playgroud)

工作正常,但

Icon=my-icon.png
Run Code Online (Sandbox Code Playgroud)

将失败。

欢迎任何形式的帮助!

Oli*_*Oli 19

是的,查找非常复杂。以下是有关目录布局的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”。

完整的规范比这更详尽{ve,ng},但关键是:有一些设置目录,您可以将图标放入其中,桌面会找到它们。哪一个最适合你取决于你的问题和你的耐心:)


Rad*_*anu 9

如果您将图标放在/usr/share/icons/(系统范围内)或您的家中~/.icons,那么您只能在 .desktop 文件中使用没有扩展名的图标文件名。例如

Icon=vlc
Run Code Online (Sandbox Code Playgroud)

如果没有,那么您必须使用 .desktop 文件中图标的绝对路径。例如

Icon=/usr/local/share/my-icon.png
Run Code Online (Sandbox Code Playgroud)

  • 操作系统通常需要多长时间才能检测到您已更新或向“.desktop”文件添加了“Icon”条目? (2认同)

Rma*_*ano 6

我有使用标志而不是图标的经验,但这应该有效:

mkdir -p $HOME/.icons/hicolor/48x48/
Run Code Online (Sandbox Code Playgroud)

将图标放在该目录中,假设它是 myicon.png

cp  myicons.png $HOME/.icons/hicolor/48x48/
Run Code Online (Sandbox Code Playgroud)

添加描述文件:

gedit $HOME/.icons/hicolor/48x48/myicon.icon
Run Code Online (Sandbox Code Playgroud)

内容:

[Icon Data]

DisplayName=myicon
Run Code Online (Sandbox Code Playgroud)

现在你的Icon=myicon线路应该可以工作了。如果将它们放在“emblems”子目录中,它可以与标志一起使用:

个性化徽章

感谢@Oli 现在我知道它为什么起作用了:-)