> For the complete documentation index, see [llms.txt](https://handbook.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://handbook.bsdcn.org/di-6-zhang-freebsd-zhong-de-wayland/6.2.-wayland-gai-shu.md).

# 6.2.Wayland 概述

Wayland 是一种通信协议，可以替代 Xorg 等显示服务器。它与 Xorg 在多个重要方面有所不同。

首先，Wayland 只是一个协议，它通过某种机制在客户端之间充当中介，从而去除了对 X 服务器的依赖。Xorg 同时包含 X11 协议（用于运行远程显示）和 X 服务器（用于接受连接并显示窗口）。而在 Wayland 下，合成器或窗口管理器提供显示服务器，而不是传统的 X 服务器。

由于 Wayland 不是 X 服务器，传统的 X 屏幕连接需要使用其他方法，如 VNC 或 RDP 管理远程桌面。其次，Wayland 可以作为独立实体管理客户端与合成器之间的复合通信，而无需支持 X 协议。

Wayland 相对较新，并不是所有软件都已更新为原生运行而无需 `Xwayland` 支持。由于 Wayland 不提供 X 服务器，而是期望合成器提供该支持，因此尚未支持 Wayland 的 X11 窗口管理器需要以不带 `-rootless` 参数的方式启动 Xwayland。移除该参数后，即可恢复对 X11 窗口管理器的支持。

> **注意**
>
> 当前的 NVIDIA® 驱动程序应该能与大多数 wlroots 合成器兼容，但可能略显不稳定，且不支持所有功能。目前正在寻求志愿者协助开发 NVIDIA® DRM。

目前，许多软件在 Wayland 上运行时几乎没有问题，包括 Firefox。同时，也有一些桌面环境可供选择，如 Compiz Fusion 替代品 Wayfire 和 i3 窗口管理器替代品 Sway。

> **注意**
>
> 截至 2021 年 5 月，plasma5-kwin 已支持在 FreeBSD 上运行 Wayland。要在 Wayland 下使用 Plasma，请使用 `startplasma-wayland` 参数启动 `ck-launch-session`，并用以下命令关联 dbus：`dbus-launch --exit-with-x11 ck-launch-session startplasma-wayland`。

对于合成器，必须有支持 [evdev(4)](https://man.freebsd.org/cgi/man.cgi?query=evdev\&sektion=4\&format=html) 驱动程序的内核，才能利用按键绑定功能。默认情况下，**GENERIC** 内核已构建此支持；但是，如果内核经过定制并且去除了 [evdev(4)](https://man.freebsd.org/cgi/man.cgi?query=evdev\&sektion=4\&format=html) 支持，则需要加载 [evdev(4)](https://man.freebsd.org/cgi/man.cgi?query=evdev\&sektion=4\&format=html) 模块。此外，Wayland 用户需要成为 `video` 组的成员。要快速更改此设置，请使用 `pw` 命令：

```sh
pw groupmod video -m user
```

安装 Wayland 非常简单；该协议本身不需要太多配置。大多数合成工作将取决于所选的合成器。现在安装 `seatd`，可以跳过合成器安装和配置中的一个步骤，因为 `seatd` 用于提供对某些设备的非 root 访问权限。

所有此处说明的合成器都应该能与 [graphics/drm-kmod](https://cgit.freebsd.org/ports/tree/graphics/drm-kmod/) 开源驱动程序兼容；但是，使用专有驱动程序时，NVIDIA® 显卡可能会遇到一些问题。首先安装以下软件包：

```sh
# pkg install wayland seatd
```

安装完协议和支持软件包后，需要安装合成器来创建用户界面。以下部分将介绍几种合成器。所有使用 Wayland 的合成器都需要在环境中定义运行时目录。自 FreeBSD 14.1 以来，这已自动创建和定义。对于较早的版本，可以通过以下命令在 Bourne shell 中创建此目录：

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

需要注意的是，大多数合成器会在 `XDG_RUNTIME_DIR` 目录中搜索配置文件。在此处的示例中，将使用参数来指定配置文件路径为 **\~/.config**，以保持临时文件和配置文件的分离。建议为每个合成器配置别名，以加载指定的配置文件。

> **警告**
>
> 有报告称，ZFS 用户可能会遇到一些 Wayland 客户端的问题，因为它们需要访问运行时目录中的 `posix_fallocate()`。虽然作者无法在其 ZFS 系统上重现此问题，但推荐的做法是不使用 ZFS 作为运行时目录，而是使用 `tmpfs` 来挂载 **/var/run** 目录。此时，可通过命令 `mount -t tmpfs tmpfs /var/run` 挂载 `tmpfs` 文件系统，再通过 **/etc/fstab** 配置使此更改在重启后生效。可将 `XDG_RUNTIME_DIR` 环境变量配置为使用 **/var/run/user/$UID**，以避免 ZFS 相关问题。查看以下配置示例时请注意此问题。

`seatd` 守护进程有助于管理合成器中对共享系统设备的非 root 用户访问，包括显卡。对于传统的 X11 管理器，如 Plasma 和 GNOME，`seatd` 并不需要；但是，对于此处讨论的 Wayland 合成器，需要在系统上启用并在启动合成器环境之前运行。要现在启用并启动 `seatd` 守护进程，并确保在系统初始化时也启用：

```sh
# sysrc seatd_enable="YES"
# service seatd start
```

接下来，需要为 GUI 环境安装合成器，它类似于 X11 桌面。以下部分将讨论三种合成器，包括基本配置选项、屏幕锁定设置和更多信息的推荐。
