![](https://img-blog.csdnimg.cn/6419ea4140f84a8da6a9db6f4d2ea65b.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Wayland开发入门
文章平均质量分 63
Linux Wayland桌面环境开发从入门到放弃
幽迷狂
我以我血荐轩辕 有问题可以发邮件:1768478912@qq.com
展开
-
Wayland入门15:键盘输入
上一篇介绍了鼠标的相关操作,本文介绍键盘的相关操作。使用的是标准的键盘库xkb,官网为:https://www.xkbcommon.org/。先把上一篇的鼠标操作的部分复制过来。注册并绑定键盘相关的内容static void seat_capabilities(void *data, struct wl_seat *seat, uint32_t capabilities){ if ((capabilities & WL_SEAT_CAPABILITY_POINTER) &&原创 2022-03-23 11:36:15 · 841 阅读 · 0 评论 -
Wayland入门14:窗口操作
在上一篇文章中,我们介绍的鼠标的基本操作,但是会发现已实现的操作只能捕获鼠标的位置和进入离开窗口状态,本文来实现捕获鼠标的点击状态。先把第9篇的基本窗口的代码拿过来,因为只是实现功能,那么其他的功能没有最好。在main()函数中,可以发现shell_surface = wl_shell_get_shell_surface(shell, surface);if (shell_surface == NULL){ fprintf(stderr, "Can't create shell surface\原创 2022-03-21 11:17:06 · 1038 阅读 · 0 评论 -
Wayland入门13:鼠标操作
之前文章中我们创建了一个空白窗口,接下来我们处理一下窗口上的鼠标操作。先把新建窗口的代码复制过来。然后把seat的部分代码复制过来,在注册函数中添加seat处理部分。Wayland只提供了wl_pointer_listener,要想获取鼠标相关的消息需要首先设置监听器。wl_pointer的消息有:enter 进入窗口范围leave 离开窗口范围motion 鼠标移动button 鼠标点击,鼠标按键id定义位于文件<linux/input.h>中,例如BTN_LEFT表示鼠标左键原创 2022-03-18 14:09:26 · 1143 阅读 · 0 评论 -
Wayland入门12:输入设备管理器
在 Wayland入门8:获取全局对象 中我们介绍了Wayland全局对象:wl_display:表示与服务器的连接。wl_registry:全局对象注册表,全局对象需要通过它获取。wl_compositor:窗口合成器,也是服务器。wl_shm:内存管理器,与窗口合成器共享内存用。wl_shell:支持窗口操作功能。wl_seat:输入设备管理器。wl_pointer:代表鼠标设备。wl_keyboard:代表键盘设备。可以看出鼠标、键盘是输入的一种。本文我们来获取开发平台所支持的原创 2022-03-14 09:02:41 · 543 阅读 · 2 评论 -
Wayland入门11:shell unstable协议
上一篇介绍的是stable版的协议,本文介绍unstable版的协议。窗口部分是一样的。我们使用新协议的对象struct zxdg_shell_v6 *xdg_shell;struct zxdg_surface_v6 *shell_surface;struct zxdg_toplevel_v6 *toplevel;创建新对象shell_surface = zxdg_shell_v6_get_xdg_surface(xdg_shell, surface);if (shell_surface原创 2022-03-10 09:33:57 · 359 阅读 · 0 评论 -
Wayland入门10:shell stable协议
我们操作的界面是客户端,鼠标点击、窗口移动、窗口大小、键盘输入都是由客户端捕获,然后通过协议发送给服务端。这个协议Wayland由提供默认的,如果默认的满足不了需求,可以自定义协议。协议格式为XML,使用wayland-scanner程序转换为代码。之前的文章中使用的是wayland默认的,本文我们使用wayland提供的扩展协议,stable版。窗口部分是一样的。我们使用新协议的对象struct xdg_wm_base *xdg_shell;struct xdg_surface *shell_s原创 2022-03-07 10:00:23 · 773 阅读 · 0 评论 -
Wayland入门9.5:第一个EGL窗口
一篇文章介绍了如何使用共享内存的方式创建并显示窗口,本文介绍使用EGL的方式显示窗口。有了上面的基础,EGL版本就简单一些初始化display = wl_display_connect(0);if(!display){ printf("Cannot connect to wayland compositor.\n"); return -1;}registry = wl_display_get_registry(display);wl_registry_add_listener原创 2022-03-03 10:55:03 · 1726 阅读 · 2 评论 -
Wayland入门9:第一个窗口
前面已经可以成功的连接服务器了。本文介绍如何显示一个窗口。Wayland窗口绘制有两种方法:1) 共享内存方式(SHM)、2)EGL。要想使用EGL,你得会EGL,还得先会OpenGL,这两个哪一个工程量都不小。本文使用方式1绘制窗口(第二种方法等OpenGL开发系列和EGL开发系列更新完再说)。窗口先将上一篇的代码拿过来,当然不需要输出所有的registry信息。所以将printf("Got a registry event for %s id %d\n", interface, id);原创 2022-02-23 11:17:26 · 1360 阅读 · 5 评论 -
Wayland入门8:获取全局对象
Wayland全局对象几乎所有的Wayland API都需要Wayland全局对象作为参数。Wayland全局对象:wl_display:表示与服务器的连接。wl_registry:全局对象注册表,全局对象需要通过它获取。wl_compositor:窗口合成器,也是服务器。wl_shm:内存管理器,与窗口合成器共享内存用。wl_shell:支持窗口操作功能。wl_seat:输入设备管理器。wl_pointer:代表鼠标设备。wl_keyboard:代表键盘设备。Wayland没有提供原创 2022-02-21 09:32:48 · 1037 阅读 · 0 评论 -
Wayland入门7:连接server
据架构可知,(鼠标、窗口、键盘)操作在客户端,操作完成之后通过socket发送给服务端,那么第一步就是连接服务端。先来测试代码:#include <wayland-client.h>#include <iostream>using namespace std;int main() { wl_display *display = wl_display_connect(0); if (!display) { std::cout <&l原创 2022-02-14 10:15:57 · 741 阅读 · 4 评论 -
Wayland入门6:hello world
废话说完了,接下来正式进入开发流程,一般编程开发的第一步就是Hello World。本文主要测试Wayland的头文件、库能否正确链接。依赖先安装后续开发必要的依赖软件包Ubuntu21.10sudo apt install libwayland-dev libegl1-mesa-dev libglm-dev wayland-protocols libwayland-bin extra-cmake-modules测试代码#include <wayland-server.h>#i原创 2022-02-10 10:19:41 · 1253 阅读 · 0 评论 -
Wayland开发入门系列5:调试工具
本文译自https://wayland.freedesktop.org/extras.html的2021.09.27版本。本页描述了wayland特有的调试工具。合成器特性运行wayland-info将列出所有由合成器提供的所有通用接口。它还将提供关于它所知道的和要报告的接口的其他信息,如监视器的制造和模型、wl_seat功能和wl_shm像素格式。wayland-info来自wayland-utils,可以用于任何合成器。OpenGL特性Wayland下的OpenGL(所有特性)功能可以通过Wa原创 2022-01-13 10:17:37 · 828 阅读 · 0 评论 -
Wayland开发入门系列4:xserver
本文译自:https://wayland.freedesktop.org/xserver.htmlWayland下X clients(XWayland)Wayland本身是一个完整的窗口系统,但即便如此,如果我们要从X迁移,有一个良好的向后兼容性故事是有意义的。只要有一些更改,Xorg服务器就可以被修改为使用wayland输入设备进行输入,并将根窗口或单个顶级窗口作为wayland表面进行转发。服务器仍然运行相同的2D驱动程序,并具有与本地运行时相同的加速代码。主要的区别是wayland处理窗口的表示,原创 2022-01-10 11:08:37 · 1326 阅读 · 0 评论 -
Wayland开发入门系列3:Wayland架构
本文译自https://wayland.freedesktop.org/architecture.html。翻译时间:2021.09.27Wayland架构理解Wayland架构以及它与X不同的好方法是跟踪一个事件从输入设备到它所影响的变化出现在屏幕上的程度。下面是与X的架构:1.内核从输入设备获取一个事件,并通过evdev输入驱动程序将其发送给X。内核通过驱动设备并将不同设备特定的事件协议转换为linuxevdev输入事件标准来完成这里所有的艰苦工作。2.X服务器确定事件影响的是哪个窗口,并原创 2022-01-06 10:34:31 · 1810 阅读 · 0 评论 -
Wayland开发入门系列2:库安装配置与介绍
开发的时候需要链接一些动态链接库。本文介绍一些基本的库功能安装Ubuntu暂无Manjaroyaourt -S wayland wayland-utils wayland-protocols egl-wayland wlroots libdrm 介绍libgstwaylandgst是gstreamer的通常缩写,也就是说此库是gstreamer的一部分,他使用wayland作为显示控件。libnvidia-egl-waylandEGL是渲染API(如 OpenGL ES)和原生窗口系统原创 2022-01-04 14:17:31 · 1866 阅读 · 0 评论 -
Wayland开发入门系列1:运行测试程序
先运行一下看看实际运行效果先准备一个Linux环境,我的是Ubuntu 20.04.2 LTS。Wayland under XWeston是Wayland提供的示例程序。Ubuntu下安装:sudo apt install weston效果为:独立运行将环境切换到tty2,或者其他的tty。一般Ctrl+Alt+F[1-7]表示切换到tty[1-7]。然后执行weston-launch效果为:这时左上角的按钮可以使用了,点击后会出现新终端界面。可以看到weston实现了原创 2021-12-29 15:22:41 · 2302 阅读 · 0 评论 -
Wayland开发入门系列0:说明
wayland相关的xdg/dm/x名词介绍原创 2021-12-27 11:30:56 · 1540 阅读 · 0 评论