用Firefly开发板烧写ubuntu固件进行开发时,安装一些开发软件,例如:QT,或者编译测试osg时,但凡遇到跟openGL有关的,都会涉及到Linux的显示服务器。

因为我开发过程中遇到的错误都是跟显示服务器有关,本人烧写的ubuntu固件版本是20.04,默认启用Wayland,但是报错的时候经常显示的是X11错误处理什么的,给我带来特别大的麻烦和困扰。

这里记录和普及一下这方面的知识

您是否知道X Server,Xorg,X11,Wayland以及诸如此类的东西到底是什么?Wayland vs Xorg,哪个更好?接下来就为您详细讲解。

您总是会遇到这些术语,并且知道它们与图形有关,但您可能想更深入了解它们。

Linux中的显示服务器是什么?

显示服务器是一个程序,其主要任务是协调客户端与其他操作系统,硬件以及彼此之间的输入和输出。显示服务器通过显示服务器协议与其客户端进行通信。

显示服务器是任何图形用户界面(尤其是窗口系统)中的关键组件。它是图形用户界面(GUI)的基本组件,位于图形界面和内核之间。因此,借助显示服务器,您可以将计算机与GUI一起使用。没有它,您将只能使用命令行界面。

不要将显示服务器与桌面环境混淆是非常重要的。桌面环境(Gnome、KDE、Xfce、MATE等)使用了底层的显示服务器。

比如:Ubuntu 21.04现在默认启用Wayland

显示服务器通过显示服务器协议与其客户端进行通信。Linux中提供了三种显示服务器协议。X11和Wayland是其中两个。第三个Mir超出了本文的范围。

X Window System, X.Org, X11介绍

X Window System(通常仅称为X或X11)确实很古老。它最初起源于1984年,最终成为大多数类似UNIX的操作系统(包括Linux)的默认窗口系统。

X.Org服务器是X.Org基金会管理的X Window System显示服务器的免费开放源代码实现。它是一个通过X11协议与客户端应用程序进行交互的应用程序,用于在显示器上绘制内容并发送输入事件,例如鼠标移动,单击和击键。通常,将启动一个X服务器,它将等待客户端应用程序连接到它。Xorg基于客户端/服务器模型,因此允许客户端在另一台计算机上本地或远程运行。

在X11的设计中,应用程序和显示器不必在同一台计算机上,这一点并不明显。在开发X时,X server运行在工作站上,而用户在具有更强处理能力的远程计算机上运行应用程序是很常见的。

X11 是网络协议。它描述了如何在客户端(应用程序)和显示器(服务器)之间交换消息。这些消息通常带有原始的绘制命令,例如“绘制框”,“在此位置写这些字符”,“已单击鼠标左键”等。

但是X11已经很古老了,X server协议提供的大部分功能不再使用。X11所做的几乎所有工作都重新分配给了各个应用程序和窗口管理器。然而,所有这些旧特性仍然存在,给所有这些应用程序带来了压力,损害了性能和安全性。

下一代显示服务器Wayland

Wayland 由X.Org开发人员Kristian Hogsberg于2008年作为个人项目开始。它是一种通信协议 ,用于指定显示服务器与其客户端之间的通信。Wayland是作为一个免费的开源社区驱动的项目而开发的,目的是用现代,安全和简单的窗口系统代替X Window System(也称为X11或Xorg)。

在Wayland中,合成器是显示服务器。Compositor是一个窗口管理器,它为应用程序提供每个窗口的屏幕外缓冲区。窗口管理器将窗口缓冲区合成为代表屏幕的图像,并将结果写入显示内存。

Wayland协议允许合成器将输入事件直接发送到客户端,并让客户端将损坏事件直接发送到合成器。

与X情况一样,客户端在接收到事件时会作为响应更新用户界面(UI)。但是,在Wayland中,渲染发生在客户端中,并且客户端只是向合成器发送请求以指示已更新的区域。

Wayland与X相比的主要优势在于它是从头开始的。X的复杂性的主要原因之一是,多年来,它的作用已经改变。结果,今天,X11很大程度上充当了客户端和窗口管理器之间的“一个非常糟糕的”通信协议。

Wayland在安全性方面也很出色。使用X11,可以通过允许任何程序在后台存在并读取X11区域中打开的其他窗口所发生的事情来执行称为“键盘记录”的操作。使用Wayland,这根本不会发生,因为每个程序都是独立工作的。

如何知道Linux系统使用哪种显示服务器?

$ echo $XDG_SESSION_TYPE

总结

但是,与Wayland相比,X Window System仍具有许多优势。即使Wayland消除了Xorg的大多数设计缺陷,它也有其自身的问题。即使Wayland项目已经进行了十多年,事情还是不是100%稳定的。截至2020年,大多数用于Linux的视频游戏和图形密集型应用程序仍为X11编写。另外,许多封闭源代码的图形驱动程序,例如NVIDIA GPU的驱动程序,都尚未完全提供对Wayland的支持。

X不能持久,Wayland在许多方面都可以改善。但是到目前为止,现有的绝大多数本机应用程序都是为Xorg编写的。在移植所有这些应用程序之前,需要维护Xorg。与Xorg相比,Wayland还不是很稳定。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐