第六章 FreeBSD上的Wayland6.1. 简介6.2. Wayland概述6.3. Wayfire合成器6.4. Hikari合成器6.5. Sway合成器6.6. 使用Xwayland6.7. 使用VNC的远程桌面6.8. Wayland登录管理器6.9. 实用工具
使用bsdinstall安装FreeBSD不会自动安装图形用户界面。本章介绍如何选择、安装和配置提供图形环境的Wayland合成器。
在阅读本章之前,您应该:
阅读本章后,你会知道:
Wayland是一种通信协议,可以取代Xorg等显示服务器。它在几个重要方面与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窗口管理器支持。
xxxxxxxxxx当前的NVIDIA®驱动程序应该适用于大多数wlroots合成器,但它可能有点不稳定,目前不支持所有功能。请志愿者帮助NVIDIA®DRM的工作。目前,许多软件在Wayland上运行时问题很小,包括Firefox。还有一些台式机可供选择,例如Compiz Fusion的替代品Wayfire和i3窗口管理器的替代品Sway。
xxxxxxxxxx截至2021年5月,plasma5-kwin确实支持FreeBSD上的Wayland。要在Wayland下使用Plasma,请使用startplasma-Wayland参数ck-launch-session,并将dbus与dbus-launch --exit-with-x11 ck-launch-seeeion startplasma-wayland绑定以使其工作。对于合成器,必须存在支持 evdev(4) 驱动程序的内核才能使用键绑定功能。默认情况下,这是内置在GENERIC内核中的;然而,如果已经对其进行了定制,并且删除了对 evdev(4) 的支持,则需要加载 evdev(4) 模块。此外, Wayland 的用户需要成为 video 组的成员。要快速进行此更改,请使用 pw 命令:
xxxxxxxxxxpw groupmod video -m user安装Wayland很简单;协议本身没有太多的配置。大部分构图将取决于所选的排字师。通过现在安装 seatd ,作为合成器安装和配置的一部分,跳过了一个步骤,因为需要 seatd 来提供对某些设备的非根访问。
这里描述的所有合成器都应该使用 graphics/drm-kmod 开源驱动程序;但是,使用专有驱动程序时,NVIDIA®图形卡可能会出现问题。首先安装以下软件包:
xxxxxxxxxx# pkg install wayland seatd安装协议和支持包后,合成器必须创建用户界面。以下章节将介绍几位排字工人。所有使用Wayland的合成器都需要在环境中定义一个运行时目录。从FreeBSD 14.1开始,这是自动创建和定义的。对于以前的版本,这是通过bourne shell中的以下命令实现的:
xxxxxxxxxx% export XDG_RUNTIME_DIR=/var/run/user/`id -u`值得注意的是,大多数合成器都会在 XDG_RUNTIME_DIR 目录中搜索配置文件。在这里包含的示例中,将使用一个参数在 ~/.config 中指定一个配置文件,以将临时文件和配置文件分开。建议为每个合成器配置一个别名,以加载指定的配置文件。
xxxxxxxxxx据报道,ZFS用户可能会遇到一些Wayland客户端的问题,因为他们需要访问运行时目录中的posix_fallocate()。虽然作者无法在他们的ZFS系统上重现这个问题,但建议的解决方法是不将ZFS用于运行时目录,而是将tmpfs用于/var/run目录。在这种情况下,tmpfs文件系统用于/var/run,并通过命令 `mount -t tmpfs tmpfs /var/run` 挂载,然后通过/etc/fstab使此更改在重新启动时持续存在。XDG_RUNTIME_DIR环境变量可以配置为使用/var/run/user/$UID,以避免ZFS的潜在陷阱。在查看以下部分中的配置示例时,请考虑这种情况。seatd 守护进程帮助管理合成器中非root用户对共享系统设备的访问;这包括图形卡。对于传统的X11管理器,不需要 seatd ,如Plasma和GNOME,但对于这里讨论的Wayland合成器,它需要在系统上启用并在启动合成器环境之前运行。要立即启用并启动 seatd 守护进程,以及在系统初始化时:
xxxxxxxxxx# sysrc seatd_enable="YES"# service seatd start之后,需要为GUI环境安装一个类似于X11桌面的合成器。这里讨论了三个方面,包括基本配置选项、设置屏幕锁和提供更多信息的建议。
Wayfire是一款旨在实现轻量级和可定制的合成器。有几个功能可用,它从之前发布的Compiz Fusion桌面中带回了几个元素。所有部件在现代硬件上看起来都很漂亮。要启动并运行Wayfire,请先安装所需的软件包:
xxxxxxxxxx# pkg install wayfire wf-shell alacritty swaylock-effects swayidle wlogout kanshi mako wlsunsetalacritty 包提供了一个终端模拟器。尽管如此,它并不是完全必需的,因为其他终端模拟器,如 kitty 和XFCE-4 Terminal ,已经过测试和验证,可以在Wayfire合成器下工作。Wayfire配置相对简单;它使用了一个应该检查是否有任何自定义设置的文件。首先,将示例文件复制到运行时环境配置目录,然后编辑该文件:
xxxxxxxxxx% mkdir ~/.config/wayfire% cp /usr/local/share/examples/wayfire/wayfire.ini ~/.config/wayfire大多数用户的默认设置应该没问题。在配置文件中,像著名的 cube 这样的项目是预先配置的,并且有说明可以帮助使用可用的设置。一些值得注意的主要设置包括:
xxxxxxxxxx[output]mode = 1920x1080@60000position = 0,0transform = normalscale = 1.000000 在这个例子中,从配置文件中,屏幕的输出应该是以列出的赫兹列出的模式。例如,mode 应设置为 宽度x高度@刷新率 。 position 将输出放置在指定的特定像素位置。默认值对大多数用户来说应该没问题。最后, transform 设置背景变换, scale 将输出缩放到指定的比例因子。这些选项的默认值通常是可以接受的;有关更多信息,请参阅文档。
如上所述,Wayland是新的,并非所有应用程序都能使用该协议。目前, sddm 似乎不支持在Wayland中启动和管理合成器(compositors)。在这些示例中使用了 swaylock 实用程序。配置文件包含运行 swayidle 和 swaylock 以空闲和锁定屏幕的选项。
此选项用于定义系统空闲时要采取的操作,如下所示:
xxxxxxxxxxidle = swaylock锁定超时是使用以下行配置的:
xxxxxxxxxx[idle]toggle = <super> KEY_Zscreensaver_timeout = 300dpms_timeout = 600第一个选项将在300秒后锁定屏幕,再过300秒,屏幕将通过 dpms_timeout 选项关闭。
最后要注意的是<super>键。大多数配置都提到了这个键,它是键盘上的传统 Windows 键。大多数键盘都有这个超级键;但是,如果它不可用,则应在此配置文件中重新映射。例如,要锁定屏幕,请按住超级键、 shift 键,然后按 escape 键。除非映射已更改,否则这将执行 swaylock 应用程序。 swaylock 的默认配置将显示灰色屏幕;然而,该应用程序具有高度的可定制性和良好的文档记录。此外,由于 swaylock 效果是安装的版本,因此有几个选项可用,例如模糊效果,可以使用以下命令查看:
xxxxxxxxxx% swaylock --effect-blur 7x5还有 --clock 参数,它将在锁屏上显示一个带有日期和时间的时钟。安装 x11/swaylock-effects 时,包含了默认的pam.d配置。它提供了对大多数用户来说应该很好的默认选项。有更高级的选项可供选择;有关更多信息,请参阅PAM文档。
此时,是时候测试Wayfire了,看看它是否可以在系统上启动。只需键入以下命令:
xxxxxxxxxx% wayfire -c ~/.config/wayfire/wayfire.ini合成器现在应该启动并在屏幕顶部显示背景图像和菜单栏。Wayfire将尝试列出已安装的桌面兼容应用程序,并将其显示在此下拉菜单中;例如,如果安装了XFCE-4文件管理器,它将显示在此下拉菜单中。如果特定应用程序兼容并且对键盘快捷键有足够的价值,则可以使用 wayfire.ini 配置文件将其映射到键盘序列。Wayfire还有一个名为Wayfire Config Manager的配置工具。它位于下拉菜单栏中,但也可以通过发出以下命令通过终端启动:
xxxxxxxxxx% wcm各种Wayfire配置选项,包括复合特效,可以通过此应用程序启用、禁用或配置。此外,为了获得更用户友好的体验,可以在配置文件中启用后台管理器、面板和对接应用程序:
xxxxxxxxxxpanel = wf-paneldock = wf-dockbackground = wf-backgroundxxxxxxxxxx通过 `wcm` 所做的更改将覆盖 wayfire.ini 配置文件中的自定义更改。强烈建议备份 wayfire.ini 文件,以便还原任何重要更改。最后, wayfire.ini 中列出的默认启动器是 x11/wf-shell ,如果用户需要,可以用其他面板替换。
Hikari合成器使用了几个以生产力为中心的概念,如图纸(sheets)、工作空间等。这样,它就像一个平铺窗口管理器。分解后,合成器从一个工作区开始,类似于虚拟桌面。Hikari使用单个工作区或虚拟桌面进行用户交互。工作空间由几个视图组成,这些视图是合成器中分组为图纸或组的工作窗口。表格和组都是由一系列观点(views)组成的;再次,组合在一起的窗口。在图纸或组之间切换时,活动图纸或组将统称为工作空间。手册页将详细介绍每个工作区的功能,但对于本文档,只需考虑使用单个工作表的单个工作区即可。Hikari安装将包括一个单独的软件包 x11-wm/hikari 和一个终端模拟器 alacritty :
xxxxxxxxxx# pkg install hikari alacrittyxxxxxxxxxx其他 shells ,如 `kitty` 或Plasma `Terminal` ,将在Wayland下运行。用户应该尝试使用他们最喜欢的终端编辑器来验证兼容性。Hikari使用配置文件 hikari.conf ,该文件可以放置在 XDG_RUNTIME_DIR 中,也可以在启动时使用 -c 参数指定。不需要自动启动配置文件,但可以使迁移到此合成器更容易一些。开始配置是创建Hikari配置目录并复制配置文件进行编辑:
xxxxxxxxxx% mkdir ~/.config/hikari% cp /usr/local/etc/hikari/hikari.conf ~/.config/hikari配置分为各种节,如ui、输出、布局等。对于大多数用户来说,默认值将正常工作;然而,应该做出一些重要的改变。例如, $TERMINAL 变量通常不会在用户环境中设置。更改此变量或将 hikari.conf 文件更改为:
xxxxxxxxxxterminal = "/usr/local/bin/alacritty"将使用绑定键按下启动 alacritty 终端。在浏览配置文件时,应该注意大写字母用于为用户映射密钥。例如,用于启动终端 L+Return 的 L 键实际上是前面讨论的超级键或Windows徽标键。因此,按住 L/super/Windows 键并按 Enter 键将打开具有默认配置的指定终端仿真器。将其他键映射到应用程序需要创建操作定义。为此,动作项应列在动作节中,例如:
xxxxxxxxxxactions { terminal = "/usr/local/bin/alacritty" browser = "/usr/local/bin/firefox"}然后,可以在绑定节中定义的键盘节下映射一个动作:
xxxxxxxxxxbindings { keyboard {SNIP "L+Return" = action-terminal "L+b" = action-browserSNIP重新启动Hikari后,按住Windows徽标按钮并按键盘上的 b 键将启动web浏览器。合成器没有菜单栏,建议用户在迁移前至少设置一个终端模拟器。手册页包含大量文档,在执行完整迁移之前应该阅读这些文档。Hikari的另一个积极方面是,在迁移到合成器时,Hikari可以在Plasma和GNOME桌面环境中启动,允许在完全迁移之前进行试驾。
在Hikari中锁定屏幕很容易,因为默认的 pam.d 配置文件和解锁实用程序与软件包捆绑在一起。锁定屏幕的键绑定是 L(Windows徽标键)+Shift+Backspace 。需要注意的是,所有未标记为公开的视图都将被隐藏。这些视图在锁定时永远不会接受输入,但要注意敏感信息是否可见。对于某些用户来说,迁移到不同的屏幕锁定实用程序(如本节讨论的swaylock效果)可能更容易。要启动Hikari,请使用以下命令:
xxxxxxxxxx% hikari -c ~/.config/hikari/hikari.confSway合成器是一种平铺合成器,试图取代i3窗口管理器。它应该与用户当前的i3配置兼容;然而,新功能可能需要一些额外的设置。
在开始Sway安装之前,请确保图形卡(GPU)已正确安装和配置。请参阅【表8. 图形硬件的驱动程序】部分以获取指导。此步骤对于Sway合成器正常工作至关重要。
在接下来的示例中,将假设不迁移任何i3配置的新安装。要安装Sway和有价值的组件,请以root用户身份发出以下命令:
xxxxxxxxxx# pkg install sway swayidle swaylock-effects alacritty dmenu-wayland dmenu对于基本配置文件,发出以下命令,然后在复制后编辑配置文件:
xxxxxxxxxx% mkdir ~/.config/sway% cp /usr/local/etc/sway/config ~/.config/sway基本配置文件有很多默认值,这对大多数用户来说都很好。应进行以下几项重要更改:
xxxxxxxxxx# Logo key. Use Mod1 for Alt.input * xkb_rules evdevset $mod Mod4# Your preferred terminal emulatorset $term alacrittyset $lock swaylock -f -c 000000output "My Workstation" mode 1366x768@60Hz position 1366 0output * bg ~/wallpapers/mywallpaper.png stretch### Idle configurationexec swayidle -w \ timeout 300 'swaylock -f -c 000000' \ timeout 600 'swaymsg "output * dpms off"' resume 'swaymsg "output * dpms on"' \ before-sleep 'swaylock -f -c 000000'在前面的示例中,加载了 evdev(4) 事件的 xkb 规则,并将 $mod 键设置为键绑定的Windows徽标键。接下来,将终端仿真器设置为 alacritty ,并定义了屏幕锁定命令;稍后将对此进行更多介绍。输出关键字、模式、位置、背景壁纸,Sway也被告知拉伸此壁纸以填充屏幕。最后, swayidle 设置为守护进程,并在300秒超时后锁定屏幕,在600秒后将屏幕或显示器置于睡眠模式。这里也定义了000000的锁定背景颜色,即黑色。使用swaylock效果,时钟也可以显示 --clock 参数。有关更多选项,请参阅手册页。还应查看sway-output(5) 手册页;它包含了大量关于定制可用输出选项的信息。
在Sway中,要打开应用程序菜单,请按住Windows徽标键(mod)并按d键。可以使用键盘上的箭头键导航菜单。还有一种方法可以操纵栏的布局并添加托盘;有关更多信息,请阅读 sway-bar(5) 手册页。默认配置在右上角添加日期和时间。请参阅配置文件中的Bar节以获取示例。默认情况下,该配置不包括在上述示例之外锁定屏幕,从而启用锁定计时器。创建锁密钥绑定需要以下行到 key bindings部分:
xxxxxxxxxxbindsym $mod+Shift+Return exec $lock现在,可以使用按住Windows徽标键、按住shift键和最后按回车键的组合来锁定屏幕。安装Sway时,无论是从软件包还是FreeBSD Ports Collection安装,都安装了 pam.d 的默认文件。默认配置对大多数用户来说应该是可以接受的,但有更高级的选项可供选择。阅读PAM文档以获取更多信息。
最后,要退出Sway并返回shell,请按住Windows徽标键、shift键,然后按 e 键。将显示一个提示,其中包含退出Sway的选项。在迁移过程中,Sway可以通过X11桌面(如Plasma)上的终端模拟器启动。这使得在完全迁移到此合成器之前,测试不同的更改和键绑定变得更加容易。要启动Sway,请发出以下命令:
xxxxxxxxxx% sway -c ~/.config/sway/config安装Wayland时,应该安装 Xwayland 二进制文件,除非Wayland是在没有X11支持的情况下构建的。如果 /usr/local/bin/Xwayland 文件不存在,请使用以下命令安装它:
xxxxxxxxxx# pkg install xwaylandxxxxxxxxxx建议使用Xwayland的开发版本,并且很可能与Wayland软件包一起安装。每个合成器都有启用或禁用此功能的方法。安装 Xwayland 后,在所选合成器中配置它。对于Wayfire,Wayfire.ini 文件中需要以下行:
xxxxxxxxxxxwayland = true对于Sway合成器,默认情况下应启用 Xwayland 。即便如此,建议在 ~/.config/sway/config 中手动添加配置行,如下所示:
xxxxxxxxxxxwayland enable最后,对于Hikari来说,不需要任何改变。默认情况下, Xwayland 的支持是内置的。要禁用该支持,请从端口集合重建包,然后禁用Xwayland支持。
进行这些更改后,在命令行启动合成器,并从键绑定执行终端。在此终端中,发出 env 命令并搜索 DISPLAY 变量。如果合成器能够正确启动Xwayland X服务器,这些环境变量应该类似于以下内容:
xxxxxxxxxx% env | grep DISPLAYWAYLAND_DISPLAY=wayland-1DISPLAY=:0在此输出中,有一个默认的Wayland显示和Xwayland服务器的显示集。验证 Xwayland 是否正常工作的另一种方法是使用安装和测试小软件包:[x11/eyes] 并检查输出。如果 xeyes 应用程序启动并且眼睛跟随鼠标指针,则Xwayland功能正常。如果显示以下错误,则表明 Xwayland 初始化过程中发生了问题,可能需要重新安装:
xxxxxxxxxxError: Cannot open display wayland-0xxxxxxxxxxWayland的一个安全特性是,如果不运行X服务器,就没有另一个网络侦听器。启用Xwayland后,此安全功能将不再适用于系统。对于某些合成器,如Wayfire, Xwayland 可能无法正常启动。因此, env 将显示 DISPLAY 环境变量的以下信息:
xxxxxxxxxx% env | grep DISPLAYDISPLAY=wayland-1WAYLAND_DISPLAY=wayland-1即使 Xwayfire 已经安装和配置,X11应用程序也不会开始出现显示问题。为了解决这个问题,请通过这两种方法验证是否已经存在使用UNIX套接字的 Xwayland 实例。首先,检查 sockstat 的输出并搜索X11-unix:
xxxxxxxxxx% sockstat | grep x11trhodes Xwayland 2734 8 stream /tmp/.X11-unix/X0trhodes Xwayland 2734 9 stream /tmp/.X11-unix/X0trhodes Xwayland 2734 10 stream /tmp/.X11-unix/X0trhodes Xwayland 2734 27 stream /tmp/.X11-unix/X0_trhodes Xwayland 2734 28 stream /tmp/.X11-unix/X0这表明X11套接字的存在。这可以通过尝试在合成器下运行的终端模拟器中手动执行 Xwayland 来进一步验证:
xxxxxxxxxx% Xwayland(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显示器可用,因此环境变量设置不正确,要解决这个问题,请将 DISPLAY 环境变量更改为 :0 ,然后尝试再次执行应用程序。以下示例使用 mail/claws-mail 作为需要 Xwayland 服务的应用程序:
xxxxxxxxxxexport DISPLAY=:0更改后, mail/claws-mail 应用程序现在应该开始使用 Xwayland 并按预期运行。
本文前面提到,Wayland不提供与Xorg相同的X服务器式访问。相反,用户可以自由选择远程桌面协议,如RDP或VNC。FreeBSD Ports集合包括 wayvnc ,它将支持基于wlroots的合成器,如这里讨论的合成器。此应用程序可以使用以下方式安装:
xxxxxxxxxx# pkg install wayvnc与其他一些软件包不同, wayvnc 不附带配置文件。值得庆幸的是,手册页记录了重要的选项,它们可以推断为一个简单的配置文件:
xxxxxxxxxxaddress=0.0.0.0enable_auth=trueusername=usernamepassword=passwordprivate_key_file=/path/to/key.pemcertificate_file=/path/to/cert.pem需要生成密钥文件,强烈建议使用它们来提高连接的安全性。调用时,wayvnc将在 ~/.config/wayvnc/config 中搜索配置文件。启动服务器时,可以使用 -C configuration_file 选项覆盖此内容。因此,要启动 wayvnc 服务器,请发出以下命令:
xxxxxxxxxx% wayvnc -C ~/.config/wayvnc/configxxxxxxxxxx在撰写本文时,还没有rc.d脚本可以在系统初始化时启动wayvnc。如果需要该功能,则需要创建本地启动文件。这可能是对port维护者的功能请求。虽然存在几个登录管理器,并且正在慢慢迁移到Wayland,但一个选项是 x11/ly 文本用户界面(text user interface,TUI)管理器。只需要最小的配置, ly 将通过在系统初始化时显示登录窗口来启动Sway、Wayfire和其他软件。要安装 ly ,请发出以下命令:
xxxxxxxxxx# pkg install ly将提供一些配置提示,导入步骤是将以下行添加到 /etc/gettytab 中:
xxxxxxxxxxLy:\ :lo=/usr/local/bin/ly:\ :al=root:然后修改 /etc/ttys中 的ttyv1行以匹配以下行:
xxxxxxxxxxttyv1 "/usr/libexec/getty Ly" xterm onifexists secure系统重新启动后,应显示登录信息。配置特定设置,如语言和编辑 /usr/local/etc/ly/config.ini 。至少,此文件应该具有之前在 /etc/ttys 中指定的tty。
xxxxxxxxxx如果将ttyv0设置为登录终端,可能需要按alt和F1键才能正确看到登录窗口。当登录窗口出现时,使用左箭头和右箭头将切换到不同的、受支持的窗口管理器。
所有合成器都可以使用的一个有用的Wayland实用程序是waybar。虽然Wayfire确实有一个启动菜单,但易于使用且快速的任务栏是任何合成器或桌面管理器的好配件。一个快速且易于配置的Wayland兼容任务栏是waybar。要安装软件包和支持的音频控制实用程序,请发出以下命令:
xxxxxxxxxx# pkg install pavucontrol waybar要创建配置目录并复制默认配置文件,请执行以下命令:
xxxxxxxxxx% mkdir ~/.config/waybar% cp /usr/local/etc/xdg/waybar/config ~/.config/waybarlavalauncher 实用程序为各种应用提供了一个启动栏。包中没有提供示例配置文件,因此必须采取以下操作:
xxxxxxxxxxmkdir ~/.config/lavalauncher下面是一个仅包含Firefox的示例配置文件,位于右侧:
xglobal-settings { watch-config-file = true;}bar { output = eDP-1; position = bottom; background-colour = "#202020"; condition-resolution = wider-than-high; config { position = right; } button { image-path =/usr/local/lib/firefox/browser/chrome/icons/default/default48.png; command[mouse-left] = /usr/local/bin/firefox; } button { image-path = /usr/local/share/pixmaps/thunderbird.png; command[mouse-left] = /usr/local/bin/thunderbird;}