Wayland

電腦顯示伺服器協定

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

Wayland
Wayland参考实现Weston
原作者Kristian Høgsberg
首次发布2008年9月30日,​16年前​(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
Linux:X Server与Wayland Compositor
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的开源驱动上运行。

设计

 
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的区别:

 
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还会去做一些不必要的本职工作(窗口重叠计算、窗口剪裁计算等)。
 
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 已开始支持。

参见

参考资料

  1. ^ 存档副本. [2023-01-28]. (原始内容存档于2020-04-01). 
  2. ^ Simon Ser. [ANNOUNCE] wayland 1.21.0. 2022-06-30 [2022-06-30]. (原始内容存档于2022-07-02) (英语). 
  3. ^ Wayland. [2013-09-18]. (原始内容存档于2010-11-22) (英语). Wayland is a protocol for a compositor to talk to its clients as well as a C library implementation of that protocol. 
  4. ^ 4.0 4.1 Michael Larabel. Wayland: A New X Server For Linux. Phoronix Media. 2008-11-03 [2013-11-09]. (原始内容存档于2010-11-15) (英语). 
  5. ^ D. J. Walker-Morgan. New Wayland X server looks to how a modern desktop works. Heise Media UK Ltd. 2008-11-06 [2013-11-09]. (原始内容存档于2013-10-29) (英语). 
  6. ^ 6.0 6.1 Høgsberg, Kristian. Premature publicity is better than no publicity. 2008-11-03 [2016-04-06]. (原始内容存档于2022-10-06). 
  7. ^ Interview: Kristian Høgsberg. FOSDEM Archive. 2012-01-29 [2016-03-08]. 
  8. ^ 8.0 8.1 Hillesley, Richard. Wayland - Beyond X. The H Open. Heise Media UK. 2012-02-13 [2016-03-08]. (原始内容存档于2013-12-06). 
  9. ^ Høgsberg, Kristian. Wayland – A New Display Server for Linux. Linux Plumbers Conference, 2009. [2010-11-23]. (原始内容存档于2011-07-27). 
  10. ^ Jenkins, Evan. The Linux graphics stack from X to Wayland. Ars Technica. 2011-03-22 [2016-04-17]. (原始内容存档于2016-04-10). 
  11. ^ Larabel, Michael. Wayland Becomes A FreeDesktop.org Project. Phoronix.com. 2010-10-29 [2016-04-17]. (原始内容存档于2016-04-14). 
  12. ^ Høgsberg, Kristian. Moving to freedesktop.org. 2010-10-29 [2013-07-31]. (原始内容存档于2019-12-07). 
  13. ^ Michael Larabel. Wayland Meets Some Summer Love w/ New Changes. Phoronix Media. 2010-06-06 [2013-11-09]. (原始内容存档于2018-12-25) (英语). 
  14. ^ Kristian Høgsberg. Blender3D & cursor clamping.. 2010-12-09 [2013-11-09]. (原始内容存档于2021-03-08) (英语). 
  15. ^ Michael Larabel. Wayland's Weston Running On Android. Phoronix Media. 2012-05-24 [2013-11-09]. (原始内容存档于2021-03-07) (英语). 
  16. ^ Kristian Høgsberg. Network transparency argument. 2010-11-09 [2013-11-09]. (原始内容存档于2021-03-08) (英语). Wayland isn't a remote rendering API like X, but that doesn't exclude network transparency. Clients render into a shared buffer and then have to tell the compositor the what they changed. The compositor can then send the new pixels in that region out over the network. The Wayland protocol is already violently asynchronous, so it should be able to handle a bit of network lag gracefully. Remote fullscreen video viewing or gaming isn't going to work well, but I don't know any other display system that handles that well and transparently. 
  17. ^ Mark Shuttleworth. Unity on Wayland. 2010-11-04 [2010-11-04]. (原始内容存档于2013-06-28) (英语). 
  18. ^ Michael Larabel. Ubuntu Announces Mir, A X.Org/Wayland Replacement. Phoronix Media. 2013-03-04 [2013-11-09]. (原始内容存档于2021-05-07) (英语). 
  19. ^ Ubuntu宣布放弃Unity界面:明年将回归GNOME. 新浪科技. 2017-04-06 [2017-11-11]. (原始内容存档于2020-08-26). 
  20. ^ Ubuntu 17.10调整:Dock始终可见 默认使用Wayland. 搜狐. 2017-08-07 [2017-11-11]. (原始内容存档于2018-06-12). 
  21. ^ Ubuntu 18.04 LTS每日構建版使用Xorg而不是Wayland. 扫文资讯. [2018-04-15]. (原始内容存档于2018-04-15). 
  22. ^ Bionic Beaver 18.04 LTS to use Xorg by default. insights.ubuntu.com. [2018-04-15]. (原始内容存档于2018-04-17) (英语). 
  23. ^ What is QtWayland?. Qt Project Hosting. 2013-05-08 [2013-11-09]. (原始内容存档于2015-02-20) (英语). 
  24. ^ Getting started with Lighthouse. Qt Project Hosting. 2011-06-29 [2010-12-17]. (原始内容存档于2014-10-21) (英语). 
  25. ^ Kristian Høgsberg. Add wayland lighthouse plugin. 2011-01-25 [2013-11-09]. (原始内容存档于2013-05-14) (英语). 
  26. ^ Martin Gräßlin. KWin runs on OpenGL ES. 2010-11-28 [2013-11-09]. (原始内容存档于2020-11-09) (英语). It does not only help, it is a must have to start working for Wayland. So to say it’s the first part of the KWin port to Wayland 
  27. ^ Martin Gräßlin. On the Road to Modern OpenGL (ES). 2011-01-18 [2013-11-09]. (原始内容存档于2021-12-06) (英语). 
  28. ^ Martin Gräßlin. KWin goes Wayland. 2011-06-11 [2013-11-09]. (原始内容存档于2011-08-25) (英语). Initial Implementation of a Wayland Server in KWin. 
  29. ^ Michael Larabel. KDE Draws Up Plans For Wayland In 2012. Phoronix Media. 2011-08-07 [2013-11-09]. (原始内容存档于2021-03-07) (英语). but the first phase (Wayland under X) should be achieved for the winter release of KDE (Software Compilation 4.8, due out next January). Martin hopes that the second phase of the Wayland upbringing, where KDE is working directly atop Wayland, will be ready for the summer 2012 release (KDE SC 4.9). 
  30. ^ GNOME 3.10 Released!. The GNOME Project. 2013-09-25 [2013-11-13]. (原始内容存档于2021-02-05) (英语). 
  31. ^ Michael Larabel. Jolla's First Smartphone Powered By Wayland. Phoronix Media. 2013-07-13 [2013-11-09]. (原始内容存档于2021-06-25) (英语). 

外部链接