Wayland (简体中文)

Wayland 是一个用于 混成窗口管理器 与其客户端对话的协议,也是一个实现该协议的库。GNOMEKDE Plasma 等一些桌面环境支持 Wayland。它还有一个混成器实现参考叫做 Weston。Xwayland 则提供了一个兼容层,来让以前的 X11 应用程序能在 Wayland 中运行。

翻译状态:本文是 Wayland翻译。上次翻译日期:2020-08-08。如果英文版本有所更改,则您可以帮助同步翻译。

系统需求

目前 Wayland 只能在使用了 KMS 的系统上工作。Wayland 本身并不提供图形环境;为此还需要安装混成器(比如 WestonSway),或者内置混成器的桌面环境,比如 GNOMEKDE

为了使 GPU 驱动程序和 Wayland 混成器兼容,它们必须支持相同的缓冲器 API(Buffer API)。现在主要有两种 API:GBMEGLStreams.

Buffer APIGPU 驱动支持Wayland 混成器支持
GBM全部 (除了 NVIDIA < 495*)全部
EGLStreamsNVIDIAGNOME, KDE,Weston (需要第三方补丁)
* NVIDIA驱动版本 ≥ 495 同时支持 EGLStreams 和 GBM ..
要使用 GBM 作为后端, 设置下面的 环境变量:
GBM_BACKEND=nvidia-drm
__GLX_VENDOR_LIBRARY_NAME=nvidia

混成器(窗户管理器)

平铺式

  • Cagebreak Cagebreak 是一款基于 Cage 并受 Ratpoison 启发开发的 Wayland 混成器。
https://github.com/project-repo/cagebreak || cagebreakAUR cagebreak-binAUR
  • river 是一款受 dwm 和 bspwm 启发开发的动态平铺 Wayland 混成器。
https://github.com/ifreund/river || river-gitAUR
  • Orbment (曾用名 loliwm) 是一款自由无约束的 Wayland 平铺窗户管理器。
https://github.com/Cloudef/orbment || orbment-gitAUR[损坏的链接:package not found]
  • Sway 是一款和兼容 i3 的 Wayland 窗口管理器。
https://github.com/swaywm/sway || sway

堆叠式

  • Grefsen 是一款提供最精简桌面环境的 Qt/Wayland 混成器。
https://github.com/ec1oud/grefsen ||
  • Liri Shell Liri 一部分,其使用 QtQuick 和 QtCompositor 为 Wayland 构建。
https://github.com/lirios/shell || liri-shell-gitAUR

其它类型

  • Cage 显示单个全屏应用程序(就像自助取款机那样)。
https://www.hjdskes.nl/projects/cage/ || cage

上述某些混成器/窗户管理器支持 显示管理器。请检查 文件看它们如何启动。

显示管理器

下面列出的显示管理器均支持 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。

故障排除

颜色校正

请参阅 Backlight#Color correction

慢动作、图形显示故障和崩溃

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 混成器有:

  • Mutter,GNOME 的混成器(窗口管理器),从 3.28 版本 开始支持
  • wlroots 支持相对指针协议和指针约束协议

支持的部件工具集有:

  • GTK,从 3.22.18 版本开始支持。

另请参阅

This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.