Wayland (简体中文)
Wayland 是一个用于 混成窗口管理器 与其客户端对话的协议,也是一个实现该协议的库。GNOME 和 KDE Plasma 等一些桌面环境支持 Wayland。它还有一个混成器实现参考叫做 Weston。Xwayland 则提供了一个兼容层,来让以前的 X11 应用程序能在 Wayland 中运行。
系统需求
目前 Wayland 只能在使用了 KMS 的系统上工作。Wayland 本身并不提供图形环境;为此还需要安装混成器(比如 Weston 或 Sway),或者内置混成器的桌面环境,比如 GNOME 或 KDE。
为了使 GPU 驱动程序和 Wayland 混成器兼容,它们必须支持相同的缓冲器 API(Buffer API)。现在主要有两种 API:GBM 和 EGLStreams.
| Buffer API | GPU 驱动支持 | Wayland 混成器支持 |
|---|---|---|
| GBM | 全部 (除了 NVIDIA < 495*) | 全部 |
| EGLStreams | NVIDIA | GNOME, KDE,Weston (需要第三方补丁) |
- 要使用 GBM 作为后端, 设置下面的 环境变量:
GBM_BACKEND=nvidia-drm __GLX_VENDOR_LIBRARY_NAME=nvidia
混成器(窗户管理器)
平铺式
- Cagebreak — Cagebreak 是一款基于 Cage 并受 Ratpoison 启发开发的 Wayland 混成器。
- river — 是一款受 dwm 和 bspwm 启发开发的动态平铺 Wayland 混成器。
- Orbment — (曾用名 loliwm) 是一款自由无约束的 Wayland 平铺窗户管理器。
- https://github.com/Cloudef/orbment || orbment-gitAUR[损坏的链接:package not found]
堆叠式
- Grefsen — 是一款提供最精简桌面环境的 Qt/Wayland 混成器。
- Liri Shell — 是 Liri 一部分,其使用 QtQuick 和 QtCompositor 为 Wayland 构建。
显示管理器
下面列出的显示管理器均支持 Wayland 混成器。“类型”列指明了显示管理器是否支持在 Wayland 上运行。
| 名称 | 类型 | 描述 |
|---|---|---|
| GDM | 在 Wayland 上运行 | GNOME 的显示管理器。 |
| greetd | 登录守护程序 | 小巧且灵活的登录守护程序。 |
| LightDM | 在 X11 上运行 | 跨桌面显示管理器。 |
| Ly | 在控制台中运行 | 用 C 语言编写的 TUI 显示管理器。 |
| SDDM | 在 X11 上 | 基于 QML 开发的显示管理器。 |
| tbsm | 在控制台中运行 | 用纯 Bash 编写的简单 CLI 会话启动器。 |
图形库
详情请查看 官方网站。
GTK
gtk3 和 包已经提供了 Wayland 支持。GTK 会默认使用 Wayland 后端,但是可以通过修改环境变量为 覆盖设置将其切换到 Xwayland。
Qt 5
要在 Qt 5 中启用 Wayland 支持,请安装 软件包。
要搭配 Wayland 插件一起运行 Qt 5 应用程序,请使用 或 QT_QPA_PLATFORM=wayland 环境变量;要强制在 Wayland 会话中使用 X11,则使用 。后者对于某些不使用系统 Qt 实现的应用(比如 ),可能是必需的。
像 sway 这样的一些混成器,本机运行的 Qt 程序可能会有一些功能缺失。例如,KeepassXC 会无法最小化到托盘。通过安装 并在程序运行前设定好 环境变量,可以解决这一问题。
Clutter
Clutter 工具包有 Wayland 后端支持,可以作为 Wayland 客户端运行。这一后端支持已在官方软件包 中启用。
要在 Wayland 上运行 Clutter 应用,请设定 环境变量。
SDL
要在 Wayland 上运行 SDL 应用,请设定 环境变量。
GLFW
要在 Wayland 后端上使用 GLFW,请安装 glfw-wayland 软件包(而不是 )。
GLEW
要在 Wayland 后端上使用 GLEW,请安装 软件包(而不是 )。
EFL
EFL 已经完全支持 Wayland。要在 Wayland 上运行 EFL 应用,请参阅 Wayland 项目页面。
winit
Winit 是 Rust 语言中的窗口处理库。其默认使用 Wayland 后端,但是可以通过修改环境变量为 WINIT_UNIX_BACKEND=x11 覆盖设置将其切换到 Xwayland。
故障排除
颜色校正
慢动作、图形显示故障和崩溃
Gnome-shell 用户从 X 切换到 Wayland 时可能会遇到这样的问题。根本原因之一是可能用户自己为基于 Xorg 的 gnome-shell 设置了 变量。只需尝试将变量从 或其它 rc 文件中移除,即可查看是否一切恢复正常。
无法在 display: :0 打开 Electron 应用
请确保没有设定 GDK_BACKEND=wayland 变量。将此变量应用到全局会使 Electron 应用中断运行。
远程显示
- (20200206) (sway 使用) 自 0.10 版本通过 提供了一个 VNC 后端。RDP 后端则已被移除。 .
- (20180401) 当前在编译时就启用了远程桌面功能,详情请参阅 和 gnome-remote-desktop。
- FreeRDP 在 2013 年合并入了 Weston,通过编译标志 (compile flag) 启用。 自 6.0.0 版本启用了 FreeRDP。
- 是适用于 Wayland 应用的透明代理,可通过内封装的命令在 SSH 上运行。
游戏、远程桌面和虚拟机窗口中的输入捕获问题
与 Xorg 相比,Wayland 并不允许独占输入设备捕获、也被称为主动捕获或显式捕获 (比如 键盘、鼠标 等设备)。相反,Wayland 依赖 Wayland 混成器传递键盘快捷键,并将指针设备限定在应用窗口中。
输入捕获方式的变化破坏了当前应用程序的行为,意味着:
- 热键组合和修饰符输入会被混成器捕获,并且不会发送到远程桌面和虚拟机窗口中。
- 鼠标指针将不会被限制在应用程序的窗口中,这可能会导致视差效应,即虚拟机或远程桌面的窗口内鼠标指针的位置与主机的鼠标指针发生偏差。
Wayland 通过为 Wayland 和 XWayland 添加协议扩展来解决此问题。为此 Wayland 混成器需要添加对这些扩展的支持。如果是本地 Wayland 客户端,其使用的部件工具集 (widget toolkits,比如 GTK,Qt) 需要支持这些插件;如果没有使用部件工具集,则需要支持应用程序本身。如果是 Xorg 应用程序,则不需要改变应用程序或者部件工具集,因为 Xwayland 的支持就足够了。
中已经包含了这些扩展, 并由 1.20 支持。
相关的扩展有:
支持的 Wayland 混成器有:
支持的部件工具集有:
- GTK,从 3.22.18 版本开始支持。
另请参阅
- Fedora Wiki 上有关 Wayland 开发调试的文章
- 光标主题
- Arch Linux 论坛讨论(页面将持续关注 Wayland 信息 ,如有兴趣请留意)
- Wayland 在线文档
- 绝赞 Wayland 项目