合成器有不同的类型,这取决于它们在操作系统的整体架构中扮演的角色。例如,系统合成器可用于启动系统、处理多用户切换、可能的控制台终端仿真器等。另一种合成器—会话合成器将提供实际的桌面环境。不同类型的合成器可以通过多种方式共存。
在本章节中,我们将介绍三种依赖于 libwayland-server 的 Wayland 合成器。
系统合成器
系统合成器可以从系统启动早期,运行到系统关闭。它有效地替代了内核 vt 系统,并且可以配合系统图形引导设置和多重支持。
系统合成器可以托管不同类型的会话合成器,并让我们在多个会话之间切换(快速用户切换,安全或者个人桌面切换)。
系统合成器的 linux 实现通常会使用 libudev、egl、kms、evdev 和 cairo。
对于全屏客户端,系统合成器可以重新编程视频扫描地址,从而直接从客户端提供的缓冲区中读取数据。
会话合成器
会话合成器负责单个用户会话。如果系统合成器存在,会话合成器将嵌套在系统合成器下运行。嵌套是可行的,因为协议是异步的;当涉及嵌套时,往返会太昂贵。如果不存在系统合成器,会话合成器可以直接在硬件上运行。
X 应用程序依然可以运行在会话合成器中,只不过是通过一种按需激活的无根 X 服务器方式而已。
会话合成器的示例包括:
- gnome-shell
- moblin
- kwin
- kmscon
- rdp session
- 带有 X11 或 Wayland 后端的 Weston 是嵌套在另一个会话合成器中的会话合成器
- Wayland 下的全屏 X 会话
嵌套合成器
X11 允许客户端嵌入来自其他客户端的窗口,或者允许客户端将另一个客户端呈渲染的像素图内容复制到他们的窗口中。这通常用于面板中的小程序、浏览器插件等。 Wayland 不直接允许这样做,但是客户端可以在叫做带外的GEM 缓冲区进行通信 ,例如,在面板启动小程序时使用 D-Bus 或命令行参数。另一种选择是使用嵌套的 Wayland 实例。为此,Wayland 服务器必须是一种宿主应用程序能够链接到的库。宿主应用程序将 Wayland 服务器套接字名称传递给嵌套应用程序,并且需要实现 Wayland 合成器接口。宿主应用程序将客户端表面组合为它的窗口的一部分,即在网页或面板中。嵌套 Wayland 服务器的好处是它提供了嵌套客户端通知主机有关缓冲区更新的请求,以及从主机应用程序转发输入事件的机制。
这种设置的一个例子是 firefox 嵌入 Flash 播放器作为一种特殊用途的合成器。
说明
本文翻译来自于官网Types of Compositors