【Wayland】Wayland协议说明

6 篇文章 16 订阅
订阅专栏
Wayland是一种窗口管理协议,定义了DisplayServer与DisplayClient间的通信方式。Weston是其参考实现,提供窗口管理组件。协议基于消息,采用异步面向对象模型。通过XML定义接口,使用Scanner工具生成客户端和服务端代码。错误处理、同步请求和全局对象管理是核心接口。
摘要由CSDN通过智能技术生成

Wayland协议说明

Wayland基本概念

什么是wayland?

  • 它是一种窗口管理协议。简单理解,wayland是一套Display Server与Display Client间通信的协议。Wayland定义了一套标准协议,并规定这套协议中的核心对象(https://wayland.freedesktop.org/docs/html/ch04.html#sect-Protocol-Interfaces)。

Weston是什么?

  • Wayland只是一套协议,一套规范。Weston是wayland官网给出的关于Wayland Compositor的一套参考实现。

不深究细节的话,可以稍微简单的把Weston直接理解为,wayland官方给出的,遵循Wayland协议的,一套了窗口管理的组件。

几个概念

  • 异步面向对象的协议:wayland中所有的请求,都是对”对象“的方法调用。这里的请求,可以理解为Client对Server端的功能请求。
    在这里插入图片描述
  • 基于消息的协议:wayland是基于消息的协议。Server和Client两端间,通过消息交互。Wayland协议规定了消息的固定格式。详细请参考官网 (https://wayland.freedesktop.org/docs/html/ch04.html#sect-Protocol-Wire-Format)
    在这里插入图片描述
    scanner代码生成
  • 一般来讲,如果定义了某套协议规范。基本上都会有一套,与之相应的代码生成方式。Wayland协议代码生成,类似于AIDL、FIDL等接口协议。如下图,遵循协议规范的xml文件(文件内容,根据wayland协议接口规范编写),利用wayland提供的工具,生成对应的源码文件。
    在这里插入图片描述

Wayland协议

  • wayland协议在表现上为,一系列Interface的组合。Interface包括Request和Event。
  • 一系列的Interface分为两部分,Core和扩展两部分,其中Core为wayland协议规定,必须实现的Interface。
    在这里插入图片描述
协议语义语法

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码生成

  • 注意,下述生成的源文件,只是相关的Interface的定义。只是接口的定义,关于接口定义的实现,在另一部分(例如weston)。Interface功能的实现,不在这里介绍。
# 生成Client端文件
./scanner client-header wayland.xml wayland-client-protocol.h
# 生成Server端头文件
./scanner server-header wayland.xml wayland-server-protocol.h
# 生成共同代码
./scanner code  wayland.xml wayland-protocol.c

生成代码部分截取

  • wayland-server-protocol.h
@ingroup iface_wl_display										
@struct wl_display_interface										
/										
struct wl_display_interface {		// wl_display +interface						
/**										
asynchronous roundtrip				// 这段注释跟上面xml写的是一样的						
The sync request asks the server to emit the ‘done’ event on										
the returned wl_callback object. Since requests are handled										
in-order and events are delivered in-order, this can be used as										
a barrier to ensure all previous requests and the resulting										
events have been handled.										
The object returned by this request will be destroyed by the										
compositor after the callback is fired and as such the client										
must not attempt to use it after that point.										
The callback_data passed in the callback is the event serial.										
/										
void (*sync)(struct wl_client *client,	// Server端的接口,以函数指针形式定义					
   struct wl_resource *resource,		// client +resource是wayland协议自动补全的					
   uint32_t callback);					// 其实就是类似于C++成员函数里,有一个隐含的this指针形参一样					
/**										
get global registry object										
This request creates a registry object that allows the client										
to list and bind the global objects available from the										
compositor.										
/										
void (*get_registry)(struct wl_client *client,										
       struct wl_resource *resource,										
       uint32_t registry);										
};										
										
										
										
#define WL_DISPLAY_ERROR 0 					// Event(Error)的宏定义					
										
#define WL_DISPLAY_ERROR_SINCE_VERSION  1										
										
										
#ifndef WL_DISPLAY_ERROR_ENUM					// Enmu的定义					
										
#define WL_DISPLAY_ERROR_ENUM										
/**										
										
@ingroup iface_wl_display										
global error values										
These errors are global and can be emitted in response to any										
server request.										
/										
enum wl_display_error {										
/**										
server couldn’t find object										
/										
WL_DISPLAY_ERROR_INVALID_OBJECT = 0,										
/**										
method doesn’t exist on the specified interface										
/										
WL_DISPLAY_ERROR_INVALID_METHOD = 1,										
/**										
server is out of memory										
/										
WL_DISPLAY_ERROR_NO_MEMORY = 2,										
};										
#endif /* WL_DISPLAY_ERROR_ENUM */										
										

  • wayland-client-protocol.h
// define WL_DISPLAY_SYNC 0								// 方法定义的宏(OpeID)		
										
										
/**											
@ingroup iface_wl_display										
										
The sync request asks the server to emit the ‘done’ event										
										
on the returned wl_callback object. Since requests are										
										
handled in-order and events are delivered in-order, this can										
										
be used as a barrier to ensure all previous requests and the										
										
resulting events have been handled.										
										
The object returned by this request will be destroyed by the										
										
compositor after the callback is fired and as such the client must not										
										
attempt to use it after that point.										
										
The callback_data passed in the callback is the event serial.										
										
/										
static inline struct wl_callback *										
wl_display_sync(struct wl_display *wl_display)	// Client端 对应的接口										
{										
struct wl_proxy *callback;										
										
callback = wl_proxy_marshal_constructor((struct wl_proxy *) wl_display,										
       WL_DISPLAY_SYNC, &wl_callback_interface, NULL);										
return (struct wl_callback *) callback;										
}										
										
										
										
/**	
										
@ingroup iface_wl_display										
@struct wl_display_listener										
/										
struct wl_display_listener {	// Client端 Event接口								
/**										
fatal error event										
The error event is sent out when a fatal (non-recoverable)										
error has occurred. The object_id argument is the object where										
the error occurred, most often in response to a request to that										
object. The code identifies the error and is defined by the										
object interface. As such, each interface defines its own set of										
error codes. The message is an brief description of the error,										
for (debugging) convenience.										
/										
void (*error)(void *data,										
    struct wl_display *wl_display,										
    void *object_id,										
    uint32_t code,										
    const char *message);										
/**										
acknowledge object ID deletion										
This event is used internally by the object ID management										
logic. When a client deletes an object, the server will send										
this event to acknowledge that it has seen the delete request.										
When the client receive this event, it will know that it can										
safely reuse the object ID.										
/										
void (*delete_id)(void *data,										
    struct wl_display *wl_display,										
    uint32_t id);										
};					
  • wayland-protocol.c
static const struct wl_message wl_display_requests[] = { // request	
{ “sync”, “n”, types + 8 },							
{ “get_registry”, “n”, types + 9 },								
};								
								
static const struct wl_message wl_display_events[] = {	 // event	
{ “error”, “ous”, types + 0 },								
{ “delete_id”, “u”, types + 0 },								
};								
								
WL_EXPORT const struct wl_interface wl_display_interface = { // interface	
“wl_display”, 1,								
2, wl_display_requests,								
2, wl_display_events,								
};								
Wayland 简介
basilc的专栏
10-15 2609
什么是 Wayland   Wayland 是一个开源项目,旨在创建 Linux 下新型的显示服务器架构(displayserver architecture),由任职于 Intel 的Kristian Høgsberg 在 2008 年发起(发起时任职于 Red Hat),目前已经接近发布 1.0 版(现在已经发布了 0.99 版)。 Wayland 的目标是替代 X,提供一个简单
wayland v1.3协议说明
02-01
这些客户端遵循Wayland协议来与显示服务器交互,发送和接收消息,以实现图形界面的显示和操作。 4. West WestonWayland协议的参考实现,它是一个轻量级的显示服务器。Weston展示了如何使用Wayland协议构建一个...
Wayland 协议定义及分发
u012794472的专栏
05-19 1317
1. 协议定义: Wayland核心协议是通过protocol/wayland.xml这个文件定义的。它通过wayland_scanner这个程序扫描后会生成wayland-protocol.c, wayland-client-protocol.h和wayland-server-protocol.h三个文件。wayland-client-protocol.h是给Client用的;wayland-server-protocol.h是给Server用的; wayland-protocol.c描述了接口,Cli
Wayland协议了解
Linux Openharmony Android Graphics Stack!
04-21 8976
一 什么是wayland Wayland协议,通俗的讲就是一个定义怎么来进行窗口管理的协议。 什么叫窗口管理呢? 我们知道在Windows操作系统上有很多很多的应用程序,在启动该应用程序之后,一般会弹出一个该应用程序的窗口。 这个窗口是怎么产生的? 太深入理解没必要,我们只需要知道,我们在创建窗口的时候都是必须调用指定的接口才可以创建,是吧? 这个接口就相当于窗口管理的协议提供的接口。 各种形形色色的接口在不同的操作系统上是不一样的,因此如果我们要创建窗口,在不同的操作系统上就需要不同的代码,因此,
推荐项目:wlroots-eglstreams —— 打开NVidia的EGLStreams之门,面向未来显示技术的Wayland构建设施...
最新发布
gitblog_00883的博客
09-04 900
推荐项目:wlroots-eglstreams —— 打开NVidia的EGLStreams之门,面向未来显示技术的Wayland构建设施 wlroots-eglstreamsA modular Wayland compositor library with EGLStreams support项目地址:https://gitcode.com/gh_mirrors/wl/wlroots-egls...
Wayland协议解析
sunxiaopengsun的专栏
11-11 605
Wayland协议解析 一 什么是Wayland Wayland协议解析 二 Wayland中的数据结构解析 Wayland协议解析 三 Wayland的工作原理 Wayland协议解析 四 Wayland的所有接口 Wayland协议解析 五 Wayland窗口创建流程 Wayland协议解析_xiaoyan_yt的博客-CSDN博客_wayland协议 ...
The Wayland Protocol —新手入门学习(二)
江湖小浪花的博客
12-30 1212
窗口管理讲的是什么?我们了解在Windows操作系统上有很多很多的应用程序,我们去启动应用程序之后,一般会弹出一个该应用程序的窗口。我们在创建窗口的时候都是必须调用指定的接口才可以创建,这个接口就相当于窗口管理的协议提供的一个接口。各种各样的接口在不同的操作系统上是不一样的,如果我们要创建窗口,在不同的操作系统上就需要不同的代码,因此,跨平台就是件很麻烦的事情。然而,在这种情况下,涌现出了大量跨平台的框架,他们把和操作系统相关的创建窗口的接口封装了起来,然后通过提供统一的接口给用户。
wayland详解
浩瀚之水的专栏
02-10 7242
简单地说,Wayland是一套display server(Wayland compositor)与client间的通信协议,而WestonWayland compositor的参考实现。其官网为http://wayland.freedesktop.org/。它们定位于在Linux上替换X图形系统。在X系统中,X Server作为中心服务,连接clien和硬件以及compositor。但时至今日,X Server就显得比较累赘了。Wayland在架构上去掉了这个中间层,将compositor作为displ
Wayland的核心协议,xml
12-30
Wayland的核心协议,xml
ocaml-wayland:纯OCaml Wayland协议实现
03-05
纯OCaml Wayland协议库 状态:原型制作 Wayland是一种通信协议,旨在在单台计算机上的进程之间使用。 它主要由图形应用程序(客户端)用于与显示服务器进行通信,但是有关该协议的任何信息都不特定于图形,并且可以...
wayland-rs:Wayland协议(客户端和服务器)的Rust实现
02-05
wayland-rs:Wayland协议(客户端和服务器)的Rust实现
wayland-explorer:轻松浏览和阅读Wayland协议文档
04-06
韦兰探险家 轻松浏览和阅读Wayland协议文档。 这个项目的动机 Wayland协议以XML文件的形式发布。 虽然规范也可以HTML格式提供以阅读,但并非核心协议一部分的所有却并非如此。 该项目试图通过解析XML协议文件并将其转换为HTML来填补这一空白,以使其易于在网络上浏览和阅读。 技术领域 内置 :sparkling_heart: 使用React, 和 。 免责声明 该项目与Wayland官方项目无关。
simpleway:使SimpleWM适应Wayland协议
02-12
标题 "simpleway:使SimpleWM适应Wayland协议" 指出的是一个项目,目标是将SimpleWM窗口管理器更新和调整,以便它能够与Wayland显示协议兼容。Wayland是一种现代的、安全的图形服务器协议,用于替代X Window System...
萨德伯里:Haskell实施Wayland协议
02-02
**萨德伯里:Haskell实现Wayland协议** 在现代Linux桌面环境中,Wayland协议扮演着至关重要的角色,它作为窗口系统替代了传统的X Window System。Wayland提供了一个安全、高效的框架,允许图形服务器(如 Weston)...
Wayland 协议介绍-笔记
SHIXINGYA的专栏
08-06 582
Wayland is intended as a simpler replacement for X, easier to develop and maintain. GNOME and KDE are expected to be ported to it. Wayland 旨在作为 X 的更简单替代品,更易于开发和维护。 GNOME 和 KDE 预计将被移植到它。 Wayland is a protocol for a compositor to talk to its clients as w
Wayland 协议的解析
weixin_34117211的博客
10-06 715
Wayland 首先是一种协议(Compositor 与客户端之间进行通信的协议),然后才是对协议的实现。所以第一步是协议的定义。 1. Wayland 协议的定义 Wayland 协议使用 XML 文件来定义。其核心协议文件为: wayland/protocol/wayland.xml 下面的代码片段节选自 wayland.xml,从中我们可以看到...
The Wayland Protocol —新手入门学习(一)
江湖小浪花的博客
02-10 816
Wayland是什么呢?它是X Window?还是要取代X Window?Linux桌面/移动会因此有什么变化?在本篇中,我将回顾历史,通过简易的文字,来先回顾一下X Window,从而继续解答Wayland——古老的X Window和现代的桌面技术。X Window在1984年由MIT研发,它的设计哲学之一是:提供机制,而非策略。
Wayland协议-官网翻译
pk0127的博客
06-06 491
文章目录版权申明简介目录说明 Kristian Høgsberg Intel Corporation krh@bitplanet.net 版权申明 版权所有 © 2012 Kristian Høgsberg,英特尔公司 特此授予任何人免费获得本软件和相关文档文件(“软件”)副本的许可,不受限制地处理本软件,包括但不限于使用、复制、修改、合并的权利、发布、分发、再许可和/或出售软件的副本,并允许向其提供软件的人员这样做,但须符合以下条件: 上述版权声明和本许可声明(包括下一段)应包含在本软件的所有副本或重要部
写文章

热门文章

  • MATLAB数字图像处理(一)图像的基本操作 123093
  • 一维条形码检测与识别原理 55211
  • 【Shell】shell执行linux命令 43625
  • MATLAB数字图像处理(二)直方图 43598
  • 【Shell】判断文件是否包含给定字符串 37063

分类专栏

  • Qnx 6篇
  • AndroidFramework 12篇
  • Qt 3篇
  • wayland 6篇
  • CEGUI 6篇
  • Chromium 13篇
  • DDS 4篇
  • C++ 86篇
  • OpenCV 14篇
  • 计算机视觉 14篇
  • Linux 35篇
  • Python 3篇
  • MATLAB 5篇
  • JavaScript 11篇
  • Android 18篇
  • 运维 53篇

最新评论

  • 线程系统调用阻塞是否导致进程阻塞的问题

    过299: 多对多可以了解一下Go中的GMP模型

  • 【Gstreamer】自定义Plugin及调用Plugin

    林多: 当时写了两个例子。应该是弄混了表情包

  • 【通信中间件】Fdbus HelloWorld实例

    林多: -Dfdbus_LOG_TO_STDOUT=ON。博客漏记的部分已更新。

  • 【通信中间件】Fdbus HelloWorld实例

    林多: 可能是你指定的路径有误。确认一下cmake文件存在的路径吧

  • 【通信中间件】Fdbus HelloWorld实例

    weixin_39389691: 为什么编译protobuf时,会提示cmake文件夹下没有CMakeLists.txt

大家在看

  • Java基础(一)
  • 24.10.23
  • ssm基于web的马病管理系统设计与实现+jsp
  • 华为云购买弹性云服务器(教程)
  • 【MySQL】提高篇—视图与存储过程:存储过程(Procedure)的创建与调用 172

最新文章

  • 【Android】JNI报错 non-zero capacity for nullptr pointer分析
  • 【Android】CarWatchDog I/O监控服务
  • 【Qnx】使用ClockCycles完成计时功能
2024年20篇
2023年24篇
2022年15篇
2021年1篇
2020年16篇
2019年53篇
2018年65篇
2017年47篇
2016年41篇
2015年7篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林多

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值

玻璃钢生产厂家南昌玻璃钢雕塑在那南阳公园标识玻璃钢彩绘雕塑江西景观玻璃钢雕塑定做价格深圳人物雕像玻璃钢雕塑工厂河源led发光玻璃钢雕塑现货赤峰人物玻璃钢雕塑制作江西胜天祥玻璃钢雕塑公司池州佛像玻璃钢雕塑北京玻璃钢花盆厂家中庭商场美陈生产企业东莞定制玻璃钢人物雕塑耒阳玻璃钢长颈雕塑玻璃钢雕塑求购网泰州玻璃钢仿铜雕塑厂家供应商场春季美陈门头甘肃玻璃钢卡通雕塑定制河南大型商场美陈市场报价玻璃钢景观雕塑多少钱一平方河北户外商场美陈供应商广东特色玻璃钢花盆景观小品玻璃钢玫瑰花雕塑北碚玻璃钢雕塑造型茂名玻璃钢动物雕塑包括哪些晋城玻璃钢房地产水景雕塑东城区商场美陈公司报价山东特色商场美陈供应商酒店玻璃钢雕塑定做河南玻璃钢人物雕塑报价玻璃钢字母座椅雕塑淮北景区玻璃钢雕塑哪家便宜香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化