Wayland 协议(中文)—— 第二章. 合成器的类型

第二章. 合成的类型

合成器有不同的类型,取决于它们在操作系统的整体架构中扮演的角色。例如,一个系统合成器可以用于引导系统、处理多个用户切换、一个可能的控制台终端模拟器等等。一个不同的合成器、会话合成器将提供实际的桌面环境。有许多方法可以让不同的合成器共存。

在本节中,我们将介绍三种依赖于 libwayland-server 的 Wayland 合成器

系统合成器

系统合成器可以从早期启动一直运行到关机。它可以有效地代替内核 vt 系统,并且可以与系统图形引导设置和多座位支持相结合。

一个系统合成器可以承载不同类型的会话合成器,并且让我们在多个会话(快速用户切换,或者安全/私人桌面切换)之间切换。

系统合成器的 linux 实现通常使用 libudev、egl、kms、evdev 和 cairo。
对于全屏客户端,系统合成器可以重新编程视频扫描地址直接从客户端提供的缓冲区读取。

会话合成器

一个会话合成器负责单一的用户会话。如果存在系统合成器,会话合成器将嵌套在系统合成器下运行。嵌套是可行的,因为协议是异步的;当涉及到嵌套时,往返的开销会很大。如果没有系统合成器,会话合成器可以直接在硬件上运行。

X 应用程序可以通过按需激活的无 Root X 服务器继续在会话合成器下工作。

会话合成器的实例包括:

  • gnome-shell
  • moblin
  • kwin
  • kmscon
  • rdp session
  • Weston 与 X11 或 Wayland 后端是嵌套在另一个会话合成。
  • 在 Wayland 下的全屏 X 会话

嵌套合成器

X11 允许客户端从其他客户端嵌入窗口,或允许客户端将另一个客户端呈现的 pixmap 内容复制到其窗口中。这通常用于面板、浏览器插件或类似内容的小程序。wayland 不允许直接这么做,但客户端可以在协议外传达 GEM 缓冲区的名称,例如,使用 D-Bus,或者在面板启动小程序时传递命令行参数。另一种选择是使用嵌套的 Wayland 实例。为此,Wayland 服务器必须是主机应用程序链接到的库。然后主机应用程序把 Wayland 服务器插座名称传递到嵌入式应用程序,并且需要实现 Wayland 合成器接口。主机应用程序将客户端的材质组合为其窗口的一部分,即在网页或者面板中。嵌套 Wayland 服务器的好处是,它提供了嵌入式客户端需要的请求,以便将缓冲区更新通知主机,并提供了从主机应用程序转发输入事件的机制。

这种设置的一个例子是 Firefox 嵌入 flash 播放器作为一种特殊用途的合成器。