认识
文档:https://specifications.freedesktop.org/icon-theme-spec/latest/
在 Linux 中,桌面环境的图标是代表应用程序、文件、文件夹、设备和操作的核心视觉元素。图标主题是一套遵循统一设计语言和风格的图标集合,它不仅是美化桌面的重要组成部分,更是高度可定制化的功能性元素。通过遵循开放标准,图标主题使用户能够根据自己的审美自由选择和更换主题,从而轻松打造独一无二的桌面体验,充分体现了 Linux 系统的高度灵活性和个性化支持。
组成
其不仅仅是图片,且是有组织地存放在系统特定目录中的文件。图标主题遵循 freedesktop.org Icon Theme Specification 标准。所有遵循该标准的主题可以在任何兼容的桌面环境上使用。例如,GNOME, KDE, XFCE, LXQt,……
一个图标主题通常是一个文件夹,存放在特定的系统目录中,其内部结构有明确的规范:
存放位置
通常,图标主题安装在以下两类目录中:
用户级目录:~/.local/share/icons/ 或 ~/.icons/(推荐前者)
- 在这里安装图标主题,仅对该用户可见。这是安装第三方主题的推荐位置,不会影响系统文件。
系统级目录:/usr/share/icons/ 或 /usr/local/share/icons/
- 这里存放着所有用户都可以使用的图标主题。
系统会优先读取 $HOME 下的主题,这允许用户在不需要系统管理员权限的情况下安装和测试主题。
目录结构
针对典型的图标主题文件夹,其内部结构类似。例如,如下为 Yaru 图标主题:
Yaru/ ├── index.theme # 主题的元数据配置文件,定义了名称、继承关系、目录映射等 ├── scalable/ # 存放 SVG 格式图标的目录,用于可缩放图标 │ └── apps/ # 应用程序图标 │ └── actions/ # 操作图标 │ └── ... ├── 16x16/ # 16x16 像素的 PNG 图标 │ ├── apps/ │ ├── actions/ │ └── ... ├── 22x22/ # 22x22 像素的 PNG 图标 ├── 24x24/ # 24x24 像素的 PNG 图标 ├── ... ├── 256x256/ # 256x256 像素的 PNG 图标 ├── 512x512/ # 512x512 像素的 PNG 图标 └── symbolic/ # “符号化”图标,通常是单色的,用于状态指示器和敏感操作 ├── apps/ ├── actions/ └── ...
根据其尺寸(Size)和上下文(Context),图标被分类存放在不同的子文件夹中。
尺寸,Size,即图标的大小。
- 常见的尺寸有 16×16, 24×24, 32×32, 48×48, 64×64, 96×96, 128×128, 256×256, 512×512
- 甚至 scalable(矢量图标,通常是 SVG 格式)。
上下文,Context,指图标使用的场景。例如:
- actions:操作图标(如 copy, paste, save)。
- apps:应用程序图标。
- devices:设备图标(如硬盘、USB 驱动器)。
- mimetypes:文件类型图标(如 PDF, MP3, TXT)。
- places:位置图标(如文件夹、主页、回收站)。
- status:状态图标(如网络连接强度、电池电量)。
- ……
一个典型的目录名是二者的组合,例如:48×48/apps/, 32×32/places/,或者直接 48×48/。
核心文件:index.theme
针对每个图标主题的根目录下,其都必须有个名为 index.theme 的文件。
其为文本文件,定义了主题的元数据和结构,主要包括:
- Name:声明主题名称,例如,Adwaita、Papirus、……
- Comment:针对主题的简短描述。
- Hidden:
- Directories:
- Inherits:当前主题所继承的父主题。若该主题缺少某个图标,系统会自动从父主题中查找。
- 目录列表:定义该主题包含哪些子目录(即不同尺寸和类型的图标集),以及每个目录的属性(尺寸、上下文、类型等)。
当需要显示某个特定大小的图标时,在这些子目录中,系统会按照 index.theme 定义的顺序查找。
图标格式
PNG:最常用的位图格式,支持透明通道,显示效果好。通常为特定尺寸提供,如 16×16, 24×24, 32×32, 48×48, 64×64, 96×96, 128×128, 256×256, 512×512 像素。
SVG:矢量格式。存放在 scalable/ 目录下。因为它可以无损缩放到任何尺寸,是现代图标主题的首选格式,尤其对于高分辨率屏幕。
XPM:一种古老的位图格式,现在已较少使用。
系统会优先选择最匹配当前显示需求的尺寸和格式。例如,在文件管理器中,列表视图可能需要 16px 图标,而桌面图标可能需要 48px 图标。如果存在 SVG 版本,系统通常会优先使用它来进行缩放。
性质
应用程序图标:这是用户最常接触的图标类型。它们出现在“显示应用程序”(Application Menu)、Dock、桌面快捷方式上。例如,Firefox 的狐狸图标、LibreOffice 的笔图标、……
文件 / 文件夹图标:在文件管理器(如 Nautilus)中,不同的文件类型(如文本文档、图片、视频)和文件夹都有对应的图标,使用户能快速识别内容。
设备图标:表示外部设备,如 U 盘、外部硬盘、光盘等。当这些设备插入电脑时,相应的图标会出现在桌面或文件管理器的侧边栏。
状态 / 指示器图标:位于屏幕顶部面板的右侧区域,通常称为“系统托盘”或“状态区”。这些图标显示系统状态,如网络连接、声音音量、电池电量、蓝牙、输入法、通知等。
操作 / 动作图标:用于按钮、工具栏和菜单中,代表一个具体的操作,如“保存”(软盘图标)、“打印”(打印机图标)、“刷新”(循环箭头图标)等。
图标自动查找 / 缺失图标处理
其避免主题开发者需要绘制成千上万个图标,通常都会继承一些基础主题,其中 hicolor 是最为著名的。
缺失图标:如果一个主题缺少某个图标,系统会从其继承链(在 index.theme 中定义的 Inherits)的主题中查找,最终回退到基础的 hicolor 图标主题。如果看到某个图标风格不一致,很可能就是因为当前主题没有提供,导致其使用的是父主题的图标。
构建
部分著名且优秀的图标主题
- Adwaita:GNOME 桌面的默认图标主题。设计简洁、现代,与 GNOME 生态系统集成度最高。
- Breeze:KDE Plasma 桌面的默认图标主题。同样现代且清爽,与 KDE 应用程序完美搭配。
- Papirus:极其流行且维护积极的第三方主题。拥有海量图标,覆盖非常全面,风格扁平多彩。它还有多个衍生版本(如 Papirus-Dark, Papirus-Light)。
- Numix:另一个经典的第三方主题系列,以其圆形和鲜艳的色彩而闻名。
- Tela:一款设计精美、风格统一的扁平化图标主题,图标数量也非常丰富。
- La Capitaine:一款模仿 macOS 风格的图标主题,深受喜欢该风格用户的喜爱。
- Obsidian / Faenza:经典的主题,以其统一的方形托盘图标设计而闻名,虽然近年更新较少,但仍有大量用户。
在 Ubuntu Desktop 中,部分图标主题
https://gitlab.gnome.org/GNOME/adwaita-icon-theme
- adwaita-icon-theme – default icon theme of GNOME
- gnome-brave-icon-theme – blue variation of the GNOME-Colors icon theme
- gnome-noble-icon-theme – purple variation of the GNOME-Colors icon theme
- gnome-wine-icon-theme – red variation of the GNOME-Colors icon theme
- gnome-wise-icon-theme – green variation of the GNOME-Colors icon theme
- ……
安装图标主题
通常有几种方式:
通过包管理器(推荐):许多流行的图标主题被打包成软件包,可以直接通过发行版的软件仓库安装。
- Debian/Ubuntu:sudo apt install <theme-name>
- Fedora:sudo dnf install <theme-name>
- Arch Linux:sudo pacman -S <theme-name>
手动安装:
- 用户可以从官方软件仓库或第三方网站(如 gnome-Look.org 或主题的 GitHub 页面)下载主题压缩包,
- 解压后将其文件夹复制到 ~/.local/share/icons/ 目录下即可。
切换图标主题
通过桌面环境提供的设置工具,可以轻松完成:
- GNOME:“设置” -> “外观” -> “图标”
- KDE Plasma:“系统设置” -> “外观” -> “图标”
- XFCE:“设置” -> “外观” -> “图标”
- Cinnamon:“设置” -> “主题” -> “图标”
- ……
- 也有一些通用的图形化工具可以帮助管理主题,例如 LXAppearance(常用于轻量级桌面,但适用于所有环境)。
针对高级用户或脚本编写,可以使用命令行工具来查询和设置图标主题,例如:
- gsettings get org.gnome.desktop.interface icon-theme # 查看当前图标主题
- gsettings set org.gnome.desktop.interface icon-theme ‘Papirus’ # 设置为 Papirus 图标主题
图标不更新问题、图标缓存问题:
- 当更换主题后,某些旧图标可能会残留。可以尝试重建图标缓存:gtk-update-icon-cache -f -t ~/.local/share/icons/<icon-theme>
- 或者,直接注销,再重新登录。
查看图标主题
gtk-3-examples: /usr/bin/gtk3-icon-browser
应用
修改应用程序的桌面图标 / 为单个应用程序指定图标
可以通过修改该应用程序的 .desktop 文件(通常位于 /usr/share/applications/ 或 ~/.local/share/applications/)中的 Icon 字段来实现。只需将字段值改为图标文件(不含扩展名)的绝对路径或名称即可。
如果我们只是想修改某个特定应用程序(如 Firefox)的图标,可以这样做:
- 准备一个 .png 或 .svg 格式的图标文件。
- 找到该应用程序的 .desktop 文件。这些文件通常位于:
- 系统全局:/usr/share/applications/
- 用户特定:~/.local/share/applications/
- 备份并编辑对应的 .desktop 文件(需要管理员权限或用户权限)。
sudo nano /usr/share/applications/firefox.desktop
cp /usr/share/applications/firefox.desktop ~/.local/share/applications/
nano ~/.local/share/applications/firefox.desktop
- 找到以 Icon= 开头的行,将其值修改为新图标文件
- 完整路径(例如 /home/yourusername/Pictures/my_firefox_icon.png)
- 如果图标已放在系统或用户的图标目录中,则仅需指定文件名(不含扩展名)。
- 保存文件后,注销并重新登录,
- 或者运行命令更新缓存:update-desktop-database ~/.local/share/applications
参考
DeepSeek / 介绍 Ubuntu 中的 Icon
DeepSeek / 介绍 linux 中的 icon theme