wayland 概述

wayland

背景

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

概述

wayland 是一种用于用于显示服务器的协议,它规定了客户端如何与服务器进行通信,也就是说 wayland 仅仅只是标准化
了客户端程序如何与显示服务器器进行通信,但其本身并不提供以及实现任何显示服务器的能力.

正式因为 wayland 只是一种协议,所以作为协议中服务器的角色,有着许多不同具体实现,其中 westonwayland 官方
提供一种参考实现, 而像其他实现比如说还有 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 客户端代码参考实现

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值