6.6.使用 Xwayland

在安装 Wayland 时,除非 Wayland 是在没有 X11 支持的情况下构建的,否则 Xwayland 二进制文件应该已经安装。如果 /usr/local/bin/Xwayland 文件不存在,请使用以下命令安装它:

# pkg install xwayland

注意

推荐使用 Xwayland 的开发版本,并且它很可能与 Wayland 包一起安装。每个合成器都有启用或禁用此功能的方法。

安装 Xwayland 后,需要在所选合成器中进行配置。对于 Wayfire,在 wayfire.ini 文件中需要添加以下行:

xwayland = true

对于 Sway 合成器,Xwayland 应该默认启用。即使如此,建议手动在 ~/.config/sway/config 中添加以下配置行:

xwayland enable

最后,对于 Hikari,不需要做任何更改。默认情况下,Xwayland 的支持已内建。如果需要禁用该支持,可以从 Ports 重新构建该包,并在此时禁用 Xwayland 支持。

完成这些更改后,启动合成器并通过键绑定执行一个终端。在此终端中,执行 env 命令并搜索 DISPLAY 变量。如果合成器能够正确启动 Xwayland X 服务器,则这些环境变量应该类似于以下内容:

% env | grep DISPLAY
WAYLAND_DISPLAY=wayland-1
DISPLAY=:0

在此输出中,显示了默认的 Wayland 显示器和为 Xwayland 服务器设置的显示器。验证 Xwayland 是否正常工作的另一种方法是安装并测试一个小的包:[x11/eyes],并检查输出。如果 xeyes 应用程序启动并且眼睛跟随鼠标指针,则说明 Xwayland 正常工作。如果出现如下错误,说明在 Xwayland 初始化期间发生了问题,可能需要重新安装:

Error: Cannot open display wayland-0

警告

Wayland 的一个安全特性是,在没有运行 X 服务器的情况下,不会有其他网络监听程序。待启用 Xwayland,此安全特性不再适用于系统。

对于某些合成器,如 Wayfire,Xwayland 可能无法正确启动。因此,env 会显示以下 DISPLAY 环境变量信息:

% env | grep DISPLAY
DISPLAY=wayland-1
WAYLAND_DISPLAY=wayland-1

尽管已经安装并配置了 Xwayland,X11 应用程序仍然无法启动,并会出现显示问题。为了解决这个问题,需要验证是否已经有一个通过 UNIX 套接字运行的 Xwayland 实例。首先,检查 sockstat 的输出并搜索 X11-unix:

% sockstat | grep x11

输出应该类似于以下信息:

trhodes  Xwayland   2734  8  stream /tmp/.X11-unix/X0
trhodes  Xwayland   2734  9  stream /tmp/.X11-unix/X0
trhodes  Xwayland   2734  10 stream /tmp/.X11-unix/X0
trhodes  Xwayland   2734  27 stream /tmp/.X11-unix/X0_
trhodes  Xwayland   2734  28 stream /tmp/.X11-unix/X0

这表明存在一个 X11 套接字。可以进一步通过在合成器下的终端仿真器中尝试手动执行 Xwayland 来验证这一点:

% Xwayland

如果已经有一个 X11 套接字可用,用户会看到以下错误:

(EE)
Fatal server error:
(EE) Server is already active for display 0
	If this server is no longer running, remove /tmp/.X0-lock
	and start again.
(EE)

由于已经有一个活跃的 X 显示器(显示号为 0),因此环境变量设置不正确。要修复此问题,可以将 DISPLAY 环境变量更改为 :0 并重新尝试执行该应用程序。以下示例使用 mail/claws-mail 作为需要 Xwayland 服务的应用程序:

export DISPLAY=:0

做出此更改后,mail/claws-mail 应用程序应该能够使用 Xwayland 启动并按预期工作。

最后更新于