6.1. Wayland 概述

Wayland 是一种支撑图形用户界面的新软件,但它在几个重要方面与 Xorg 有所不同。首先,Wayland 只是一种协议,充当客户端之间的中介,使用了不同的机制来消除对 X 服务器的依赖。Xorg 包含了 X11 协议,用于运行远程显示,X 服务器可接受连接并显示窗口。在 Wayland 下,显示服务器由混成器或窗口管理器提供而非传统的 X 服务器。

由于 Wayland 不是 X 服务器,需要利用其他方法才能实现传统的 X 屏幕连接(例如用 VNC 或 RDP 进行远程桌面管理)。其次,Wayland 可以将客户端和混成器之间的复合通信作为无需支持 X 协议的独立实体来管理。

Wayland 相对较新,并非所有软件都已更新为在没有 Xwayland 支持的情况下本地运行。因为 Wayland 不提供 X 服务器,并且期望混成器提供这种支持,所以尚不支持 Wayland 的 X11 窗口管理器需要不以 -rootless 参数启动 Xwayland。在删除 -rootless 参数后将恢复对 X11 窗口管理器支持。

注意

当前的 NVidia 驱动程序应该可以与大多数 wl-roots 混成器一起使用,但它可能有点不稳定并且目前不支持所有功能。请求志愿者帮助开发 NVidia DRM。

目前,很多软件都可以在 Wayland 上正常运行,包括 Firefox。还有一些桌面也可用,例如 Compiz Fusion 的替代品,名为 Wayfire,以及 i3 窗口管理器替代品——Sway。

注意

截至 2021 年 5 月,在 FreeBSD 中的 plasma5-kwin 可支持 Wayland。要在 Wayland 下使用 Plasma,请使用 startplasma-wayland 参数来 ck-launch-session,并将 dbus 与 :ck-launch-session dbus-run-session startplasma-wayland 匹配以使其工作。

对于混成器,必须有支持 evdev(4) 驱动程序的内核才能使用快捷键功能。这是默认内置在 GENERIC 内核中的;但是,如果它被自定义并且 evdev(4) 支持被移除,则需要加载 evdev(4) 模块。此外,Wayland 的用户需要是 video 组的成员。要快速进行此更改,请使用 pw 命令:

pw groupmod video -m user

安装 Wayland 很简单,协议本身没有太多的配置。大部分的组件取决于所选的混成器。下面安装的 seatd 可作为混成器安装和配置的通用步骤,使其省略一步,因为需要使用 seatd 来提供对某些设备的非 root 访问权限。此处说明的所有混成器都应与 graphics/drm-kmod 开源驱动程序一起使用;但是,NVidia 显卡在使用专有驱动程序时可能会出现问题。首先安装以下软件包:

# pkg install wayland seatd

在安装了协议和支持软件之后,混成器得创建用户界面。以下部分将介绍几个混成器。所有使用 Wayland 的混成器都需要在环境变量中定义一个运行时目录,这可以在 sh 中使用以下命令来实现:

% export XDG_RUNTIME_DIR=/var/run/user/`id -u`

需要注意的是,大多数混成器会在 XDG_RUNTIME_DIR 目录中搜索配置文件。在此处包含的示例中,将使用一个参数来指定 ~/.config 中的配置文件,以将临时文件和配置文件分开。建议为每个混成器配置一个别名来加载指定的配置文件。

警告

据报告,ZFS 用户可能会遇到一些 Wayland 客户端的问题,因为他们需要访问运行时目录中的 posix_fallocate()。虽然作者无法在他们的 ZFS 系统上重现此问题,但推荐的解决方法是不要将 ZFS 用于运行时目录,而是将 tmpfs 用于 /var/run 目录。在这种情况下,tmpfs 文件系统用于 /var/run 并通过命令 mount -t tmpfs tmpfs /var/run 命令挂载,然后通过 /etc/fstab 使此更改在重新启动后保持不变。XDG_RUNTIME_DIR 环境变量可以配置为使用 /var/run/user/$UID 以避免 ZFS 的潜在陷阱。在查看以下部分中的配置示例时,请考虑该场景。

守护进程 seatd 帮助管理混成器中非 root 用户访问共享系统设备,比如显卡。对于传统的 X11 管理器(例如 Plasma 和 GNOME)不需要 seatd,但对于此处讨论的 Wayland 混成器,它需要在系统上启用并在启动混成器环境之前运行。要立即启动 seatd 守护程序,并在系统初始化时自启:

# sysrc seatd_enable="YES"
# service seatd start

之后,需要为图形界面环境安装一个类似于 X11 桌面的混成器。这里讨论了三个,包括基本配置选项、设置屏幕锁定以及更多信息的建议。

最后更新于

FreeBSD 中文社区