[Share Experiences] wayland学习之——用wlr layer shell写一个桌面壁纸程序!
Tofloor
poster avatar
PurestAsh
deepin
2024-10-28 19:42
Author

前面我们已经了解到wl_shm可以创建一个wl_buffer。

wl_buffer可以放像素。

最终这些buffer中的像素都可以倾倒在wl_surface上来显示。

wl_surface除了表现的像一张“纸”之外。还一个重要的特征:那就是必须给他指定一个“角色(role)”。

如果wl_surface没有扮演任何角色,那么上面的buffer像素一个都不会显示。

在之前的帖子中,我们已经给他分配xdg_toplevel这个角色。也就是让它像普通应用程序一样显示。

注意:wl_surface同时只能扮演一个角色。

今天我们介绍一个有趣的新角色“wlr layer shell"。这个角色可以把wl_surface分成4种类型。分别是background,bottom,top,overlay。

这4种类型就像4张叠在一起的纸。最底部的纸就是background。倒数第二张就是bottom,然后是top,overlay。

background角色可以用来做壁纸。我们打开的应用一般是介于bottom和top之间。我们的dock栏一般是top或者overlay。

所以wlr layer shell 非常适合用来写桌面环境。

接下来我们可以尝试写一个壁纸程序。

  1. 申请一张wl_surface。然后给他赋予background角色,他就能显示到最底层。
  2. 利用前面学到的wl_shm创建一个共享buffer。
  3. 想办法把一张图片解析成一个rgb像素的数组。
  4. 把解析出来的像素复制到buffer中。
  5. 然后wl_surface.commit() 就成了!

以下为Rust代码实现。

https://github.com/PurestAsh/wayland_hello_world_rust

参考项目:

cosmic-bg

wlr-layer-shell-unstable-v1

以下是在plasma6下的效果图。

屏幕截图_20241028_193358.png

Reply Favorite View the author
All Replies
流浪的加菲
deepin
2024-10-28 21:08
#1

虽然看不懂,但是觉得很厉害blush

Reply View the author
小小怪冲啊!
deepin
2024-10-28 23:23
#2

虽然看不懂,但是觉得很厉害。

Reply View the author
Oli
deepin
2024-10-29 00:17
#3

哦莫虽然不懂但是有点跃跃欲试。

Reply View the author
明月夜
deepin
2024-10-29 03:22
#4

好好好,我感觉我已经快学会了。

Reply View the author
hinata
deepin
2024-10-29 04:50
#5

哦莫,这是我可以学习的吗?

Reply View the author
hinata
deepin
2024-10-29 04:50
#6

收假了我试试去。

Reply View the author
PurestAsh
deepin
2024-10-29 07:43
#7
hinata

收假了我试试去。

挺好玩的,有助于了解这些桌面环境到底是怎么运作的blush

Reply View the author
PurestAsh
deepin
2024-10-29 07:44
#8
流浪的加菲

虽然看不懂,但是觉得很厉害blush

感谢支持tail

Reply View the author
PurestAsh
deepin
2024-10-29 07:44
#9
Oli

哦莫虽然不懂但是有点跃跃欲试。

感谢点赞blush

Reply View the author
ice
Moderator
2024-10-29 08:18
#10

like

Reply View the author
131******66
deepin
2024-10-29 09:06
#11

like

厉害啊

Reply View the author
鲜衣怒马
deepin
2024-10-29 09:19
#12

虽然看不懂,但是觉得很厉害blush

Reply View the author
Amber
deepin
2024-10-29 17:55
#13

like

Reply View the author
小鱼贝壳
deepin
2024-10-30 01:57
#14

让我学到真东西了

Reply View the author
ggbond
deepin
2024-11-01 01:34
#15

like like like

Reply View the author
柠萌~
deepin
2024-11-04 01:29
#16

like like like

Reply View the author
2023开始学习
deepin
2024-11-11 00:23
#17

大佬,v23正式版好像没有Wayland了。你用的什么版本?v23能安装Wayland吗?

Reply View the author
PurestAsh
deepin
2024-11-11 19:25
#18
2023开始学习

大佬,v23正式版好像没有Wayland了。你用的什么版本?v23能安装Wayland吗?

目前v23不太行。不过deepin自己也在做自己的Wayland合成器叫treeland。不过目前还在开发中。如果现在想体验成熟的wayland的话,还是arch Linux好一点目前。

Reply View the author