2. Wayland协议基础
任务说明
本案例要求通过阅读Wayland官方文档与参考实现源码,梳理Wayland的客户端-服务端架构,并理解核心协议对象(wl_display、wl_compositor、wl_surface等)以及请求(request)/事件(event)的通信流程。最终交付物为一份架构梳理文档与一张协议交互时序图,不要求编写业务代码。
环境准备
- Linux主机(推荐Ubuntu 22.04+),已安装
weston(参考合成器)与wayland-utils(提供wayland-info工具)。 - 安装命令:
sudo apt install weston wayland-utils - 源码阅读路径:
/usr/include/wayland-client-core.h、/usr/include/wayland-server-core.h(协议头文件);在线协议定义见https://gitlab.freedesktop.org/wayland/wayland/-/blob/main/protocol/wayland.xml
架构梳理要点
Wayland采用客户端-服务端模型,服务端为合成器(Compositor,如Weston),客户端为GUI应用。通信通过Unix域套接字进行,协议定义在wayland.xml中。核心对象关系如下:
- wl_display:连接入口,管理客户端与服务端之间的套接字通信,负责事件循环与消息分发。
- wl_registry:客户端通过它向服务端请求全局对象列表,绑定
wl_compositor、wl_shm等全局接口。 - wl_compositor:核心图形接口,客户端通过其
create_surface请求创建wl_surface。 - wl_surface:代表一块可显示的画布,客户端将内容提交到其上,由合成器合成输出。
- wl_shm:共享内存机制,用于在客户端与服务端之间传递像素缓冲区。
请求(Request)由客户端发出,服务端处理;事件(Event)由服务端发出,客户端监听。例如客户端调用wl_registry_bind是请求,服务端返回全局对象是事件。整个通信为异步消息传递,客户端通过wl_display_dispatch或wl_display_roundtrip处理事件。
协议交互流程(SVG时序图)
验证方法
运行weston启动合成器,在另一个终端执行wayland-info。若输出中包含wl_compositor、wl_shm等全局接口列表,说明客户端与服务端通信链路正常。随后可运行weston-simple-shm示例程序(若已安装),观察窗口正常显示即验证了wl_surface创建、缓冲区提交与合成显示的全流程。
判定标准:wayland-info能列出至少5个全局接口;weston-simple-shm能弹出并正常渲染一个色块窗口,且关闭时无错误输出。