强烈推荐在阅读本文前先浏览以下文档:
wayland 是一种用于用于显示服务器的协议,它规定了客户端如何与服务器进行通信,也就是说 wayland
仅仅只是标准化
了客户端程序如何与显示服务器器进行通信,但其本身并不提供以及实现任何显示服务器的能力.
正式因为 wayland
只是一种协议,所以作为协议中服务器的角色,有着许多不同具体实现,其中 weston 是 wayland
官方
提供一种参考实现, 而像其他实现比如说还有 GNOME (目前已经确定应用于 ubuntu21.x 作为默认的显示服务器取代 x 11).
wayland
相比如传统的协议标准在于它不仅定义了基于文本的协议描述,并且提供了一套标准的 C SDK 接口, 对于开发着而言,更多的接触到是 C SDK, 在 debain
系统下, 相关依赖这么这么解决:
sudo apt install libwayland-dev libwayland-bin wayland-protocols
你将会得到几个比较重要的 SDK :
观察 wayland
的构建过程就能发现 wayland
使用的是 Code Generator
的方式, wayland
的协议标准是使用 xml
进行描述的,
而 wayland-scanner
则能将 xml
生成对应的协议的 C 语言文件.
wayland
最基础的协议标准内嵌进入了 libwayland-xxx.so
中; 但是 wayland
允许协议进行拓展, 用户可以使用描述拓展协议的 xml
文件生成对应源代码,并添加进入自己的工程项目,则完成了协议拓展,这一个过程的点典范就是 xdg-shell.
wayland
的所有协议制定都是基于异步的,也就是不会出现任何由于同步请求造成的阻塞现象; 基于此, wayland
的通信机制是基于 请求 和 事件 典型的异步设计模型.
wayland
客户端需要按照类似于 wayland-client-protocol.h
中定义的 wl_xxx_listener
提前将回调接口设计并注册至 wayland
显示服务器, wayland
将这些
回调函数按照功能进行了分类,常见的有以下几类:
buffer
还给客户端.