乱评这几年出现的现代终端以及 Wayland 桌面
talking about modern terminal emulators on wayland
zping
terminalwaylandweztermfootkittyalacrittyghostty
932 字
2025-04-27 19:01 +0000
这篇很主观,乱评一下这几年新出现的一些终端。这一批新型的虚拟终端,特点就是实现显卡加速提高输出性能,算得上是当前比较时髦的东西。
当然,各平台下默认的虚拟终端,像 Wayland/foot
和 KDE/kconsole
这些,已经可以满足我的需求,我仅仅是在赶时髦。
我在写这篇之前,已经试过了三个。分别是 alacritty
, kitty
和 wezterm
。前两个对输入法支持非常诡异。我一开始就放弃了。
最后一个 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
这类问题可能会被不同的人在不同的场景下反复遇到。