[deepin exploration] GXDE Wayland合成器2.1.4版本更新:DDE15「风味」合成器
Tofloor
poster avatar
CharOfString
deepin
2 hours ago
Author


readme-header.png

Gitee上的GXWM | GitHub上的GXWM

大家好呀,距离上次分享GXDE Wayland合成器已经过去了一段时间了,除了获得了 GXWM这一简称以外,近这两周GXDE Wayland合成器又更了很多feat,虽然我要说的很多更改还没进GXDE的测试源,但这并不妨碍我挑一点好玩的讲一讲——

壹 · Treeland兼容性更新

虽然目标不是完全兼容Treeland,但我们一直在推动 GXWM 对Treeland的兼容性以减轻在GXDE OS上的DTK5/6程序适配难度,现在除了上次说的 treeland_dde_shell_manager_v1,我们又追加了三个Treeland私有协议支持:

  • treeland_app_id_resolver_v1
  • treeland_capture_manager_v1
  • treeland_personalization_manager_v1

截图协议Treeland Capture Manager

从名字就知道我想要干什么了——最近GXDE更新了源内「深度截图录屏」的版本,我在浏览源码的时候就发现了Treeland支持。我想着,如果我们实现对 treeland_personalization_manager_v1的支持(而不是实现原来 deepin-kwin_wayland路径所需的多个 KWAYLAND协议),会不会轻松点?于是我们做了这么一个粗糙的实现...

我知道干巴巴讲这些协议支持很无聊,这里给大伙看看我还没向GXDE仓库提交的修改版截图录屏,它会在检测到 GXWM时走Treeland协议,由 GXWM的Treeland兼容代码负责框选窗口,也支持像之前KWin上一样点击窗口截图和批注... 除了录屏不工作以外我感觉我们all set了...

1.jpg

Treeland Personalization Manager

这个就比较无聊了(对我来说),有趣的是GXDE OS使用的Treeland协议包版本是 0.5.8,而现在Treeland协议包出到 0.5.9了。在更新中,Treeland Personalization Manager移除了协议XML中的一些字段但没有更新协议版本,导致签名对不上。结果就是测试机器上所有DTK6程序(或许还有DTK5程序,DTK2程序因为太老旧了没受影响,而DTK2Widget-Qt6程序因为我太懒了没让它支持Treeland Personalization Manager也逃过一劫joy )一起崩溃了。考虑到GXDE不知道什么时候或许会切换协议版本,贪婪的我想到了做一个小开关,自动检测Treeland协议包的版本提供对应支持:

合成器把两种布局都编译在了同一个二进制里,启动时选一个:0.5.8布局用的是wayland-scanner生成的方法表,0.5.9布局则在运行时从同一张表里挑出 {0,2,3,4,5}(跳过 get_wallpaper_context)拼出来,因此两条路径同源、不会各自漂移。前提是vendor的XML保持0.5.8超集——真正切到0.5.9后这个开关连同wallpaper实现一起删掉即可。

默认行为是自动探测:启动时扫描已安装的 libdtk*gui(Qt5与Qt6两套都查,含multiarch路径),看它们是否还引用 treeland_personalization_wallpaper_context_v1。这比看协议包版本准,因为XML只是编译期输入。探测不到DTK时(构建chroot、精简安装)退回去看 /usr/share/treeland-protocols,再不行默认0.5.8。

理论上不需要强制设定,但如果非得要,设环境变量即可,改 startgxde_wlcom里一行然后重新登录:

export GXDE_WLCOM_PERSONALIZATION=058   # 或 059;亦接受 0.5.8 / 0.5.9

然后我们还提供了一个小环境变量开关:将 GXWM_DONOT_BROADCAST_TLPM变量设置为 TRUE/ON/1/YES即可让合成器停止广播此协议(默认是广播Personalization Manager)。在GXDE的 gxde-wlcom会话上出于兼容性需求默认不广播此协议。

贰 · Portal与录屏

大伙应该看过论坛置顶帖子「在 Treeland 下使用 Portal 录屏」吧?没错,我们也要支持用Portal录屏了。为此,我们又新增了一批协议支持:

  • 新增协议支持ext-foreign-toplevel-list-v1
  • 新增协议支持ext-image-capture-source-v1
  • 新增协议支持ext-image-copy-capture-v1ha

有了这一切,还得加上一个修改版的「xdg-desktop-portal-gxde」,虽然PR已经合并了但目前还没有发release,也没进源,但我可以给大伙看看效果:

Image_1785783579093.png

OBS会唤起下方的授权窗口,我知道这丑的简直没法看,但是我的评价是至少我们向着「能用」迈出了第一步:
12.png

叁 · 更好的全局菜单

为了让GXDE顶栏的全局菜单可用,我们新增了对KDE AppMenu的支持,也加上了对XWayland全局菜单的支持。我们从rocka/appmenu-gtk-module-waylandfork了自己的库gxde-wayland-gtk-menu(其实就是加上了debian打包和CI),

肆 · 更好的双屏支持

除了之前的允许修改分辨率和缩放以外,我们还补上了屏幕排列支持:在「扩展」模式下,允许随意排列显示器局部。我没记错的话这是Kylin Wlcom的原生能力,我们把GXDE设置中心的显示器排列前端接到上面了——

79_4m.jpg

伍 · 多任务与虚拟桌面

前端是我参考某个远古版本的 deepin-kwin有样学样做出来的:

78_4m.jpg

screenshot_20260804_032737.png

当然支持虚拟桌面的切换或者把某个窗口扔到某一虚拟桌面,最多支持六个虚拟桌面...

陆 · 其它一些「没这么有趣」的更新

  1. 修复了NVIDIA独显下窗口闪烁的问题
  2. 修复 libseat在有 seatd的情况就默认使用 seatd导致在LightDM/正在开发的GXDE Display Manager下无法启动的问题(现在 gxde-wlcom 会话强制使用 logind,如果你的display manager真的使用 seatd你可能得注释掉会话脚本的一个 if块,脚本内有说明这里不叭叭了
  3. 新增Archlinux打包
  4. 修复了微信上使用小企鹅输入法候选框无法显示的问题
Reply Favorite View the author
All Replies
avatar
CharOfString
deepin
2 hours ago
#1

细节DTK2Widget-Qt6程序因为我太懒了没让它支持Treeland Personalization Manager也逃过一劫

joy

Reply View the author