从 Xorg 迁移到 Wayland

迁移到 Sway 之前,我是 i3-gaps 用户,不用 GNOME / KDE 等 DE 的原因是不管我怎么配置,它们总有些瑕疵让我用得很难受,于是我干脆去用 i3-gaps 这种简单的 WM

迁移的动机

我之前就看到过 Are we Wayland yet? | Samuel Walladge,作者和我一样是 i3 用户,尝试 Sway 之后还是回到了 i3,他(她?)列出的 dealbreakers 如下:

  1. 屏幕录制和屏幕分享的程序跑不起来,用 Zoom 分享屏幕时只会分享一个空白屏幕。

  2. 有时 Sway 会在锁屏时崩溃,然后回到登录时的 tty,这是安全隐患。

对我来说,这些 dealbreakers 不算什么问题,所以当时就有迁移的打算(之后咕咕咕了)。

最近几天,我又看到了 It's Time To Admit It: The X.Org Server Is Abandonware - Phoronix,这才找时间换到 Sway。

背景信息

我使用的笔记本配置如下:

  • CPU: AMD Ryzen 7 4800U
  • GPU: AMD Vega 8 (核显)
  • 屏幕: 14寸 60Hz 16:9 1080P

所以驱动、缩放应该不是问题。

我在 Xorg 下常用的部分程序如下:

  • Windows Manager: i3-gaps
  • Bar: polybar
  • Program Launcher: rofi
  • Wallpaper: feh
  • Compositor: picom
  • Notification Daemon: dunst
  • Brightness Control: brightnessctl
  • Screenlocker: betterlockscreen
  • Screenshoter: maim
  • Input Method: fcitx5
  • Web Browser: chromium, firefox
  • File Manager: thunar, ranger
  • File Editor: neovim, vscodium
  • Image Viewer: imv
  • Music Player: deadbeef, spotify
  • Video Player: mpv
  • Instant Messaging: telegram-desktop
  • Terminal Emulator: alacritty

个人体验

优点

1. 我就感觉到快

从 tty 输入 exec sway 到进入桌面耗时不到 1s,而从 tty 输入 sudo systemctl start lightdm.service 进入桌面耗时接近 2s。日常使用 Sway 时未出现过卡顿、未响应等情况(除非正在编译 chromium),而之前使用 i3-gaps 时偶尔会出现屏幕冻结现象,键盘、鼠标操作都没有响应,这时候只能长按电源键重启(幸好没有因为这个丢过文件)。

2. 没有画面撕裂

在 Sway 下切换 workspace 或窗口布局时不会有任何画面撕裂; Xorg 下如果不开 picom 之类的 compositor 画面撕裂就很常见,而我又用不上 picom 的那些窗口装饰(圆角、透明、模糊、阴影、渐变等),开 picom 总有些大才小用的感觉。

3. 软件生态尚可

上文列出了一些我在 Xorg 下常用的程序,根据 i3 Migration Guide 进行选择性的替换之后,没有任何程序既不能在 Wayland(已开启 XWayland)下工作,也没有 Wayland 原生替代品。也就是说,我没有因为使用 Wayland 而放弃某些程序带给我的便利。

4. 软件开发积极

我用的 SwayWaybarWofi 都在活跃开发中。Sway 的开发者可能对没有认真读 Wiki 就发 Issue 的人不太客气,除此之外,他们还是很友善的。

5. 简洁

用了 Sway 之后,不用再维护 LightDM、Xorg 在 /etc 下的配置文件,这让迁移配置变得简单很多。同时,我再也不需要读 man picom 来弄清楚怎么配置 picom 了。

缺点

1. fcitx5 选字框错位

任何原生运行在 Wayland 下的程序要么不能用 fcitx5 打字(alacrittychromium-ozone),要么在特定情况下选字框会错位(telegram-desktop、加了 MOZ_ENABLE_WAYLAND=1firefox),而运行在 XWayland 下的程序完全正常。

GNOME 似乎自己搞了什么黑魔法,GNOME on Wayland 下 fcitx5 的选字框完全正常。

2. 用户不够多

运行在 X11 下的 Polybar 有丰富的主题,还有大量用户贡献的脚本;Wayland 下的 Waybar 则远没有这么繁荣。

同样地,运行在 X11 下的 Rofi 也有丰富的主题,Wayland 下的 Wofi 也是没有这么繁荣。

可能有人会说就算没有这种周边资源,把 Waybar 和 Wofi 配置成想要的样子也花不了多长时间。Waybar 使用 JSON 格式的配置文件和 CSS 格式的样式文件;Wofi 则是简单的 「key = value」配置文件和 CSS 格式的样式文件,如果熟悉 CSS,配置就不是问题。但是,这些周边资源降低了门槛,能让更多的人使用 Waybar / Wofi ,有更多人使用就意味着有更多 bug report、feature request 和 pull request,这些都能促进项目的发展。

3. XWayland 性能损失

这个主要体现在游戏方面:目前能原生运行在 Wayland 下的游戏很少,而用 XWayland 运行游戏则会有一定性能损失。在我的机器上,当关闭 Minecraft 的垂直同步和帧数限制,其它设置保持默认时,Minecraft 在 Xorg(i3-gaps)下能稳定在 90 FPS,而在 XWayland(Sway)下只能稳定在 80 FPS。

4. 硬件视频加速

mpvfirefox 支持启用硬件视频加速,而 chromium 不支持[1]。使用 chromium 播放 YouTube 4K 视频时,CPU 占用接近 30%;而在开启硬件加速的 firefox 上播放时 CPU 占用只有 7%。

5. 其它 bug

以下是我在迁移到 Wayland 后遇到的一些 bug,这个列表可能会持续更新。

  1. Can't move tabs under Chrome - XWayland if another XWayland application is open in another workspace
  2. Browser scrolling lag when playing video in unfocused workspace.
  3. Issue 896640: [ozone/wayland] Add tab drag support (chromium-ozone 不能用鼠标拖动标签,拖动书签的功能也不完善。)
  4. VAAPI: Green screen on Youtube video when changing tabs

总结

Xorg 开发停滞,最新的大版本 1.20 发布于2018年5月10日[2],而 Xorg 本身的设计也不适合现在的计算机[3]。目前,Wayland 是 Xorg 唯一可行的继承者,尽管它现在仍然处于开发中,但是对于一些人来说, Wayland 已经足够好了。

更新日志

2020-11-21

  1. 更新遇到 bug 的列表,添加第 3 条。
  2. 调整措辞,修复 typo。

2020-11-23

  1. 更新遇到 bug 的列表,添加第 4 条。

  1. https://wiki.archlinux.org/index.php/Hardware_video_acceleration#Application_support 

  2. https://en.wikipedia.org/wiki/X.Org_Server#Releases 

  3. https://www.x.org/wiki/Development/X12/