现代 GNOME 已经不是那个换一份 GTK 主题就能包办全桌面的时代。GNOME Shell、GTK 3 应用、GTK 4 应用和 libadwaita 应用是四个不同表面。Tweaks 里选中的主题可能只改变其中一两层,其他部分完全不动。这通常是架构使然,不一定是主题包坏了。
本文中的三张结构图为根据官方文档制作的示意图,不是桌面实拍截图。外部官方截图资源在本次准备期间无法稳定获取,因此图中明确标为「STYLISED MOCKUP / 示意图」。

先弄清楚:这里的「主题」到底是哪一层
| 层 | 负责什么 | 用户目录 / 入口 |
|---|---|---|
| GNOME Shell | 顶栏、概览、Dash、通知与快速设置 | Shell 样式表;自定义主题需要扩展 |
| libadwaita 应用 | 当前 GNOME 应用控件与自适应布局 | 内置 Adwaita,加亮/暗、强调色和高对比接口 |
| GTK 4 应用 | 未必使用 libadwaita 的 GTK 4 控件 | 应用自身或工具包 CSS |
| GTK 3 应用 | 较老的原生应用和不少第三方工具 | ~/.local/share/themes/<name>/gtk-3.0/ |
| 图标与光标 | Freedesktop 图标和 Xcursor 主题 | ~/.local/share/icons/ |
| GDM | 登录界面 | 系统组件,与登录后的 Shell 分开 |
安装主题后「只变了一半」,通常不是 bug,而是只装了其中一层。图标、窗口装饰、应用控件和桌面 Shell 经常由不同组件负责。
一套不容易翻车的定制顺序
- 先用「设置 → 外观」。亮/暗模式、强调色、壁纸和高对比度是受支持的系统级入口。
- 安装 GNOME Tweaks 来选择图标、光标和旧式 GTK 主题。它只是附加控制面板,不代表 libadwaita 应用会接受任意主题。
- 选择 GNOME Shell 主题前先装 User Themes 扩展。Shell 主题包通常包含 gnome-shell/gnome-shell.css。
- 想让界面统一,更稳妥的办法是用 adw-gtk3 让旧 GTK 3 应用靠近 libadwaita,而不是强行把 libadwaita 改成旧 GTK 主题。
- 每次改动后各测一个原生应用、一个 Flatpak 和 Shell。三者看到主题文件的方式和沙箱规则不同。

用命令行检查和切换
GUI 适合探索,命令行适合复现。下面的命令只操作当前用户;执行前先确认主题名称在本机确实存在。
# 设置受支持的暗色偏好
gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'
# 图标与光标
gsettings set org.gnome.desktop.interface icon-theme 'Papirus-Dark'
gsettings set org.gnome.desktop.interface cursor-theme 'Bibata-Modern-Ice'
# 已启用 User Themes 扩展时选择 Shell 主题
gsettings set org.gnome.shell.extensions.user-theme name 'MyShellTheme'不要把整个主题目录直接 sudo cp 到系统路径作为第一选择。用户目录更容易回退,也不会在软件包升级时留下来源不明的文件。
自己改主题时,从小处开始
先复制一份现有主题到用户目录并改名,不要直接编辑 /usr/share 里的发行版文件。第一轮只改一个颜色、一个间距或一组图标,确认加载路径和缓存都正确,再继续扩大范围。这样出现黑字配黑底时,你知道是哪一行造成的。
如果主题包有 metadata 或 index.theme,同时修改内部名称。只改目录名会产生两个界面上同名的主题,也可能让继承关系继续指向旧主题。
版本变化:旧教程为什么经常不灵

| 版本 | 与主题有关的变化 |
|---|---|
| GNOME 3 / GTK 3 | 传统第三方主题模式:GTK 主题放 ~/.themes,Shell 主题通过 User Themes,Tweaks 把选项串起来。 |
| GNOME 40 | 概览改成横向工作区。视觉变化很显眼,更长远的技术变化则是向 GTK 4 迁移。 |
| GNOME 42 与 libadwaita | 大量核心应用采用 libadwaita,发行版或用户提供的任意 GTK 主题不再能可靠地改掉这些应用。 |
| GNOME 47–50 | 强调色、高对比度和亮暗模式联动逐渐完善。GNOME 50 还完成了 Wayland-only 桌面会话迁移;X11 应用仍可走 Xwayland。 |
教程里的路径可能仍然存在,但主题引擎、工具包大版本或显示服务器已经变了。判断教程是否可用时,先看它针对 GTK 2/3/4、Qt 5/6、X11 还是 Wayland,再看发布时间。
常见问题
- 不要随便用一份 gtk.css 覆盖 libadwaita 资源并期待升级安全。控件小改动就可能让文字不可读。
- Shell 扩展要匹配已安装的 GNOME Shell 版本。大版本升级前先停用不兼容扩展。
- Flatpak 应用不会自动看到主机上的所有主题。优先使用匹配的 runtime 主题扩展或受支持的 color-scheme portal。
- 修改 GDM 涉及系统文件,也影响登录路径。普通用户主题实验不要顺手碰它。
我的建议
先把默认主题调整到能长期使用,再添加一个第三方组件。一次换完整套装很有成就感,却很难定位哪一层导致可读性、缩放或 Flatpak 不一致。最稳的方案往往是:保留桌面默认控件样式,只换配色、图标、光标和窗口装饰。
评论