许多Ubuntu用户在备份终端配色时,常常误以为只需保存~/.bashrc中的PS1配置即可。但真正的“终端配色主题”,远不止提示符那几种颜色那么简单。整个窗口的文本色、背景色、选中色、光标色,以及16色调色板——这些才是构成你视觉体验的核心资产,它们全部都归GNOME Terminal自己管理。要完整备份这些,就必须采用正确的方法。
用gsettings备份GNOME终端配色主题的正确操作是:执行gsettings list-recursively org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:$(gsettings get org.gnome.Terminal.ProfilesList default | tr -d ")/ > terminal-profile-backup.txt,该命令动态获取默认profile ID并导出全部颜色参数(如foreground-color、background-color、palette等)为纯文本。

如何用 gsettings 备份当前终端配色主题
Ubuntu 的 GNOME 终端(gnome-terminal)并没有提供“导出主题”的图形化按钮,但你完全不用担心——它的所有配色配置实际上都存放在 dconf 数据库里,而 gsettings 就是访问这个库的安全封装。只要把这条关键路径备份下来,后续恢复基本就是分分钟的事。
- 执行命令:
gsettings list-recursively org.gnome.Terminal.Legacy.Profile:/org/gnome/terminal/legacy/profiles:/:$(gsettings get org.gnome.Terminal.ProfilesList default | tr -d ")/ > terminal-profile-backup.txt - 这条命令会动态获取当前默认 profile 的 ID——注意这个 ID 是一串动态生成的 UUID(比如
b1dcc9dd-5262-4d8d-a863-c897e0d049d6),所以绝对不能硬编码,必须用gsettings get ... default实时抓取。然后它会导出该 profile 下所有的颜色参数,像foreground-color、background-color、palette等等,全部以纯文本形式写入备份文件,十六进制值和布尔开关一个不落。 - 备份完成后,直接
cat terminal-profile-backup.txt就能看到完整的配置清单。后面配合gsettings import或dconf load就能恢复(具体步骤见下一节)。
为什么不能只改 ~/.bashrc 就算备份了终端配色
这是一个非常经典的误区。 ~/.bashrc 里的 PS1 颜色控制的是 shell 提示符——用户名、路径、$ 符号这些——它只是终端窗口里极小的一块内容。而真正的“终端配色主题”涵盖的是整个窗口的视觉风格:文本色、背景色、选中色、光标色,还有那16色调色板(palette),ls、vim 这些命令的色彩表现,全都依赖它。这些跟 shell 压根儿没关系。
- 改
PS1只影响提示符文字颜色,对ls输出的绿色/蓝色/红色文件名完全不起作用。 - 改
PS1也不影响vim中语法高亮的颜色映射——vim读取的是终端上报的 palette,不是你写的PS1字符串。 - 如果你只备份了一个
~/.bashrc,换到新机器上恢复之后,打开终端一看,ls出来的文件依然是黒底白字,因为 palette 完全没有被还原。
说白了,只靠 ~/.bashrc 备份配色,等于只存了门牌号却没存房子本身。
用 dconf 导入备份时容易漏掉的关键点
很多人拿到备份文件之后,直接拿 gsettings import 去还原——结果发现不生效,因为 GNOME Terminal 的 profile 在 dconf 数据库里是以路径形式组织的,而且每创建一个新 profile,系统都会生成一个新的 UUID。正确的做法是用 dconf 工具直接写入目标路径。
- 第一步,确认目标 profile ID 是否存在:执行
gsettings get org.gnome.Terminal.ProfilesList list,如果结果为空,需要先在 GUI 里新建一个 profile(手动新建一次就行了)。 - 导入之前,务必先清空目标路径下的原有配置:
dconf reset -f "/org/gnome/terminal/legacy/profiles:/:$(gsettings get org.gnome.Terminal.ProfilesList default | tr -d ")/" - 接着执行导入:
dconf load "/org/gnome/terminal/legacy/profiles:/:$(gsettings get org.gnome.Terminal.ProfilesList default | tr -d ")/" - 最后,记得重启终端或运行
killall gnome-terminal-server强制重载配置,新主题才会生效。
这几个步骤缺一不可。尤其那个 dconf reset -f,很多人忘了清空就直接 load,导致新旧配置冲突,最终效果乱七八糟。
备份时要不要包含字体和透明度设置
要,而且必须一起打包。字体(font-name)、行距(use-system-font)、透明度(background-transparency-percent)都属于同一 profile 的配置项。如果你只备份了颜色,那么恢复出来的主题看着可能还行,但字体渲染效果和透明感全丢了,典型的“形似神不似”。
- 举个例子:你精心调了 Fira Code 字体 + 80% 透明度 + 深灰背景,结果只恢复颜色,字体变成默认的 Monospace,透明度变回 0%,观感立刻掉一个档次。
palette值是一串用逗号分隔的16个十六进制颜色值(比如'#000000,#cc0000,#4e9a06,...'),顺序是固定的。一旦错一位,整个ls的颜色就全乱了——目录变成蓝色还是紫色,全看 palette 的顺序对不对。- 好消息是,我们之前用的那条备份命令
list-recursively默认就把所有字段都导出了,没有显式排除任何东西,所以你不必额外操心——字体、透明度、光标样式等等,全在里面。
真正起效的终端配色备份,不是记几个颜色代码那么简单,而是要把 profile 在 dconf 路径下的完整状态固化下来——UUID、palette、字体、透明度、光标样式,缺一不可。否则恢复之后,看着像,用起来却处处不对劲,那才是真正的头疼。
