又经历了几个版本更新,GXDE一直在尝试在X11会话以外,为用户同时提供Wayland会话选择。趁着最近Wayland适配刚刚迈出第一步,我想和大伙聊一聊现在GXDE的Wayland合成器背后的故事。
众所周知,GXDE的目标是把DDE15点体验带回给用户,而我们自然用了大量当年深度用的技术、程序,以及基础设施。GXDE的X11会话使用KWin,所谓「近水楼台先得月」,自然而然地,我们就想到了 deepin-kwin_wayland 。毕竟,我们的软件有很多依赖kwin的私有协议(例如GXDE截图录屏大量依赖KWIN_WAYLAND提供的私有协议/扩展)。
deepin-kwin_wayland
很可惜,事情并不是这么一帆风顺。我倒腾kwin的时候正值我刚考完几场大考时,而那种可以松口气的情绪马上就被 deepin-kwin_wayland在GXDE上的表现泼了一瓢冷水。尽管在X11会话中嵌套打开 deeepin-kwin_wayland测试Wayland会话看着一切正常,但很可惜,KWin在实体机测试中最终没能进入会话,屏幕一片漆黑。
deeepin-kwin_wayland
图片: 嵌套测试下的deepin-kwin_wayland,能以嵌套模式启动我无疑是兴奋的,只可惜没法单独进会话
倒腾了几天终于得出了一个结论:GXDE带的XWayland协议太新了,而我们用的 deepin-kwin_wayland依赖旧版的XWayland,导致进不去会话。当然,绕过XWayland是会造成问题的:GXDE的系统程序大量依赖X11,而没有XWayland这些程序回以纯Wayland模式启动,造成兼容性问题。
随即,我尝试编译新的KWin,然而噩耗接踵而至:新的KWin要求一堆KF6框架,这与系统程序依赖的部分KF5框架,所以这一批程序会在KF6框架被引入的同时被APT卸载。
可以看见问题非常严重,被卸载的都是系统底层的基础程序,甚至 deepin-daemon也没能逃过被卸载的命运,遂虽然觉得可惜但只能放弃这条路。
deepin-daemon
我加入GXDE的时间比较晚,我了解到GXDE 15时期这个KWin似乎还能勉强工作,来到GXDE 25时代就只能靠一个非常老的 deepin-mutter吊着了,它加载不出壁纸,也没有dock和一切基础的东西,只有一个桌面面板。这绝非长久之计,毕竟Deepin也是老早就放弃这个玩意了,找一个新的合成器迫在眉睫...
deepin-mutter
近期(?),Deepin决定开发自己的合成器,即Treeland。考虑到GXDE用的是旧深度生态,我觉得把这么一些看起来很古早的DTK2程序和桌面环境套件放到一个「崭新的」Treeland会话上面会非常有意思,恰巧@gfdgd_xi在GXDE的源内推送了Treeland,我便决定试用一下。我不知道我是不是第一个在GXDE上吃螃蟹的人,但我当时体验下来觉得很有希望,于是我写了一篇[生态共建] 尝试:在GXDE上使用Treeland作为Wayland WM并引导桌面启动,长达为期两周(没记错的话)的合成器问题终于等来了它的第一个解决方案。于是,GXDE的各种程序便开始围绕Treeland做Wayland适配。
虽然在试用期间看起来问题非常多,但是相比于肘击 deepin-kwin_wayland的build against GXDE25与 deepin-mutter适配问题而言,这看起来至少是可行的,于是,大量的适配工作围绕Treeland展开了:
看起来很累,毕竟GXDE的文件管理器、Dock和桌面面板还都在用DTK2+Qt5,且不适配Wayland,我自己都不相信我们居然一个一个修好了这些问题,到最后,整个系统在Treeland下有一瞬间居然看起来真像一回事:
有这么一瞬间,我以为我们确实会一直用Treeland作为GXDE的合成器,但经过一些讨论,我们最终还是放弃使用Treeland了(并没有说Treeland不好或者怎么样,仅仅是出于自己的考量,希望大家别骂我骂得太猛):
treeland-personalization-manager-v1.xml
虽然很不情愿,我们又进入了寻找新合成器的阶段,很快我们就注意到了隔壁麒麟的KYWC( open-kylin-wlcom),又一个Wlroots系的合成器,它还广播了部分我们要的KDE协议什么的,看起来算是方便,于是我们又开始了下一轮试用:
open-kylin-wlcom
这是最早一次成功在GXDE上进入 open-kylin-wlcom,可以看到这个雷霆渲染问题,Chrome也是直接渲染不出来了,于是我们又开始了新一轮的折腾:
现在,我们的合成器改名叫 gxde-wlcom了,它还是派生自 KYWC,cherry pick了部分Wlroots上游修改,为GXDE修复了若干问题(尤其是DMA-BUF问题),移植DDE Shell/deepin-chameleon主题「云璃」的默认窗体外观,移植 dde-shell与 treeland-dde-shell-v1协议,并扩展 wlr-layer-shell 排布逻辑,为 deepin-menu等沿用X11思路的菜单守护进程在Wayland下提供菜单定位支持。于是 1.4.0-gxde1这个版本就诞生了,它是 gxde-wlcom的一个里程碑,也是第一个能在真机上用的版本,我还特地写了一版发行说明:发布笔记:1.4.0-gxde1。
gxde-wlcom
dde-shell
treeland-dde-shell-v1
wlr-layer-shell
deepin-menu
1.4.0-gxde1
目前,GXDE的Wayland会话正在持续开发中,期待在不久的将来与各位见面!!
附赠一些近期的截图:
特别感谢@神末shenmo和@gfdgd_xi的帮助!!
回到故事的开始,开拓出崭新的未来!
Featured Collection
Popular Ranking
Popular Events
又经历了几个版本更新,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在实体机测试中最终没能进入会话,屏幕一片漆黑。图片: 嵌套测试下的deepin-kwin_wayland,能以嵌套模式启动我无疑是兴奋的,只可惜没法单独进会话
倒腾了几天终于得出了一个结论:GXDE带的XWayland协议太新了,而我们用的
deepin-kwin_wayland依赖旧版的XWayland,导致进不去会话。当然,绕过XWayland是会造成问题的:GXDE的系统程序大量依赖X11,而没有XWayland这些程序回以纯Wayland模式启动,造成兼容性问题。随即,我尝试编译新的KWin,然而噩耗接踵而至:新的KWin要求一堆KF6框架,这与系统程序依赖的部分KF5框架,所以这一批程序会在KF6框架被引入的同时被APT卸载。
可以看见问题非常严重,被卸载的都是系统底层的基础程序,甚至
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适配。
虽然在试用期间看起来问题非常多,但是相比于肘击
deepin-kwin_wayland的build against GXDE25与deepin-mutter适配问题而言,这看起来至少是可行的,于是,大量的适配工作围绕Treeland展开了:看起来很累,毕竟GXDE的文件管理器、Dock和桌面面板还都在用DTK2+Qt5,且不适配Wayland,我自己都不相信我们居然一个一个修好了这些问题,到最后,整个系统在Treeland下有一瞬间居然看起来真像一回事:
叁 | 我们自己的故事:GXDE-Wlcom
有这么一瞬间,我以为我们确实会一直用Treeland作为GXDE的合成器,但经过一些讨论,我们最终还是放弃使用Treeland了(并没有说Treeland不好或者怎么样,仅仅是出于自己的考量,希望大家别骂我骂得太猛):
treeland-personalization-manager-v1.xml这样的协议虽然很不情愿,我们又进入了寻找新合成器的阶段,很快我们就注意到了隔壁麒麟的KYWC(
open-kylin-wlcom),又一个Wlroots系的合成器,它还广播了部分我们要的KDE协议什么的,看起来算是方便,于是我们又开始了下一轮试用:这是最早一次成功在GXDE上进入
open-kylin-wlcom,可以看到这个雷霆渲染问题,Chrome也是直接渲染不出来了,于是我们又开始了新一轮的折腾:现在,我们的合成器改名叫
gxde-wlcom了,它还是派生自 KYWC,cherry pick了部分Wlroots上游修改,为GXDE修复了若干问题(尤其是DMA-BUF问题),移植DDE Shell/deepin-chameleon主题「云璃」的默认窗体外观,移植dde-shell与treeland-dde-shell-v1协议,并扩展wlr-layer-shell排布逻辑,为deepin-menu等沿用X11思路的菜单守护进程在Wayland下提供菜单定位支持。于是1.4.0-gxde1这个版本就诞生了,它是gxde-wlcom的一个里程碑,也是第一个能在真机上用的版本,我还特地写了一版发行说明:发布笔记:1.4.0-gxde1。目前,GXDE的Wayland会话正在持续开发中,期待在不久的将来与各位见面!!
附赠一些近期的截图: