Linux 上的 Wayland 是什么?它与 X 有何不同?
已发表: 2023-07-17X11 或 X Window 系统可让您的图形桌面环境显示和控制窗口。 Wayland 是 X11 的替代品。 它的设计速度更快、更安全。 以下是您需要了解的有关它们的信息。
什么是韦兰?
X的众多名字
X11 的工作原理
Wayland 的工作原理
Wayland 被应用程序采用的速度缓慢
您使用的是 Wayland 还是 X11?
您应该使用 Wayland 还是 X11?
什么是韦兰?
Wayland 是 X11 的现代替代品,几十年来 X11 一直是 Linux 上的默认窗口系统。 Wayland 是一种通信协议,定义 X Window 显示服务器和客户端应用程序之间的消息传递。 Wayland 项目提供了客户端和服务器库,使应用程序能够使用该协议。
Wayland 项目由红帽开发人员于 2008 年启动。
X的众多名字
X Window System 是一个窗口系统,由麻省理工学院于 1984 年首次针对 Unix 操作系统发布。应用程序可以基于窗口系统提供的功能来生成用户界面。
到 1987 年,X Window 系统已达到版本 11,并被称为 X11。 它现在由 X.Org 基金会管理。 尽管自 1987 年以来已经出现了许多较小的版本,但它仍处于版本 11。截至撰写本文时,当前的稳定版本是 X11R7.7。
名称中的“X”并不表示罗马数字中的“10”,也不表示“Xtra”、“Xtending”或类似的意思。 以前的窗口系统被称为“W”,代表“windows”,当他们开始新项目时,他们只是简单地移动到字母表中的下一个字母。
您会听到 X Window 系统被称为“X”、“X11”、“Xorg”、“X Windows”和“X Window System”。
X11 的工作原理
X Window 系统处理低级事件和原语,例如与鼠标交互以及绘制和移动窗口。 应用程序处理视觉效果和界面设计。 窗口的外观、它们有哪些按钮以及这些按钮的位置是应用程序程序员做出的选择。 X Window 系统将最终的设计绘制到屏幕上。
X11 提供了在工作的 X Window 系统的各个组件之间必须传递的通信的定义。 这种通信是必需的,因为启用 X 的应用程序用来绘制其窗口和界面元素的代码不在应用程序内部。 该工作由 X 服务器和窗口管理器共享。
应用程序是 X 服务器的客户端。 窗口管理器是一种特殊类型的客户端。 X 服务器负责管理资源、执行绘图请求以及将按键和鼠标单击等事件编组到适当的应用程序。
它还充当窗口管理器和应用程序之间通信的中间人,在它们之间来回代理消息。 窗口管理器维护应用程序已打开的窗口列表、它们在屏幕上的位置、它们的大小、它们是否重叠等等。
合成窗口管理器为每个窗口维护一个离屏缓冲区。 它将这些缓冲区合成为一个图像,该图像代表最顶层的窗口(代表整个桌面)并写入屏幕。
所有现代图形桌面环境,包括 GNOME 和 KDE,都使用合成窗口管理器。
Wayland 的工作原理
Wayland 旨在解决 X11 的问题。 X11 架构需要大量消息传递。 X 服务器位于客户端和窗口管理器之间。 它还位于所有东西和(通过内核)图形硬件之间。 消息量过大可能会导致延迟和滞后、跳跃的视觉体验。
还有一个庞大的代码库。 有服务器应用程序、窗口管理器应用程序和客户端使用的 X11 库。 您的代码库越大(且越旧),维护起来就越困难,并且您将更加难以处理遗留代码。
通过改变架构,Wayland 实现了代码库的现代化和简化,带来了性能优势并提高了安全性。
实际上,他们已将服务器和窗口管理器合并到一个应用程序中。 他们删除了执行现在由内核执行的功能的所有代码。 他们没有重复工作,而是利用了内核的功能。
通过 Wayland,合成器和客户端应用程序可以直接通信。 合成器维护其内部映射,其中包括哪些窗口在桌面上的位置、它们的大小和状态。它代理键盘、鼠标和窗口更改事件,并将它们发送到拥有这些窗口的应用程序。
应用程序相应地更新用户界面。 主要区别在于渲染是在应用程序本身内部使用链接的 Wayland 库执行的。
应用程序要么更新用于保存窗口的缓冲区,要么创建一个新缓冲区并丢弃旧缓冲区。 然后,客户端应用程序向合成器发送通知,告诉它更新其窗口映射并使用新的或更新的视频缓冲区。
这种简化的架构和现代代码设计提供了性能改进,尤其是窗口大小调整和拖动,显得平滑流畅。
Wayland 被应用程序采用的速度缓慢
Wayland 是 Debian 10 及更高版本、Fedora 34 或更高版本、Ubuntu 18.04 或更高版本以及其他发行版(例如 Arch Linux)中的默认窗口系统。 尽管如此,Wayland 通常运行 X11 应用程序。
有一个名为 XWayland 的兼容层,允许 X11 应用程序在 Wayland 下运行。 这是必需的,因为大多数 X11 应用程序尚未修改并移植到 Wayland。
在提供 Wayland 合成器的桌面环境(例如 GNOME)上,GNOME 文本编辑器和地图、文件和日历等官方应用程序都是 Wayland 原生应用程序。 但绝大多数 X11 应用程序仍然是未受影响的、原生的 X11 应用程序。
XWayland 中间件通常工作得很好,但某些执行低级屏幕相关功能(例如屏幕录制)的 X11 应用程序可能会出现问题。 将 Wayland 与 NVIDIA 一起使用可能与与 X11 一起使用一样痛苦,尽管我在日常驱动程序中将其与 NVIDIA GeForce GT 1030 GPU 一起使用时没有遇到任何问题。
X11 应用程序的一些作者可能希望他们的应用程序能够与 XWayland 一起正常工作,并且他们可以避免将它们重新加工到 Wayland 应用程序中。 如果到 Wayland 的采用和迁移过程漫长而缓慢,新应用程序采用它,但大多数现有 X11 应用程序保持原样,将希望寄托在 XWayland 上,请不要感到惊讶。
相关: Ubuntu 21.04“Hirsute Hippo”的新增功能
您使用的是 Wayland 还是 X11?
如果您正在使用主要的 Linux 发行版之一,那么您很可能已经在使用 Wayland。 您可以通过发出以下命令进行检查。
回显$XDG_SESSION_TYPE
在使用 Wayland 的系统上,输出将是:
在运行 X Window 系统的系统上,您将看到:
极少数情况下,未设置XDG_SESSION_TYPE
环境变量。 在这种情况下,您可以改用此命令:
loginctl show-session $(loginctl show-user $(whoami) -p 显示 --value) -p 类型 --value
内部嵌套的loginctl
命令使用show-user
命令来显示指定用户的属性。 whoami
命令为我们提供当前用户的名称。 -p
(属性)选项将loginctl
的输出限制为有关“显示”设置的信息,我们使用--value
选项仅返回值。 我们不希望在loginctl
的响应中包含“Display=”字符串。 所有这些都为我们提供了一个会话 ID。
我们将会话ID传递给外部loginctl
,并使用show-session
命令显示会话的属性。 我们使用-p
(属性)选项将输出限制为有关会话类型的信息,并使用--value
选项显示不带“Type=”标签的值。
在使用 Wayland 的计算机上,您将看到:
如果您运行的是 X Window 系统,您将看到:
您应该使用 Wayland 还是 X11?
除非您遇到问题,否则您最好坚持使用已经使用的内容。 但是,如果您注意到不稳定或屏幕更新不稳定,您可以尝试转向您不使用的任何一个。
在 GNOME 上,如果您想切换并尝试其他系统,请在登录屏幕上单击您的用户名,然后单击显示屏右下角的齿轮图标。
菜单将为您提供不同版本的 GNOME。 提到“Xorg”的选项使用 X Window 系统,而那些不使用 Wayland 的选项。
相关:如何列出 Linux 上的环境变量