↓ 跳过正文
  1. Posts/

告别历史包袱:2026 年 Wayland Linux 桌面工具换代记录

·2638 字·6 分钟

前几天翻自己的 dotfiles,准备同步到新环境,结果越看越不对劲。.xprofile 里写着 xrandr --dpi 192,zsh 的 env 文件里还 export 着 GTK_IM_MODULE=fcitx,Sway 配置里甚至还有一段给 XWayland 应用单独设缩放比例的 workaround。

这些配置我已经很久没碰过了,但它们一直安静地躺在那里。有些是 2021 年从 X11 切到 Wayland 时写的兼容层,有些是更早之前的遗留。

问题是,我的主力桌面(Manjaro + KDE Plasma 6 Wayland)已经跑得很稳了,Sway 那边也一直在用。到了 2026 年,Wayland 早就不是那个"还得备着 X11 兜底"的过渡状态。但我手头的工具链和配置习惯,还停留在几年前。

于是决定趁这次整理 dotfiles,把高频使用的桌面工具做一次彻底的换代。

换了什么
#

先列个总览:

领域之前之后换代原因
终端模拟器KonsoleGhosttyGPU 加速渲染,1.6x 分数缩放下文字锐利,原生 Kitty Graphics 协议,无标题栏
文件管理Dolphin / 基础 CLIYaziRust 异步极速,终端内高清预览图片、PDF、视频缩略图,键盘操作不断流
Git diff默认 less 分页Git Delta行内字符级语法高亮,双色行号,大段 diff 看着不累
音频降噪裸 PipeWireEasyEffects + RNNoise后台常驻过滤键盘声和风扇杂音,全系统接管麦克风通道
屏幕录制OBS 软解GPU Screen RecorderAMD 780M 硬件编码,CPU 占用接近 0%,支持高光回放
截图标注Spectaclegrim + slurp + SattyWayland 原生选区,即时标注画笔、箭头、马赛克
剪贴板管理系统托盘小部件cliphist + fzf终端模糊搜索历史剪贴板,支持文本和图片

下面按使用频率展开说说体感差异。

终端和文件管理:Ghostty + Yazi
#

我在 ThinkPad P14s(AMD Ryzen 7840,Radeon 780M 核显)上开着 2.8K 屏幕,分数缩放设的 1.6x。这个环境下对终端渲染的要求其实挺高的——1.6 不是整数倍,传统终端的字体光栅化在这个比例下经常显得发毛或者偏粗。

Konsole 用了好几年,功能没什么大问题,但在这块屏幕上文字一直有种说不上来的"糊"。换到 Ghostty 之后差异很明显:它是 GPU 硬件加速渲染,对 Wayland 的 fractional scaling 支持做得很到位,文字边缘干净锐利,看代码的时候眼睛舒服了不少。另外 Ghostty 默认就是无标题栏的极简风格,在平铺窗口管理器下非常合适。

Ghostty 原生支持 Kitty Graphics 协议,这件事本身不稀奇,但它让终端文件管理器 Yazi 真正变得好用了。Yazi 是 Rust 写的,全异步 I/O,打开几千个文件的目录也不卡。关键是光标移到图片、PDF 或者视频文件上,右侧预览窗会直接渲染出高清内容——这在之前用 Konsole 的时候是做不到的(要么没图形协议支持,要么渲染质量不行)。

我给 Yazi 套了一层 shell wrapper,退出时自动 cd 到最后浏览的路径。日常翻项目目录、找素材,基本不需要再开 Dolphin 了。

代码审查和剪贴板
#

Git Delta 是个小改动,但体验提升意外地大。以前用默认的 git diff + less,看大段改动的时候,哪些字符变了、哪些行是新增的,全靠肉眼扫。Delta 作为 git 的分页器,给 diff 加上了语法高亮和行内字符级的差异标记,改了哪几个字符会用不同颜色直接标出来。配置也简单,.gitconfig 里加几行就行:

1[core]
2    pager = delta
3
4[interactive]
5    diffFilter = delta --color-only
6
7[delta]
8    navigate = true
9    side-by-side = true

cliphist 解决的是另一个长期痛点。KDE 自带的剪贴板小部件其实能用,但我大部分时间都在终端里,切出去点托盘图标再找历史记录,打断工作流。cliphist 配合 wl-paste 在后台监听 Wayland 剪贴板事件,文本和图片都存。需要回溯的时候,在终端里一行命令调 fzf 模糊搜索,选中回车就写回剪贴板。整个过程手不离键盘。

音频、录屏和截图
#

这三个工具的共同点是:它们都受益于现代 Wayland + PipeWire 这套底座。

EasyEffects 我配成了后台服务模式(easyeffects --gapplication-service 开机自启)。它接管 PipeWire 的麦克风通道,挂上 RNNoise 降噪插件,效果是全系统生效的——不管我用飞书、腾讯会议还是 Google Meet,敲机械键盘的声音和笔记本风扇的嗡嗡声都被过滤掉了。以前每个会议软件都要单独开降噪,现在不用管了。

GPU Screen Recorder 替掉了 OBS。以前偶尔录个桌面演示,OBS 用软解编码,风扇立刻起飞。gpu-screen-recorder 直接调用 Radeon 780M 的硬件编码器(VA-API),录屏时 CPU 占用接近 0%,风扇安安静静的。它还有个类似 NVIDIA ShadowPlay 的回放功能——后台一直在录最近几分钟,按快捷键就能保存刚才发生的操作,录 bug 复现的时候很方便。

截图标注换成了 grim + slurp + Satty 这套组合。grim 负责抓屏,slurp 负责选区,Satty 负责标注。选完区域后 Satty 立刻弹出来,可以画箭头、打马赛克、加文字,保存后自动进剪贴板。比 Spectacle 轻量很多,而且是纯 Wayland 原生实现,不走 XWayland。

Electron 应用发虚这件事
#

工具换代之外,这次整理还解决了一个困扰我很久的问题:1.6x 分数缩放下,所有 Electron 应用的字体都发虚。Chrome、VS Code、Cursor、飞书,无一幸免。

后来搞清楚了原因。在分数缩放环境下,如果 Electron 应用走的是 XWayland,它会先按整数倍(比如 2x)渲染,然后由 Wayland 合成器缩回 1.6x。这个缩放是双线性插值做的,文字这种高频细节一插值就糊了。

解决方法是让这些应用跑在原生 Wayland 下,直接走 wp-fractional-scale-v1 协议,由应用自己按 1.6x 渲染。2026 年的 Chromium 和 Electron 28+ 对此已经很成熟了。全局配一个环境变量就行:

1# ~/.config/environment.d/wayland-ozone.conf
2ELECTRON_OZONE_PLATFORM_HINT=auto

再给需要中文输入的应用加上 --enable-wayland-ime,输入法的光标跟随也正常了。

改完之后差异肉眼可见——之前模模糊糊的界面文字,突然变得跟原生 GTK/Qt 应用一样清晰。

删掉 GTK_IM_MODULE 反而更好
#

另一个反直觉的发现是输入法相关的环境变量。

我的 dotfiles 里一直写着这三行,从最早用 fcitx 的时候就有:

1export GTK_IM_MODULE=fcitx
2export QT_IM_MODULE=fcitx
3export XMODIFIERS=@im=fcitx

之前在排查 GTK4 应用(主要是 GNOME 生态的一些工具)偶尔卡死的问题时,发现跟 GTK_IM_MODULE 有关。设了这个变量之后,GTK4 应用会被强制走 X11 时代那套老的 IMModule 桥接,而不是 Wayland 原生的 text-input-v3 协议。在 Plasma 6 Wayland 下,这条路径本身就不稳定,轻则光标跟随错位,重则呼出输入法时窗口直接卡住。

正确做法是只保留 XMODIFIERS=@im=fcitx,把 GTK_IM_MODULE 和 QT_IM_MODULE 都删掉。 现代的 fcitx5 在 Wayland 下会自动通过 text-input-v3 协议跟合成器通信,不需要这些老变量。删掉之后,输入法的呼出响应和跟手度反而更好了,GTK4 应用也再没出过卡死的问题。

这大概是整次升级里最"少即是多"的一个改动。

写在最后
#

这次清理下来,发现很多"历史包袱"并不是什么大问题,就是一些早年写的 workaround 和兼容配置,一直没动过。系统在进化,但 dotfiles 没跟上。

换完这一轮之后,日常的工作状态确实舒服了不少。终端里翻文件有实时预览,diff 看着不费眼,录屏不用担心风扇,开会也不用手动开降噪。都是些小事,但叠在一起,整体的流畅感还是能感知到的。

参考资料
#

相关文章

从进程视角重新理解 Docker

·3809 字·8 分钟
起因 # 第一次接触 Docker 是 2017 年,在深圳网警机房驻场做审核项目。机房完全没有外网,模型、依赖、运行环境全靠 U 盘拷贝 docker image 来传输。后来做模型转换系统,再到量化行业负责机器学习平台,和 Docker、K8s 打了不少交道。但距离上一次系统梳理 namespace、cgroup 这些底层机制,已经过去好几年了。