Wayland入门教程索引
说明
公司客户某研究所会经常使用VAPS XT开发仪表显示软件,并运行在Linux上(国产化要求的中标、麒麟等国产Linux发行版)。随着项目的积累,程序会非常庞大,现在单独的可执行程序已经超过2G。
给我们公司的一个项目是基于Linux的窗口管理器,将程序分割为小程序,每个小程序占用独立的窗口。每个窗口中的程序运行是相互独立,以确保其中一个程序崩溃而不影响其他程序。窗口管理器中的每个窗口可以共享鼠标等设备操作。(考虑到项目复杂度,公司项目负责人并没有接,本系列是技术探索)
本系列会将开发中用到的技术抽象出来(国企保密性要求),并记录以便后续使用。
本系列不是为了开发一个好用的Wayland桌面,而是摸索如何开发一个Wayland桌面。
索引
- Wayland入门教程01:框架简介
- Wayland入门教程02:库安装配置与介绍
- Wayland入门教程03:Wayland架构
- Wayland入门教程04:开发
- Wayland入门教程04.01:调试工具
- Wayland入门教程04.02:运行测试程序
- Wayland入门教程04.03:xserver
- Wayland入门教程04.04:hello world
- Wayland入门教程04.05:连接server
- Wayland入门教程04.06:获取全局对象
- Wayland入门教程04.07:shell stable协议
- Wayland入门教程04.08:Protocol说明
- Wayland入门教程04.09:第一个窗口
- Wayland入门教程04.10:输入设备管理器
- Wayland入门教程04.11:鼠标操作
- Wayland入门教程04.12:个性化鼠标
- Wayland入门教程04.13:窗口操作
- Wayland入门教程04.14:窗口背景
- Wayland入门教程04.15:键盘输入
- Wayland入门教程05:进阶
- Wayland入门教程05.01:服务端
- Wayland入门教程05.02:简单合成器与客户端
- Wayland入门教程05.03:鼠标拖拽客户端
- Wayland入门教程05.04:客户端标题栏与按钮
- Wayland入门教程05.05:多窗口管理 拖拽 重叠 平铺
- Wayland入门教程05.06:鼠标右键菜单 菜单处理
- Wayland入门教程05.07:任务栏
- Wayland入门教程05.08:子窗口
- Wayland入门教程05.09:tty切换
- weston
weston
Weston概览:架构、配置、启动、代码 - ArnoldLu - 博客园
Weston中有四个主要部分:Shell、Compositor、Render、Input
Surface: 窗口
Shell:窗口管理器,画面层级、窗口信息、窗口生命周期、Focus窗口等等一些偏向于业务层的处理。
Compositor:负责画面的合成,使用DRM连接output,将画面输出到实际显示设备。
Render:负责渲染,比如gl-render,做一些纹理贴图操作。
Input:libinput模块,与evdev、uvdev模块交互,从底层设备节点接收touch、key等输入
Output: drm
- main/wet_main
- load_backends()
- load_backend()
- load_drm_backend()决定合成后输出到哪里
- wet_compositor_load_backend()
- weston_compositor_load_backend()
- weston_load_module(name, “weston_backend_init”, LIBWESTON_MODULEDIR)
- weston_compositor_load_backend()
- wet_compositor_load_backend()
- load_wayland_backend()
- wet_compositor_load_backend()
- weston_compositor_load_backend()
- weston_load_module(name, “weston_backend_init”, LIBWESTON_MODULEDIR)
- weston_compositor_load_backend()
- wet_compositor_load_backend()
- load_drm_backend()决定合成后输出到哪里
- load_backend()
- weston_compositor_backends_loaded()
- wet_load_shell()
- weston_load_module(name, “wet_shell_init”, MODULEDIR)
- load_modules()
- wet_load_module()
- weston_load_module(name,“wet_module_init”, MODULEDIR)
- wet_load_module()
- load_backends()
决定如何合成
- weston_backend_init()
- drm_backend_create()
- init_pixman()
- weston_compositor_init_renderer()
- init_egl()
- create_gbm_device()
- drm_backend_create_gl_renderer()
- weston_compositor_init_renderer()
- init_pixman()
- wayland_backend_create()
- weston_compositor_init_renderer
- weston_load_module(name, “gl_renderer_interface”, LIBWESTON_MODULEDIR)
- pixman_renderer_init()
- weston_compositor_init_renderer
- drm_backend_create()
负责窗口管理
- wet_shell_init
- weston_desktop_create
- create_shell_seat
更新日志
2024.06.19(v2.2)
- 代码适配Ubuntu 24.04 LTS
2023.11.30(v2.1)
- 匹配文章顺序
2023.04.16(v2.0)
- 以Ubuntu22.04开发环境为例,wayland删除了wl_shell接口,修改为xdg_wm_base
2022.04.24(v1.0)
- 添加基本的开发操作,包括连接服务、显示界面、显示鼠标、键盘输入等。
Wayland入门教程索引
https://blog.jackeylea.com/wayland/wayland-learning-indexes/