• 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
    
    • 1

    你将会得到几个比较重要的 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 客户端代码参考实现

  • 相关阅读:
    springsecurity实现单点登录
    闭眼检测实现
    mysql查询:行转列与列转行
    Linux:进程地址空间的简易认识
    RK3588 Android13 TvSetting 中性能浮窗RAM显示bug
    mysql备份和恢复
    天天项目管理软件
    数据探索与分析的瑞士军刀:深入Python的pandas库
    zabbix监控平台部署(二)
    python opencv把yuv格式转bgr
  • 原文地址:https://blog.csdn.net/weixin_45449806/article/details/127906468