首页 > 编程学习 > wayland 概述

wayland 概述

发布时间:2022/11/18 9:35:32

wayland

背景

强烈推荐在阅读本文前先浏览以下文档:

  • Wayland Architecture

概述

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 :

  • libwayland-client.so : 客户端接口
  • libwayland-cursor.so : 鼠标相关
  • libwayland-egl.so : 暂未深入

观察 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 将这些
回调函数按照功能进行了分类,常见的有以下几类:

  • Input : 输入事件, 鼠标 、触摸、键盘等.
  • Output : 输出事件, 如服务器将 buffer 还给客户端.
  • Surfaces : 图层相关操作,对于 UI 程序而言,可以理解为这是一种完整的画布或者独立的窗口.
  • Drag and Drop : 拖拽事件
  • … : 待补充,未使用到

参考资料

  • Wayland Architecture
  • Wayland Protocol and Model of Operation

wayland 客户端代码参考实现

  • lv_driver/wayland
Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式