Wayland 是一个用于 混成窗口管理器 与其客户端对话的协议,也是一个实现该协议的库。GNOME 和 KDE Plasma 等一些桌面环境支持 Wayland。它还有一个混成器实现参考叫做 Weston。Xwayland 则提供了一个兼容层,来让以前的 X11 应用程序能在 Wayland 中运行。
目前 Wayland 只能在使用了 KMS 的系统上工作。Wayland 本身并不提供图形环境;为此还需要安装混成器(比如 Weston 或 Sway),或者内置混成器的桌面环境,比如 GNOME 或 KDE。
为了使 GPU 驱动程序和 Wayland 混成器兼容,它们必须支持相同的缓冲器 API(Buffer API)。现在主要有两种 API:GBM 和 EGLStreams.
上述某些混成器/窗户管理器支持 显示管理器。请检查 /usr/share/wayland-sessions/compositor.desktop
文件看它们如何启动。
下面列出的显示管理器均支持 Wayland 混成器。“类型”列指明了显示管理器是否支持在 Wayland 上运行。
名称 | 类型 | 描述 |
---|---|---|
GDM | 在 Wayland 上运行 | GNOME 的显示管理器。 |
greetd | 登录守护程序 | 小巧且灵活的登录守护程序。 |
LightDM | 在 X11 上运行 | 跨桌面显示管理器。 |
Ly | 在控制台中运行 | 用 C 语言编写的 TUI 显示管理器。 |
SDDM | 在 X11 上 | 基于 QML 开发的显示管理器。 |
tbsm | 在控制台中运行 | 用纯 Bash 编写的简单 CLI 会话启动器。 |
详情请查看 官方网站。
gtk3 软件包已经提供了 Wayland 支持。GTK 会默认使用 Wayland 后端,但是可以通过修改环境变量为 GDK_BACKEND=x11
覆盖设置将其切换到 Xwayland。
要在 Qt 5 中启用 Wayland 支持,请安装 qt5-wayland 软件包。
要搭配 Wayland 插件一起运行 Qt 5 应用程序[5],请使用 -platform wayland
或 QT_QPA_PLATFORM=wayland
环境变量;要强制在 Wayland 会话中使用 X11,则使用 QT_QPA_PLATFORM=xcb
。后者对于某些不使用系统 Qt 实现的应用(比如 zoomAUR),可能是必需的。
像 sway 这样的一些混成器,本机运行的 Qt 程序可能会有一些功能缺失。例如,KeepassXC 会无法最小化到托盘。通过安装 qt5ct 并在程序运行前设定好 QT_QPA_PLATFORMTHEME=qt5ct
环境变量,可以解决这一问题。
Clutter 工具包有 Wayland 后端支持,可以作为 Wayland 客户端运行。这一后端支持已在官方软件包 clutter 中启用。
要在 Wayland 上运行 Clutter 应用,请设定 CLUTTER_BACKEND=wayland
环境变量。
要在 Wayland 上运行 SDL 应用,请设定 SDL_VIDEODRIVER=wayland
环境变量。
SDL_VIDEODRIVER=wayland
环境变量还可能会导致游戏运行完全中断。要强制应用在 XWayland 上运行,请设定
SDL_VIDEODRIVER=x11
环境变量。
要在 Wayland 后端上使用 GLFW,请安装 glfw-wayland 软件包(而不是 glfw-x11)。
要在 Wayland 后端上使用 GLEW,请安装 glew-wayland 软件包(而不是 glew)。
EFL 已经完全支持 Wayland。要在 Wayland 上运行 EFL 应用,请参阅 Wayland 项目页面。
Winit 是 Rust 语言中的窗口处理库。其默认使用 Wayland 后端,但是可以通过修改环境变量为 WINIT_UNIX_BACKEND=x11
覆盖设置将其切换到 Xwayland。
请参阅 Backlight#Color correction。
Gnome-shell 用户从 X 切换到 Wayland 时可能会遇到这样的问题。根本原因之一是可能用户自己为基于 Xorg 的 gnome-shell 设置了 CLUTTER_PAINT=disable-clipped-redraws:disable-culling
变量。只需尝试将变量从 /etc/environment
或其它 rc 文件中移除,即可查看是否一切恢复正常。
请确保没有设定 GDK_BACKEND=wayland 变量。将此变量应用到全局会使 Electron 应用中断运行。
与 Xorg 相比,Wayland 并不允许独占输入设备捕获、也被称为主动捕获或显式捕获 (比如 键盘、鼠标 等设备)。相反,Wayland 依赖 Wayland 混成器传递键盘快捷键,并将指针设备限定在应用窗口中。
输入捕获方式的变化破坏了当前应用程序的行为,意味着:
Wayland 通过为 Wayland 和 XWayland 添加协议扩展来解决此问题。为此 Wayland 混成器需要添加对这些扩展的支持。如果是本地 Wayland 客户端,其使用的部件工具集 (widget toolkits,比如 GTK,Qt) 需要支持这些插件;如果没有使用部件工具集,则需要支持应用程序本身。如果是 Xorg 应用程序,则不需要改变应用程序或者部件工具集,因为 Xwayland 的支持就足够了。
wayland-protocols 中已经包含了这些扩展, 并由 xorg-server-xwayland[断开的链接:replaced by xorg-xwayland] 1.20 支持。
相关的扩展有:
支持的 Wayland 混成器有:
支持的部件工具集有: