Linux修复启动器中的图标显示
Linux 是开源系统,所以无法指望它能像 Windows 或 Mac 系统一样面面俱到。在使用过程中,自定义一些配置也是经常遇到的。本文记录: 如何修复 Gnome 菜单中有的启动器对应的图标无法正常显示的问题。
系统中存在相关图标的情况
图标的默认安装位置为/usr/share/icons/
, 例如 ArchLinux
(2024-11-28)系统中,Open JDK java
的图标就无法正常显示,查询启动器文件
1
2
3
4
5
6
7
8
9
10
11
12[Desktop Entry]
Name=OpenJDK Java 23 Runtime
Name[fi]=OpenJDK Java 23 - ajonaikainen ympäristö
Comment=OpenJDK Java 23 Runtime
Comment[fi]=OpenJDK Java 23 - ajonaikainen ympäristö
Keywords=java;runtime
Exec=/usr/lib/jvm/java-23-openjdk/bin/java -jar
Terminal=false
Type=Application
Icon=java23-openjdk
MimeType=application/x-java-archive;application/java-archive;application/x-jar;
NoDisplay=true
既然其图标无法正常显示,则表明系统中并没有安装java23-openjdk
图标。于是查询系统中安装的相关图标:
1
2
3
4
5ls -R /usr/share/icons/ |grep java
>
java-openjdk
java-openjdk
java-openjdk
这表明系统中安装的图标为java-openjdk
,
因此修改java-java-openjdk.desktop
文件中的Icon
为
1
Icon=java-openjdk
如何指定图标路径
默认情况下,应用程序应该按照以下顺序查找:$HOME/.icons
(为了向后兼容性),$XDG_DATA_DIRS/icons
和/usr/share/pixmaps
。应用程序可以进一步将自己的图标目录添加到此列表中,用户可以以应用程序/桌面特定的方式扩展或更改列表。在这些目录中,每个主题都存储为子目录。通过具有相同名称的子目录,可以将主题分布在多个基本目录中。这样,用户可以扩展和覆盖系统主题。
为了给第三方应用程序提供安装其图标的位置,始终应存在一个名为hicolor
的主题。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
。
完整的规格比这个要详尽得多,但关键是:有一些设定的目录,你只需将图标放入其中,桌面就能找到它们。哪种最适合你取决于你的问题和耐心.
注意:有的文章中说“如果你把图标放在/usr/share/icons/
(系统范围)或者你的个人目录~/.icons
中,那么在.desktop
文件中只需要使用图标文件名而不需要扩展名”。而我的系统中有一个应用Singular
,
系统默认将其图标放置在了/usr/share/icons/Singular.png
,
但是在文件/usr/share/applications/Singular.desktop
中直接写为Icon=Singular
,而系统并没有识别出来,于是修改为绝对路径Icon=/usr/share/icons/Singular.png
后成功识别。修改完图标后,运行
gtk-update-icon-cache -f -t <图标主题路径>
,系统会立刻检测到该图标。