乱评这几年出现的现代终端以及 Wayland 桌面

talking about modern terminal emulators on wayland

zping

terminalwaylandweztermfootkittyalacrittyghostty

932 字

2025-04-27 19:01 +0000


这篇很主观,乱评一下这几年新出现的一些终端。这一批新型的虚拟终端,特点就是实现显卡加速提高输出性能,算得上是当前比较时髦的东西。

当然,各平台下默认的虚拟终端,像 Wayland/footKDE/kconsole 这些,已经可以满足我的需求,我仅仅是在赶时髦。

我在写这篇之前,已经试过了三个。分别是 alacritty, kittywezterm 。前两个对输入法支持非常诡异。我一开始就放弃了。

最后一个 wezterm 是一直在用的。它有很多奇怪的功能,比如在终端下显示图片。只是这几年我都是在用最基本的功能,自然不会用它查看图片。

但在最近因为切换到了 Wayland 下面,发现也存在输入上的问题。

https://github.com/wezterm/wezterm/issues/4504

我遇到的情况有点不一样。被触发后,会无限重复最后一次输入的字符。

我既然决定迁移到 Wayland 自然只能考虑稳定性问题,于是专门探究了一下这个事情。我现在的判断是出现这些问题本身涉及到 Wayland 的实现,或者是打包过程中像对环境变量或其它 shell/stty 相关的配置。但在这个过程中,我感受到像 wezterm 这类项目的规模对于一个人来说确实有点大。 kitty 也有这个问题。其对输入法的支持之所以迟缓也是这个原因。

最后还剩下一个 Ghostty ,专门去看了一下,它介绍自己的一个点也是用户界面是直接使用平台原生组件,这个的实现思路总体上要保守许多。只有在具体实现时用了现代的 zig 。除了架构在的因素,功能上也相对简单,比如说不像 wezterm 那样支持终端多路复用( terminal multiplexer )。代码的规模确实少了不少。

这两天试了一下,第一个让人印象不错的是它的 ghostty +list-themes 功能。

当然,这并不是说 ghostty 没有缺点。正因为它的设计目标就是使用原生组件,而在 Linux 下它使用的是 GTK/libadwaita 。它的一个我比较喜欢的功能,复制时提示成功复制到剪切板,正是通过 adwaita 实现的。如果你在启动时设置了 gtk-adwaita=false 这个功能就没有了。而如果熟悉的话,就会知道 adwaita 早年间不怎么支持定制主题。结果这次我就遇到了一个类似的奇怪问题,它绘制的鼠标样式并不是我设置的样式,甚至大小都不一样。照理它应该是直接调 GLFW 绘制鼠标,不应该出现这类现象。而实际上,我查了一下,这个事不光我遇过了。看下面的链接,之前已经有其它人也遇到了类似的情形。

https://github.com/ghostty-org/ghostty/issues/2556

https://github.com/ghostty-org/ghostty/discussions/7205

后来我通过设置环境变量 GDK_BACKEND=x11 绕开了这一问题。

最后,我好像发现,写了这么多,似乎 Wayland 的锅更多和虚拟终端本身似乎没有什么关系。当然,这也是跨多平台的应用的一个大问题。在一些略小众一些的平台上,比如说 Wayland 这类问题可能会被不同的人在不同的场景下反复遇到。