Wayland是一个通信协议,规定了显示伺服器与其客户机之间的通信方式,而使用这个协议的显示伺服器称为Wayland Compositor。它由Kristian Høgsberg于2008年发起,目标是用更简单的现代化视窗系统取代X Window System。Wayland协议的参考实现称为Weston,由Wayland项目组使用C语言开发。[3]

Quick Facts 原作者, 首次发布 ...
Wayland
Thumb
Thumb
原作者Kristian Høgsberg
首次发布2008年9月30日,​15年前​(2008-09-30[1]
当前版本1.21.0[2](2022年6月30日,​2年前​(2022-06-30
预览版本1.20.93(2022年6月23日,​2年前​(2022-06-23
原始码库 编辑维基数据链接
编程语言C
操作系统类Unix系统
类型显示服务
许可协议MIT许可证
网站wayland.freedesktop.org
Close
Thumb
Linux:X Server与Wayland Compositor
Thumb
Wayland compositors, libwayland-client and toolkits

Wayland与X Window System的最大不同在于,它规定由客户机自身负责窗口边框和装饰的绘制,并且客户机能够通过EGL以及一些Wayland特定的EGL扩展组件直接在显示内存中算绘自己的缓冲器。窗口管理器简化成显示管理服务,专门负责算绘那些屏幕上的程序。这比X Window System中的窗口管理器要更简单、高效。[4][5]

Wayland项目的原始码使用MIT许可证发布。现有的Compositor例如CompizKWinMutter对Wayland都有着不同程度的支持。

历史

Wayland的创始人Kristian Høgsberg是X.Org Server开发者,曾参与过AIGLX英语AIGLXDRI2英语DRI2的开发。他在2008年供职于红帽时发起了Wayland作为业余项目,目标是让“每一个帧都完美无瑕,也就是说应用程式要能充分地控制图形的渲染,使我们完全无法察觉任何的撕裂、延迟、重画及闪烁”[6][7][8][9]。这一灵感浮现时他正开车经过马萨诸塞州的韦兰,也就由此决定了项目的名字[8][10]

2010年10月,Wayland加入了Freedesktop.org项目[11][12]。在迁移过程中,邮件列表wayland-devel代替了原先的Google group邮件组,用于讨论项目的开发。

Wayland是自由软件,它的库(libwayland-server和libwayland-client)以MIT License授权,示例程序和Compositor一开始以GPLv2授权。现在整个项目都是以MIT License授权。直到2010年11月份,Wayland还仅仅只能在IntelNvidiaAMD的开源驱动上运行。

设计

Thumb
The Wayland display server protocol relys on EGL

Wayland运用既有的Linux核心技术,像是Direct Rendering Manager(DRM),Kernel Mode-Setting(KMS)以及Graphics Execution Manager(GEM)以提供一个最小化的显示管理服务。Wayland混合器(compositor)在2010年6月已从桌面常用的OpenGL改为OpenGL ES[13]。这个项目也开发支持Wayland显示的Qt,而不需要X。大部分应用程式都有望获得透过函数库,无需修改程序即可支持Wayland。

近些年来,GNU/Linux桌面图形开发者将许多与渲染有关的接口从X server移动到内核中。现在,已经有许多功能被移入内核(内存管理任务调度模式设置(KMS)等等)或是程序库(cairo、pixman、freetype、fontconfig、pango等等),所以窗口系统需要做的事情大大减少了。但是X11协议十分巨大、庞杂,并且它包括了许多已经过时的模块。虽然开发者们为了使X server适应现代化的电脑架构而开发出了XRandR、XRender、Composite等一些额外扩展,但这终究是治标不治本,同时这也会增加维护的难度。

Wayland是一款协议,但与X server不同的是,Wayland只做它必须要做的事情。下面以“滑鼠点击按钮引发按钮更新动作”为例来说明一下Wayland和X server的区别:

Thumb
X架构

在X中

  1. 内核捕获滑鼠点击事件并发送给X server。
  2. X server会计算该把这一事件发送给哪个窗口(事实上,窗口位置是由Compositor控制的,X server并不能够正确的计算Compositor做过特效变化之后的按钮的正确位置)。
  3. 应用程式对此事件进行处理(将引发按钮更新动作)。但是,在此之前它得向X server发送绘制请求。
  4. X server接收到这条绘制请求,然后把它发给视频驱动来渲染。X还计算了更新区域,并且这条“垃圾资讯”发送给了Compositor。
  5. 这时,Compositor知道它必须要重新合成屏幕上的一块区域。当然,这还是要向X server发送绘制请求的。
  6. 开始绘制。但是X server还会去做一些不必要的本职工作(窗口重叠计算、窗口剪裁计算等)。
Thumb
Wayland架构

在Wayland中

  1. 内核捕获滑鼠点击事件并发送给Wayland Compositor。
  2. 由于是直接发给Wayland Compositor的,所以Wayland Compositor会正确地计算出按钮的位置。同时它会把这一事件发送给按钮所在的应用程式来处理。
  3. 应用程式直接渲染,无需向Wayland Compositor请求。只需在绘制完成之后向Wayland Compositor发送一条资讯表明这块区域被更新了。
  4. Wayland Compositor收到这条资讯后,立即重新合成整个桌面。

目前,Wayland使用OpenGL ES而不是传统的OpenGL。“从长远来看,我们需要完整的OpenGL支持,但问题是libGL会带来X的依赖性......”[14]另一方面,使用OpenGL ES会使得Wayland更容易支持移动设备[15]。Wayland目前并不支持网络透明性,但未来可能会支持[16]

媒体关注

Phoronix于2008年11月发表了一篇标题为“Wayland: A New X Server For Linux”的文章[4],披露Wayland这项新的项目。Kristian透过他的部落格对此关注作出回应,他告示大众Wayland并非一个新的X server而是一个显示伺服器,并声明这个新兴的项目尚处于未成熟的阶段[6]

使用

Arch Linux

Arch Linux本身不具有Wayland。但实际上,安装 Enlightenment 或 KDE 等桌面环境时,可以选用Wayland安装作为显示伺服器。

Ubuntu

马克·沙特尔沃思于2010年11月4日宣布Wayland将作为Ubuntu未来某一未定版本Unity接口的显示伺服器[17]。但是2013年3月份,Canonical确认他们将开发一个新的显示服务Mir而不是使用Wayland来替代X[18]。2017年4月份,Canonical宣布放弃Unity与Mir[19],并于Ubuntu 17.10开始使用Wayland[20]。但在18.04LTS版本中因为Wayland无法支持屏幕共享,远程桌面服务以及GNOME Shell崩溃的可恢复性更换为X.Org Server。[21][22]

Fedora

Fedora 25集成了GNOME桌面最新版本 3.22,并将GNOME桌面的版本的显示后端切换至预设为Wayland。

RHEL

RHEL 8集成了Wayland。

Qt

Qt 5.x提供了QtWayland模块以支持Wayland协议[23],借由-platform命令行选项,Qt应用程式可以在运行时切换图形后端,如X与Wayland[24]。2011年1月,Wayland支持进入上游Qt版本库的Lighthouse分支[25]

KDE

KWinKDE的视窗管理器加入支持OpenGL ES输出[26],已在KDE SC 4.7发布[27]。目前,KWin已经完成Wayland的初步移植[28]。在2012年1月发布的KDE SC 4.8,KDE将支持X下执行Wayland。在2012年夏天发布的KDE SC 4.9,将可以直接执行Wayland,主要用于支持行动装置,也就是Plasma Active[29]

GNOME

GNOME从3.10开始支持Wayland[30]

Compiz

Compiz开发者们已经把它对X的依赖部分变成了一个可选插件。同时,Canonical正在为Compiz添加OpenGL ES的支持。众所周知,目前Wayland正是使用OpenGL ES,这使将得Compiz能够更容易迁移到Wayland。 注:compiz此项目的主要作者已经离开Canonical,使得此项目进入停止开发的状态,当然迁移到wayland的计划也就更遥遥无期。

Sailfish OS

Jolla的第一款装置搭载的Sailfish OS使用Wayland[31]

Wayland 合成器

实现 Wayland 显示伺服器协议的显示伺服器也称为 Wayland 合成器,因为它们也执行合成视窗管理器的任务。

  • Hyprland – 一个用C++ 编写的基于wlroots 的平铺Wayland 合成器,Hyprland 值得注意的功能包括动态平铺、选项卡式视窗、干净且可读的C++ 代码库以及提供视窗动画、圆角和Dual-Kawase模糊的自定义渲染器。
  • Weston – Wayland 合成器的参考实现,实现客户端装饰。
  • Enlightenment - 声称自 0.20 版本以来完全支持 Wayland ,但目前正在进行工作以实现完整的 Wayland 合成器 。
  • KWin - 截至 2021 年,KWin 几乎拥有完整的 Wayland 支持。
  • Mutter - Mutter 为 GNOME 3.9 的 Wayland 集成维护了一个单独的分支(2013 年 9 月);[54] 在 2014 年的 3.13.1 版本中,Wayland 分支被合并到主存储库中。
  • Clayland – 使用 Clutter 的 Wayland 合成器的简单示例。
  • Sway – 平铺 Wayland 合成器和 X11 i3 视窗管理器的直接替代品。

Weston

Weston 是Wayland 合成器的参考实现,它也是由Wayland 项目开发的,使用C 语言编写,并在MIT 许可证下发布,由于Weston 依赖Linux 操作系统的某些功能,因此Weston只提供对Linux 操作系统的官方支持。其处理依赖evdev,虽然缓冲器的处理依赖于通用缓冲器管理 (GBM),但是,2013 年宣布了 Weston 到 FreeBSD 的原型移植。

Weston 支持高带宽数码内容保护 (HDCP)。

Weston 依靠 GEM 在合成器和应用程式之间共享应用程式缓冲器。对于渲染,Weston 可以使用OpenGL ES 或pixman 函数库进行软件渲染。支持库作为依赖项。

Weston 的远程存取接口由 RealVNC 员工于 2013 年 10 月提出。

Maynard

Maynard 是一个图形 shell,被写为 Weston 的插件,就像 GNOME Shell 被写为 Mutter 的插件一样。

Raspberry Pi 基金会与 Collabora 合作发布了 Maynard,致力于提高性能和降低存储器消耗。

工具包

  • Clutter 对 Wayland 已经有完整的支持。
  • EFL 对 Wayland 通常情况下有完整支持。
  • Enlightenment Foundation Libraries 对Wayland已经有完整的支持。
  • QT 5 除了对 client 有一些改动之外,对Wayland已经有完整的支持。
  • GTK+3.4.0,发布于2012年3月26日,对 Wayland 的支持有一些缺陷。不过过随着3.4.1更新版本的发布,这个问题得到了缓解。
  • SDL自 2.0.2 发布以来开始支持 Wayland,自 2.0.4 开始默认启用。
  • GLFW 自 3.2 开始支持。
  • FreeGLUT 已开始支持。

参见

参考资料

外部链接

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.