「ICON-THEME」- 桌面图标 | Icon Theme Specification | freedesktop.org

认识

文档: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 的文件。

其为文本文件,定义了主题的元数据和结构,主要包括:

[Icon 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)的图标,可以这样做:

  1. 准备一个 .png 或 .svg 格式的图标文件。
  2. 找到该应用程序的 .desktop 文件。这些文件通常位于:
  • 系统全局:/usr/share/applications/
  • 用户特定:~/.local/share/applications/
  1. 备份并编辑对应的 .desktop 文件(需要管理员权限或用户权限)。

# 例如,编辑全局的 Firefox 图标(需要 sudo)

sudo nano /usr/share/applications/firefox.desktop

# 或者复制到本地目录再编辑(更安全)

cp /usr/share/applications/firefox.desktop ~/.local/share/applications/

nano ~/.local/share/applications/firefox.desktop

  1. 找到以 Icon= 开头的行,将其值修改为新图标文件
    1. 完整路径(例如 /home/yourusername/Pictures/my_firefox_icon.png)
    2. 如果图标已放在系统或用户的图标目录中,则仅需指定文件名(不含扩展名)。
  2. 保存文件后,注销并重新登录,
    1. 或者运行命令更新缓存:update-desktop-database ~/.local/share/applications

参考

DeepSeek / 介绍 Ubuntu 中的 Icon
DeepSeek / 介绍 linux 中的 icon theme