[deepin exploration] [杂谈] 聊一聊GXDE新合成器背后的故事
Tofloor
poster avatar
CharOfString
deepin
an hour ago
Author

又经历了几个版本更新,GXDE一直在尝试在X11会话以外,为用户同时提供Wayland会话选择。趁着最近Wayland适配刚刚迈出第一步,我想和大伙聊一聊现在GXDE的Wayland合成器背后的故事。

壹 | 早期探索:KWin与Mutter

众所周知,GXDE的目标是把DDE15点体验带回给用户,而我们自然用了大量当年深度用的技术、程序,以及基础设施。GXDE的X11会话使用KWin,所谓「近水楼台先得月」,自然而然地,我们就想到了 deepin-kwin_wayland 。毕竟,我们的软件有很多依赖kwin的私有协议(例如GXDE截图录屏大量依赖KWIN_WAYLAND提供的私有协议/扩展)。

很可惜,事情并不是这么一帆风顺。我倒腾kwin的时候正值我刚考完几场大考时,而那种可以松口气的情绪马上就被 deepin-kwin_wayland在GXDE上的表现泼了一瓢冷水。尽管在X11会话中嵌套打开 deeepin-kwin_wayland测试Wayland会话看着一切正常,但很可惜,KWin在实体机测试中最终没能进入会话,屏幕一片漆黑。

微信图片_20260716214545_4_10.png

图片: 嵌套测试下的deepin-kwin_wayland,能以嵌套模式启动我无疑是兴奋的,只可惜没法单独进会话

倒腾了几天终于得出了一个结论:GXDE带的XWayland协议太新了,而我们用的 deepin-kwin_wayland依赖旧版的XWayland,导致进不去会话。当然,绕过XWayland是会造成问题的:GXDE的系统程序大量依赖X11,而没有XWayland这些程序回以纯Wayland模式启动,造成兼容性问题。

随即,我尝试编译新的KWin,然而噩耗接踵而至:新的KWin要求一堆KF6框架,这与系统程序依赖的部分KF5框架,所以这一批程序会在KF6框架被引入的同时被APT卸载。微信图片_20260716215624_6_10.jpg

可以看见问题非常严重,被卸载的都是系统底层的基础程序,甚至 deepin-daemon也没能逃过被卸载的命运,遂虽然觉得可惜但只能放弃这条路。

我加入GXDE的时间比较晚,我了解到GXDE 15时期这个KWin似乎还能勉强工作,来到GXDE 25时代就只能靠一个非常老的 deepin-mutter吊着了,它加载不出壁纸,也没有dock和一切基础的东西,只有一个桌面面板。这绝非长久之计,毕竟Deepin也是老早就放弃这个玩意了,找一个新的合成器迫在眉睫...

贰 | Deepin的新宠儿:Treeland

近期(?),Deepin决定开发自己的合成器,即Treeland。考虑到GXDE用的是旧深度生态,我觉得把这么一些看起来很古早的DTK2程序和桌面环境套件放到一个「崭新的」Treeland会话上面会非常有意思,恰巧@gfdgd_xi在GXDE的源内推送了Treeland,我便决定试用一下。我不知道我是不是第一个在GXDE上吃螃蟹的人,但我当时体验下来觉得很有希望,于是我写了一篇[生态共建] 尝试:在GXDE上使用Treeland作为Wayland WM并引导桌面启动,长达为期两周(没记错的话)的合成器问题终于等来了它的第一个解决方案。于是,GXDE的各种程序便开始围绕Treeland做Wayland适配。d1202928a56e1b7e08cc4a0d29006b9f.jpg

虽然在试用期间看起来问题非常多,但是相比于肘击 deepin-kwin_wayland的build against GXDE25与 deepin-mutter适配问题而言,这看起来至少是可行的,于是,大量的适配工作围绕Treeland展开了:

image.png

看起来很累,毕竟GXDE的文件管理器、Dock和桌面面板还都在用DTK2+Qt5,且不适配Wayland,我自己都不相信我们居然一个一个修好了这些问题,到最后,整个系统在Treeland下有一瞬间居然看起来真像一回事:微信图片_20260716221827_9_10.png

叁 | 我们自己的故事:GXDE-Wlcom

有这么一瞬间,我以为我们确实会一直用Treeland作为GXDE的合成器,但经过一些讨论,我们最终还是放弃使用Treeland了(并没有说Treeland不好或者怎么样,仅仅是出于自己的考量,希望大家别骂我骂得太猛):

  • Treeland目前实现并不成熟,且它的依赖也比较多
  • 旧的DTK2程序需要额外适配 treeland-personalization-manager-v1.xml这样的协议
  • GXDE的程序与Treeland的协作其实不是很好,例如在桌面重命名文件时,键盘输入总是被拦截/忽略,我们为这些问题做了很多Workaround,慢慢我也觉得就这么来一个问题打一个补丁也不是长久之计...

虽然很不情愿,我们又进入了寻找新合成器的阶段,很快我们就注意到了隔壁麒麟的KYWC( open-kylin-wlcom),又一个Wlroots系的合成器,它还广播了部分我们要的KDE协议什么的,看起来算是方便,于是我们又开始了下一轮试用:微信图片_20260716224216_10_10.jpg

这是最早一次成功在GXDE上进入 open-kylin-wlcom,可以看到这个雷霆渲染问题,Chrome也是直接渲染不出来了,于是我们又开始了新一轮的折腾:QQ20260716-224807.png

现在,我们的合成器改名叫 gxde-wlcom了,它还是派生自 KYWC,cherry pick了部分Wlroots上游修改,为GXDE修复了若干问题(尤其是DMA-BUF问题),移植DDE Shell/deepin-chameleon主题「云璃」的默认窗体外观,移植 dde-shelltreeland-dde-shell-v1协议,并扩展 wlr-layer-shell 排布逻辑,为 deepin-menu等沿用X11思路的菜单守护进程在Wayland下提供菜单定位支持。于是 1.4.0-gxde1这个版本就诞生了,它是 gxde-wlcom的一个里程碑,也是第一个能在真机上用的版本,我还特地写了一版发行说明:发布笔记:1.4.0-gxde1

目前,GXDE的Wayland会话正在持续开发中,期待在不久的将来与各位见面!!

附赠一些近期的截图:

DD493E08B08B8827D2BA6FB9F94CA453.png

微信图片_20260716225924_11_10.jpg

Reply Favorite View the author
All Replies
avatar
CharOfString
deepin
an hour ago
#1

特别感谢@神末shenmo@gfdgd_xi的帮助!!

Reply View the author
avatar
神末shenmo
deepin
Spark-App
Q&A Team
an hour ago
#2

回到故事的开始,开拓出崭新的未来!

Reply View the author