6.5.使用 Xwayland
=================

安装 Wayland 时,应该已经安装了 ``Xwayland`` 二进制文件,除非是在没有 X11 支持的情况下编译的 Wayland。如果不存在 **/usr/local/bin/Xwayland** 这个文件,请使用以下命令安装 Xwayland:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   # pkg install xwayland-devel

..

   **注意**

   推荐使用 Xwayland 的开发版本,并且应该与 Wayland 软件包一起安装。每个混成器都有一种启用或禁用此功能的方法。

安装 ``Xwayland`` 后,在所选混成器中对其进行配置。对于 Wayfire,\ **wayfire.ini** 文件中需要以下行:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   xwayland = true

对于 Sway 混成器,应默认启用 ``Xwayland``\ 。尽管如此,还是建议在 **~/.config/sway/config** 中手动添加配置行,如下所示:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   xwayland enable

最后,对于 Hikari,不需要进行任何更改。默认情况下内置了对 ``Xwayland`` 的支持。要禁用该支持,请使用 ports 重新编译软件包并在那时禁用 Xwayland support。

进行这些更改后,在命令行启动混成器并使用快捷键运行终端。在此终端中,执行 ``env`` 命令并搜索 ``DISPLAY`` 变量。如果混成器能够正确启动 Xwayland X 服务器,输出的环境变量应该类似于以下内容:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   % env | grep DISPLAY

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   WAYLAND_DISPLAY=wayland-1
   DISPLAY=:0

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

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   Error: Cannot open display wayland-0

..

   **警告**

   Wayland 的一个安全特性是,在没有运行 X 服务器的情况下,没有其他的网络监听器。启用 ``Xwayland`` 后,此安全功能将不再适用于该系统。

对于某些混成器,例如 Wayfire,可能无法正常启动 ``Xwayland``\ 。因此,\ ``env`` 将显示关于环境变量 ``DISPLAY`` 的如下信息:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   % env | grep DISPLAY

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   DISPLAY=wayland-1
   WAYLAND_DISPLAY=wayland-1

有时即使安装并配置了 ``Xwayfire``\ ,X11 应用程序也不能运行并出现显示问题。要解决此问题,请通过这两种方法验证是否已经存在使用 UNIX 套接字的 ``Xwayland`` 实例。首先,检查 ``sockstat`` 的输出并搜索 X11-unix:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   % sockstat | grep x11

应该有类似于以下信息的内容:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   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`` 来进一步验证:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   % Xwayland

如果 X11 套接字已经可用,则应向用户显示以下错误:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   (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)

由于使用显示 0 的活动 X 显示,环境变量设置不正确,要解决此问题,请将 ``DISPLAY`` 环境变量更改为 ``:0`` 并尝试再次执行应用程序。以下示例使用 `mail/claws-mail <https://cgit.freebsd.org/ports/tree/mail/claws-mail/pkg-descr>`__ 作为需要 ``Xwayland`` 服务的应用程序:

.. raw:: latex

   \diilbookstyleinputcell

.. code:: shell-session

   export DISPLAY=:0

在此更改之后,\ `mail/claws-mail <https://cgit.freebsd.org/ports/tree/mail/claws-mail/pkg-descr>`__ 应用程序现在应该开始使用 ``Xwayland`` 并按预期运行。