> 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 桌面。以下部分将讨论三种合成器，包括基本配置选项、屏幕锁定设置和更多信息的推荐。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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.
