# 6.2.Wayland 概述

Wayland 是一种新的显示服务器，它与 Xorg 在多个重要方面有所不同。

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

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

Wayland 相对较新，并不是所有软件都已更新为原生运行而无需 `Xwayland` 支持。由于 Wayland 不提供 X 服务器，并期望合成器提供该支持，因此尚未支持 Wayland 的 X11 窗口管理器将要求 `Xwayland` 在没有 `-rootless` 参数的情况下启动。移除 `-rootless` 参数后，将恢复 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` 需要提供对某些设备的非根访问权限。

所有此处描述的合成器都应该能够与 [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` 守护进程有助于管理合成器中对共享系统设备的非根用户访问，包括显卡。对于传统的 X11 管理器，如 Plasma 和 GNOME，`seatd` 并不需要；但是，对于此处讨论的 Wayland 合成器，它将在系统中启用并在启动合成器环境之前运行。要现在启用并启动 `seatd` 守护进程，并确保在系统初始化时也启用：

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

接下来，需要安装一个合成器来为图形环境创建用户界面。以下部分将讨论三种合成器，包括基本配置选项、屏幕锁定设置和更多信息的推荐。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://handbook.bsdcn.org/di-6-zhang-freebsd-zhong-de-wayland/6.2.-wayland-gai-shu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
