【Wayland】Wayland简介与定制指导

article/2025/10/10 23:58:32

Wayland与Weston简介

  • 由于某些原因。移植并定制一套基于Wayland的Compositor。
  • Wayland与Weston,是两个相辅相成的概念。这里简单总结一下:
  1. wayland是一套为“显示”服务的协议,基于C/S结构。它定制了一套标准的接口、基本通信方式。
  2. wayland提供了通信方式的实现(socket+epoll),并提供了“接口”的描述语言,以及将这套语言转换为代码的工具(scanner)
  3. Weston是基于Wayland协议,并实现了Compositor功能的,一套官方提供的Wayland compositor实现(可理解为基于wayland协议的compositor
  • 网上有些概念说的云里雾里的。简单说,wayland定制了一套协议,基于这套协议来实现“显示服务器”。Weston就是wayland官方给出的,显示服务器的 参考实现。

架构图

在这里插入图片描述

wayland

  • Wayland提供了Protocol的定义方式。Wayland的源码中在路径protocol文件夹下,定义了Wayland的核心协议。
  • 如wl_display: 用于获取display全局对象。
<interface name="wl_display" version="1"><description summary="core global object">The core global object.  This is a special singleton object.  Itis used for internal Wayland protocol features.</description>.....
</interface>
  • 基于wayland的Compositor实现,至少要实现wayland规定的核心协议。具体的核心协议,参加wayland官网(https://wayland.freedesktop.org/docs/html/ch04.html#sect-Protocol-Interfaces)
  • wayland源码中,除了协议部分。剩下的主要内容,就是实现了一个高效率的 Server+Client通信模式。
  • Server端,主要是使用epoll+socket监听Client端事件,并对收到的消息反序列化。
// epoll
int
wl_os_epoll_create_cloexec(void)
{int fd;#ifdef EPOLL_CLOEXECfd = epoll_create1(EPOLL_CLOEXEC);if (fd >= 0)return fd;if (errno != EINVAL)return -1;
#endiffd = epoll_create(1);return set_cloexec_or_close(fd);
}// socket
int
wl_os_socket_cloexec(int domain, int type, int protocol)
{int fd;fd = socket(domain, type | SOCK_CLOEXEC, protocol);if (fd >= 0)return fd;if (errno != EINVAL)return -1;fd = socket(domain, type, protocol);return set_cloexec_or_close(fd);
}
  • Client端:wayland-client提供了已实现的序序列化接口。具体的通信、序列化实现这里不详细介绍。
WL_EXPORT void
wl_proxy_marshal(struct wl_proxy *proxy, uint32_t opcode, ...)
{union wl_argument args[WL_CLOSURE_MAX_ARGS];va_list ap;va_start(ap, opcode);wl_argument_from_va_list(proxy->object.interface->methods[opcode].signature,args, WL_CLOSURE_MAX_ARGS, ap);va_end(ap);wl_proxy_marshal_array_constructor(proxy, opcode, args, NULL);
}
  • 总结:官方提供的Wayland源码,主要包括协议的定义、协议到代码的生成工具,以及一套实现好的通信模型。

Weston

  • Weston是基于wayland协议,实现的Compositor。
  • Weston的入口在(这里以2.0.0为例): weston2.0.0./compositor/main.c
int main(int argc, char *argv[])
{// 创建全局Display,并最终调用到wl_os_epoll_create_cloexecdisplay = wl_display_create();// 创建Compositorec = weston_compositor_create(display, &user_data);// 创建Shellif (wet_load_shell(ec, shell, &argc, argv) < 0)goto out;// while循环wl_display_run(display);
}
  • Weston中有四个主要部分:Shell、Compositor、Render、Input。
  1. Shell:窗口管理器,画面层级、窗口信息、窗口生命周期、Focus窗口等等一些偏向于业务层的处理。默认的shell为desktop-shell,同时提供了其他shell实现(如ivi-shell)
  2. Compositor:负责画面的合成,使用DRM连接output,将画面输出到实际显示设备。
  3. Render:负责渲染,比如gl-render,做一些纹理贴图操作。
  4. Input:libinput模块,与evdev、uvdev模块交互,从底层设备节点接收touch、key等输入。

移植与定制

目前国内很多系统采用Wayland/weston作为系统的Display Server,移植与定制大体有以下几个方面:

  1. 编译移植:基于项目采用的编译器进行编译移植。
  2. 系统对接与原生调试:调式原生代码,其实就是把原生的Sample跑起来。
  3. Shell定制、协议扩展:根据业务需要,选择一种Shell,并再其基础上定制Shell,扩展原生协议。
  4. 优化:显示性能、Input性能、日志优化、Debug工具开发等等。

http://chatgpt.dhexx.cn/article/wJaoIQy1.shtml

相关文章

display:weston:weston-simple-egl

写在前面&#xff1a; 客户端渲染 在Wayland架构中&#xff0c;客户端UI的所有呈现均由客户端代码执行&#xff0c;通常由客户端使用的图形工具包执行。 图形工具箱可以使用其希望呈现UI元素的任何方法&#xff1a;在CPU上进行软件呈现&#xff0c;使用GLES进行硬件呈现。 W…

Ubuntu 20.04 X86成功编译运行wayland、wayland-protocols、weston,亲测有效,踩了很多坑,完美解决。

编译前期准备&#xff1a; 1、更换国内源&#xff1a; #添加阿里源 deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse deb http://mirrors.aliyun.c…

weston 窗口管理 (1)

窗口管理 (1) 一、概述 在传统嵌入式场景下,通常只会运行一个UI程序,故相当于单窗口程序,无需桌面服务器的介入;在桌面系统下,对于每一个UI程序而言,它们的行为相比于嵌入式场景仍然没有发生改变,其对接的仍然是窗口,只不过在同一个时刻允许多个UI程序同时运行. 无论如何对于…

weston 简介

参考???weston wiki Weston - Gentoo Wiki weston (1): Linux man pages – code.tools Weston-1.12.0 非常详尽&#xff0c;多图慎入&#xff1a;Wayland与Weston简介 - 云社区 - 腾讯云 什么是weston&#xff1f; Wayland是一套display server(Wayland compositor)与…

waylandweston

简单地说&#xff0c;Wayland是一套display server(Wayland compositor)与client间的通信协议&#xff0c;而Weston是Wayland compositor的参考实现。其官网为http://wayland.freedesktop.org/。它们定位于在Linux上替换X图形系统。X图形系统经历了30年左右的发展&#xff0c;其…

weston 1: 编译与运行傻瓜教程

本人Kubuntu版本是22.04 sudo apt-get update sudo apt-get upgrade 进入主目录 cd $HOME/ mkdir install mkdir works vim ~/.bashrc export WLD$HOME/install source ~/.bashrc cd works wayland git clone https://gitlab.freedesktop.org/wayland/wayland.git cd …

weston input 概述

weston input 概述 零、前言 本文描述了有关于 weston (基于 wayland 协议一种显示服务器的实现) 中有关于输入设备管理的部分;为了聚焦于此,本文不会对 weston 整体或 wayland 协议进行过多的阐述. 考虑到读者可能存在不同的需求,采用分层次的描述方式,主要面向以下两类人群…

weston 2: 登录后直接启动weston配置

本人Kubuntu版本是22.04 名词&#xff1a;SDDM&#xff08;SDDM - Arch Linux 中文维基&#xff09;显示管理器 配置流程如下&#xff1a; 1.修改配置文件 a.配置.bashrc vim ~/.bashrc //以下内容删除 #export WLD$HOME/install #export LD_LIBRARY_PATH$WLD/lib/x86_64-…

Weston介绍

Weston结构说明 Weston源码结构 clients&#xff1a;wayland显示客户端应用 compositor&#xff1a;合成器进程&#xff08;服务端&#xff09;&#xff0c;窗体风 格样式处理 libweston&#xff1a;合成器以及客户端渲染处理以及驱动实现方式&#xff0c;以及wayland服务与客户…

Wayland/Weston 启动方式简介

前言 本文简单介绍 Weston 常用的几种 backend 启动方式。目前最新的 Weston 8.0.0 支持如下几种 backend&#xff1a; drm-backendfbdev-backendheadless-backendrdp-backendwayland-backendx11-backend 其中 headless-backend 不带任何 UI 界面&#xff0c;主要用于 westo…

weston设置

weston设置 屏幕旋转180度方法修改标题栏位置启动配置文件 屏幕旋转180度方法 编辑 /etc/xdg/weston/weston.ini文件&#xff0c;增加如下语句 [output] nameDSI-1 transform180其中name为你的显示屏名称&#xff0c;可以通过如下命令来查看显示屏名称&#xff1a; card0-DS…

Weston 窗口管理(2)

窗口管理(2) 本文基于 weston 分支 10.0.2 进行描述. 五、概述 本文为窗口管理(1)的续章,更多站在开发者角度,以 weston 的代码实现讲解窗口管理(1)中所实现的部分业务场景. 六、数据结构 在窗口管理(1)中曾经描述过 weston 具体的分层逻辑,如下: 再进一步可以把 WESTON_LAY…

01-weston 简介

参考​​​​​​weston wiki Weston - Gentoo Wiki weston (1): Linux man pages – code.tools Weston-1.12.0 非常详尽&#xff0c;多图慎入&#xff1a;Wayland与Weston简介 - 云社区 - 腾讯云 什么是weston&#xff1f; Wayland是一套display server(Wayland compos…

disunity的使用

1. 下载并安装好jdk: 下载地址&#xff1a;http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装教程&#xff1a;http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html 2.下载disunity: https://…

T-digest

目录 算法算法原理空间消耗及错误界限 示例T-digest的建立T-digest的查询 相关链接 上一篇博客中讲述了使用 R a n d o m Random Random算法进行 q u a n t i l e quantile quantile估算&#xff0c;详情可见Random&#xff0c;本博客将讲诉另外一个 q u a n t i l e quantile …

[反编译U3D]Decompile Unity Resources 修正

反编译unity project的资源文件&#xff0c;包括ios&#xff0c;android&#xff0c;pc等&#xff0c;仅供学习使用&#xff01; 1.disunity Examples 1.1disunityGUI 1.1.2DiunityGUI 使用方法 2.unity3d decompiler 3.UnityAssetsExplorer 反编译unity project的资源文件&…

edit distance 理解

一直没有理解到inert i delete j 的意思。看看图就可以明白了。 对于那道面试题&#xff1a;http://www.careercup.com/question?id6287528252407808 k-palindrome. 最精妙的地方在于只考虑 k 长度以内的改变&#xff0c;这样就可以判断出来了。速度是O(k*n) 1. Definition o…

Tiny-DSOD: Lightweight Object Detection for Resource-Restricted Usages

Y uxi Li1 lyxok1sjtu.edu.cn Jiuwei Li2 jiuwei.liintel.com Weiyao Lin1 wylinsjtu.edu.cn Jianguo Li2 jianguo.liintel.com 1Shanghai Jiao Tong University , China 2Intel Lab China Abstract 近年来&#xff0c;随着深度学习的发展&#xff0c;目标检测技术取得了长足…

android density

为什么要引入dip —The reason for dip to exist is simple enough. Take for instance the T-Mobile G1. It has a pixel resolution of 320x480 pixels. Now image another device, with the same physical screen size, but more pixels, for instance 640x480. This devic…