[简单科普] 图形界面的一些事情

版本:202401271329
我发现很多人可能是没有关注过操作系统的构成。

先说 X:
分服务端和客户端,服务端程序提供客户端界面的合成。
很多人认为服务端,提供窗口的管理包括右上角的最大化最笑话。其实是错误的。
提供窗口的管理,是窗口管理器的工作,这是一个独立的程序。至于左上角的那几个控制图标其实是另一个程序,窗口装饰器的工作。这两个程序可以整合,但肯定不是 X 服务器提供的。
所以,一般情况下,X 环境,用户所用的图形环境,至少需要一个窗口管理器,一个用户界面程序组成。用户界面程序需要提供启动其他程序包括退出图形界面的功能(不然没法用,当然,这也是很多工业程序直接提供界面的地方)。

而这些必备程序,都要运行在同一个会话下面,这个会话管理需要由桌面管理器提供。
当然,桌面管理器并不是必须的。也可以让 X 直接启动一个客户端进程,这个客户端进程只要不退出,图形界面就在运行中。这其实也是 startx 命令的实现。
而桌面管理器。其实也是一个 X 的客户端进程,他提供不同用户去运行会话进程的功能。同时也提供其他的比如关机重启,还可以提供其他功能。
基于上面的程序组合,一个桌面环境,需要提供全套的内容。不然只能根据自己提供的功能,区别叫做“窗口管理器”“窗口装饰器”等等名称。

而 X 其实知识一个协议,而 X11 说的是第 11 版本。
协议的 Linux 程序实现,其实有 2 个,一个是 xorg,一个是 xfree86 (当然其实还有他选择)。xfree86 自己把自己弄成了敌人后,所有发行版都切换到了 xorg 。

而 X 有个问题,就是他从上古时代而来,内部设计上需要由 X 服务端提供渲染,这在远程访问上很具备性能优势,因为服务器程序只需要把自己得到的相关数据转发给客户端,那么客户段就可以在远程设备上进行渲染,降低了服务器端的工作压力,而且渲染前的数据,反而数据量可以更小。
但这导致了大量的应用程序和 X 服务器的数据交互,降低了性能。
所以,很多程序会选择自己渲染一个缓冲帧,之后告诉 X 服务器自己的显示数据只有这个缓冲帧,服务器就自然拿着一堆缓冲帧做二次合成为最终用户能看到的画面了。

而 wayland 协议的发布,其实就是直接只提供这个缓冲合成的功能,放弃了之前的 X 体系的那些服务器渲染的机制和对应的过程。
这样,wayland 的服务器端实现,其实只是一个收到所有应用程序自己渲染的数据,进行关系整合渲染后发送给显卡的程序。
而图形界面上的所有程序,都是 wayland 的客户端程序,他们自己实现自己的内部显示渲染,把自己的图形缓冲数据发送给 wayland 就行了。

而这样运行的情况下,同样存在如何管理窗口和进行用户界面管理的东西。
wayland 的合成器,功能上包括了 X 上面窗口管理器的功能,省下了一个程序的需求。
但是 X 上面的窗口装饰器,在 wayland 下面,原则上就是客户端程序自己的事情了。

好吧,突然还发现一个问题,桌面图标是怎么回事?
其实,桌面也是一个程序,是处于窗口层最底层的一个图形客户端程序而已。

1 Like