为什么Wayland更好?

如马克·舒特尔沃斯特最近宣布的那样,Ubuntu将转向使用Wayland作为其显示管理器。
X11和Wayland之间有哪些最大的区别?为什么Wayland会使Ubuntu变得更好?

5截至2013年12月,看起来基于Unity的Ubuntu将从Ubuntu 14.10开始使用Mir显示服务器,而不是基于Wayland的合成器:链接 链接 其他Ubuntu变体可能会转向Wayland:链接 - Diego
6这是一个很棒的视频,解释了X以及人们为什么想要替换它:http://www.youtube.com/watch?v=cQoQE_HDG8g - Jason
1Ubuntu 18(Bionic)现在默认使用xorg,但登录界面上仍然可以选择wayland:https://blog.ubuntu.com/2018/01/26/bionic-beaver-18-04-lts-to-use-xorg-by-default - Kris
我会说X更好。我不会涉及技术细节。但是我要说的是,如果我在Wayland上调整窗口大小或进入/退出全屏,在YouTube上会出现丢帧现象。在X上没有问题。尽管速度是一样的。此外,在Wayland上鼠标光标的感觉比在X上松散。X仍然是我的第一选择。 - Luka
这种问题暗示了Wayland比较好。"好"是相对于使用情况和参考框架而言的。比什么更好?比Windows更好吗?比XOrg更好吗?对谁来说更好?想要运行游戏的人?在远程计算机上运行软件而不需要RDP的人?你没有具体说明。作为一个非游戏玩家,我认为Wayland比X11差得多。 - WitchCraft
6个回答

你可以查看Wayland架构页面,了解其设计上的差异。它旨在通过强制所有内容通过标准的GEM/DRM堆栈直接进入内核并管理合成来简化整个图形堆栈。
相比之下,X堆栈中的各种组件散落在各处。其中一些混乱是由于灵活的设计,一些则是成长的痛苦。所有的合成器(Compiz/Metacity/Mutter/KWin等)都是事后添加的。从本质上讲,它们是为了做X本应该自己做的事情而进行的黑客行为。如果事情继续像现在这样扩张下去,我们将达到一个项目无法维护的地步。
总的来说,当硬件支持到位时,它应该使整个堆栈在标准设置中更高效、更不痛苦地使用。
然而,目前还有一些问题我还没有看到解决方案:
X非常注重网络。你可以将窗口发送到其他计算机,可以通过远程登录拥有多个屏幕,以及各种花哨的功能。这可能看起来相对专业,但它是广泛使用的技术。与此相比,Wayland似乎更加本地和静态。
还有驱动程序支持的问题。闭源驱动程序尚未支持Wayland所依赖的KMS/shared-GEM/shared-DRM技术。纯粹主义者可能会满意Nouveau,但那些花费100-400英镑购买高性能3D图形卡的人不会满意当前开放驱动程序带来的不稳定的差劲3D性能。
更新:Nvidia正在努力支持Wayland和Mir。
2018更新。17.10版本使用Wayland作为默认显示服务器(除非您使用闭源驱动程序、不支持Wayland的驱动程序或需要X)。18.04和18.10版本都将X作为全局默认(但您可以安装Wayland)。
从我的角度来看,我没有掌控任何事情,但似乎我们离真正的进展还有一段距离。在那个时候之前,我认为我们不会看到足够的关注和开发力量投入到Wayland中。游戏/性能市场正在使用X。MCE市场正在使用X(和直接帧缓冲)。我不确定Wayland是否会有真正的机会。

25网络透明度的问题被夸大了很多,原因有几个。首先,纯粹的X转发只在局域网中速度足够快。在互联网上,由于延迟问题,原始的X是无法使用的。为了获得良好的性能,必须使用第三方协议,如NX或VNC。其次,NX和VNC都因为X的架构而设置起来非常麻烦。使用Wayland应该会更容易一些。再者,很少有现代工具包使用X的绘图代码。它们只是将自己绘制到位图上,并将其发送给X。这与Wayland完全相同,并且具有相同的网络特性。 - Timmmm
5我同意第一点,但在一个良好的局域网上,X-Forwarding无法触及到质量或性能。根据我的经验,这比任何其他选择都要好得多。 - Oli
1截至2013年,网络透明度的情况更加清晰:http://askubuntu.com/a/359870/203271 - Diego
3@poolie:看来他们改变了主意。;-) - Peque
我很感激你提到了X转发以及Wayland尚未提供替代方案的问题。不包括远程桌面协议,如RDP、NX等。 在Wayland能够提供自己的X转发类似功能之前,我真的不会觉得准备好放弃X。理想情况下,我希望Wayland不仅能够通过XWayland接收SSH上的远程X窗口,还能够向非Wayland客户端发送窗口,实现一种反向的XWayland功能。 - Kris Jace
1@Timmmm,我不确定你是否有类似的经验,但大约12年前,我成功地将X会话从家里的DSL转发到我们学校的网络,并且通过我的Windows X服务器在笔记本电脑上运行了Gimp和工作中的gnome会话。即使存在延迟问题,但并不是个大问题。 - Loïc Faure-Lacroix
Wayland 在一个封闭的环境中可能在技术上是完美的,但是当需要完成任务时,你必须使用 X。 - WinEunuuchs2Unix
2BionicBeaver/ReleaseNotes中翻译:“X是默认的显示服务器。Wayland作为技术预览提供,并预计将成为20.04 LTS的默认显示服务器。要尝试它,只需在登录屏幕上选择Ubuntu on Wayland。现在可以在~/.local/share/xorg找到X.org日志。” [我强调] - Dennis Williamson
回顾一下2013年的linuxconf.au上关于Wayland和X背后真实故事的视频,对于想要深入了解X开发者的背景知识来说是非常值得一看的:https://www.youtube.com/watch?v=GWQh_DmDLKQ - mrlitsta
22.04 LTS刚刚将Wayland设为默认选项,现在我无法进行屏幕共享,所以我不得不手动切换回X。对于Ubuntu团队来说,放弃对屏幕共享的默认支持似乎是一个相当大的失误,因为现在有更多的人远程工作。 - Azuaron

在X和Wayland之间有很多不同之处。从图形方面来看,最大的区别可能是Wayland不进行任何绘制。
X有两个绘制API。其中一个是核心X11协议的一部分,这是古老、无用且无人使用的。另一个是XRender扩展,提供现代合成操作,以及渐变等其他功能。例如,Cairo就使用了这个API。X还有字体绘制API。
Wayland没有绘制API。Wayland客户端会获得一个DRM缓冲区句柄,基本上是指向某些图形内存的指针;Wayland不知道也不关心客户端如何绘制到该缓冲区。换成X术语来说,这意味着所有应用程序都可以进行直接渲染,绘制请求不需要经过服务器。
Wayland唯一进行的渲染是将客户端的缓冲区复制到屏幕上。
就好处而言,Wayland比X要简单得多,这应该使得它更容易维护 - 尽管其中一些简单性来自于将复杂性(例如:如何实际地在缓冲区上绘制,网络透明度)推到了堆栈的其他层。通过让客户端负责其所有渲染,Wayland使得客户端可以更加智能地处理诸如双缓冲等问题。
除了图形之外,还有其他好处。例如,对于隔离应用程序来说,这要容易得多。

4听起来像是微软的DirectX之类的东西? - Anwar
3我使用核心的X11协议绘图API,因为它比XRender更快。 - étale-cohomology
5我也对Wayland和systemd的微软氛围感到不满。而且,这并不是一件好事。它们违反了基本的软件开发规则。在systemd中,只是因为它对systemd的开发者更容易。在Wayland中,他们想要更快的游戏(?)和渲染,但却抛弃了很多好东西。 - Anders

所有其他帖子都强调了Wayland的好处,但并非一切都是好的。X相对于Wayland的最大优势在于X可以通过网络工作。X是网络透明的,你可以在终端上显示窗口,或者通过XDMCP在一个终端上显示完整的会话,而实际程序则在另一台通常更强大的机器上运行。 而像Wayland这样的东西,网络透明的概念已经消失了。 也许在如今的快速网络和其他协议(如VNC和RDP)的情况下,并不是那么需要网络透明性,只是为了完整起见,我想提一下这个问题。

这正是我认为X相对于提议的Wayland最大的优势。 - Kris Jace
3在Wayland中,屏幕共享在主要工具(如Zoom、Skype、Webex)中不再起作用了(虽然也许他们可以解决这个问题?)。 - Gavriel

在我看来,Wayland与X-Server相比的主要区别是更接近内核。随着图形驱动程序从X迁移到内核(称为内核模式设置,KMS),Wayland计划利用这个新功能来取代X。你可以期待看到以下内容...
与X相比,占用空间较小 - 因为显示由内核处理,Wayland不需要实现太多才能使用。这两方面都适用,因为我怀疑X转发(在另一台PC上查看一个屏幕)可能会消失。
KMS功能:能够在不重新启动X服务器的情况下更改屏幕分辨率(尽管我相信这个问题在一段时间前就已经在X中修复了,至少对于nvidia来说),对于intel芯片组的内核恐慌进行调试控制台(转向nouveau),如果你对这种事情感兴趣。
如果我有任何错误,请问有人可以纠正我吗?

4KMS和GEM不会将图形驱动程序移动到内核,只有一些小部分被移动到内核中(直接与硬件通信并需要在内核中的位,以便不同的驱动程序可以共存,例如写入I/O端口和管理内存)。KMS和GEM今天已经被X使用,至少对于现代开源驱动程序(intel,radeon,nouveau)是如此。顺便说一句:我严重怀疑将整个图形驱动程序移动到内核是否会被Linus接受... ;) - JanC
4哦,而且从我十多年前开始使用X时就已经可以改变屏幕分辨率了,根本不需要KMS。但是KMS可以让不同的驱动程序(例如控制台帧缓冲驱动程序、X驱动程序和现在的Wayland驱动程序)更容易地合作。过去,对于每个驱动程序来说,在某个特定时间点上,图形硬件处于什么“状态”并不总是明显的,因此需要进行很多猜测或依赖驱动程序的专有解决方案。 - JanC
1虽然X转发将不会完全消失,因为X仍然可以作为Wayland上的客户端使用。http://wayland.freedesktop.org有一个例子。但是,用X来做这种事情的方式相当糟糕。是时候替换它了。在许多情况下,像GTK与Broadway这样的东西可能是更好的方法。 - Jo-Erlend Schinstad
3RandR(Resize and Rotate)扩展允许您在不重启X服务器的情况下更改屏幕分辨率。 - Anonymous

简单来说,希望能有更好的图形效果(更少的错误,更快速,更易于使用)。 甚至可能会有以前不可能实现的东西。 我个人认为,这至少会给事情增添一些乐趣,因为竞争总是如此。

在日常工作中,任何人都会很快注意到两个小细节:
- Wayland消除了在X11中被认为难以修复的烦人问题。一个著名的例子是:在菜单打开或锁屏时使用功能键(扬声器音量、显示亮度等)。 - Wayland在输入设备方面更出色。首先,有更多选项可以配置触摸板,包括持久的轻敲即点击设置。

2Wayland如果程序因某种原因被锁定,情况会更糟。拥有不同的窗口管理器是一件好事。 我经常使用网络X11(每天)。在Wayland上,某些程序停止工作了(我使用的是Ubuntu 18.04)。 - Anders