Gitee上的GXWM | GitHub上的GXWM
大家好呀,距离上次分享GXDE Wayland合成器已经过去了一段时间了,除了获得了 GXWM这一简称以外,近这两周GXDE Wayland合成器又更了很多feat,虽然我要说的很多更改还没进GXDE的测试源,但这并不妨碍我挑一点好玩的讲一讲——
GXWM
虽然目标不是完全兼容Treeland,但我们一直在推动 GXWM 对Treeland的兼容性以减轻在GXDE OS上的DTK5/6程序适配难度,现在除了上次说的 treeland_dde_shell_manager_v1,我们又追加了三个Treeland私有协议支持:
treeland_dde_shell_manager_v1
从名字就知道我想要干什么了——最近GXDE更新了源内「深度截图录屏」的版本,我在浏览源码的时候就发现了Treeland支持。我想着,如果我们实现对 treeland_personalization_manager_v1的支持(而不是实现原来 deepin-kwin_wayland路径所需的多个 KWAYLAND协议),会不会轻松点?于是我们做了这么一个粗糙的实现...
treeland_personalization_manager_v1
deepin-kwin_wayland
KWAYLAND
我知道干巴巴讲这些协议支持很无聊,这里给大伙看看我还没向GXDE仓库提交的修改版截图录屏,它会在检测到 GXWM时走Treeland协议,由 GXWM的Treeland兼容代码负责框选窗口,也支持像之前KWin上一样点击窗口截图和批注... 除了录屏不工作以外我感觉我们all set了...
这个就比较无聊了(对我来说),有趣的是GXDE OS使用的Treeland协议包版本是 0.5.8,而现在Treeland协议包出到 0.5.9了。在更新中,Treeland Personalization Manager移除了协议XML中的一些字段但没有更新协议版本,导致签名对不上。结果就是测试机器上所有DTK6程序(或许还有DTK5程序,DTK2程序因为太老旧了没受影响,而DTK2Widget-Qt6程序因为我太懒了没让它支持Treeland Personalization Manager也逃过一劫 )一起崩溃了。考虑到GXDE不知道什么时候或许会切换协议版本,贪婪的我想到了做一个小开关,自动检测Treeland协议包的版本提供对应支持:
0.5.8
0.5.9
合成器把两种布局都编译在了同一个二进制里,启动时选一个: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实现一起删掉即可。
{0,2,3,4,5}
get_wallpaper_context
默认行为是自动探测:启动时扫描已安装的 libdtk*gui(Qt5与Qt6两套都查,含multiarch路径),看它们是否还引用 treeland_personalization_wallpaper_context_v1。这比看协议包版本准,因为XML只是编译期输入。探测不到DTK时(构建chroot、精简安装)退回去看 /usr/share/treeland-protocols,再不行默认0.5.8。
libdtk*gui
treeland_personalization_wallpaper_context_v1
/usr/share/treeland-protocols
理论上不需要强制设定,但如果非得要,设环境变量即可,改 startgxde_wlcom里一行然后重新登录:
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会话上出于兼容性需求默认不广播此协议。
GXWM_DONOT_BROADCAST_TLPM
TRUE
ON
1
YES
gxde-wlcom
大伙应该看过论坛置顶帖子「在 Treeland 下使用 Portal 录屏」吧?没错,我们也要支持用Portal录屏了。为此,我们又新增了一批协议支持:
有了这一切,还得加上一个修改版的「xdg-desktop-portal-gxde」,虽然PR已经合并了但目前还没有发release,也没进源,但我可以给大伙看看效果:
OBS会唤起下方的授权窗口,我知道这丑的简直没法看,但是我的评价是至少我们向着「能用」迈出了第一步:
为了让GXDE顶栏的全局菜单可用,我们新增了对KDE AppMenu的支持,也加上了对XWayland全局菜单的支持。我们从rocka/appmenu-gtk-module-waylandfork了自己的库gxde-wayland-gtk-menu(其实就是加上了debian打包和CI),
除了之前的允许修改分辨率和缩放以外,我们还补上了屏幕排列支持:在「扩展」模式下,允许随意排列显示器局部。我没记错的话这是Kylin Wlcom的原生能力,我们把GXDE设置中心的显示器排列前端接到上面了——
前端是我参考某个远古版本的 deepin-kwin有样学样做出来的:
deepin-kwin
当然支持虚拟桌面的切换或者把某个窗口扔到某一虚拟桌面,最多支持六个虚拟桌面...
libseat
seatd
logind
if
细节DTK2Widget-Qt6程序因为我太懒了没让它支持Treeland Personalization Manager也逃过一劫
Featured Collection
Popular Ranking
Popular Events
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 Capture Manager
从名字就知道我想要干什么了——最近GXDE更新了源内「深度截图录屏」的版本,我在浏览源码的时候就发现了Treeland支持。我想着,如果我们实现对
treeland_personalization_manager_v1的支持(而不是实现原来deepin-kwin_wayland路径所需的多个KWAYLAND协议),会不会轻松点?于是我们做了这么一个粗糙的实现...我知道干巴巴讲这些协议支持很无聊,这里给大伙看看我还没向GXDE仓库提交的修改版截图录屏,它会在检测到
GXWM时走Treeland协议,由GXWM的Treeland兼容代码负责框选窗口,也支持像之前KWin上一样点击窗口截图和批注... 除了录屏不工作以外我感觉我们all set了...Treeland Personalization Manager
这个就比较无聊了(对我来说),有趣的是GXDE OS使用的Treeland协议包版本是
)一起崩溃了。考虑到GXDE不知道什么时候或许会切换协议版本,贪婪的我想到了做一个小开关,自动检测Treeland协议包的版本提供对应支持:
0.5.8,而现在Treeland协议包出到0.5.9了。在更新中,Treeland Personalization Manager移除了协议XML中的一些字段但没有更新协议版本,导致签名对不上。结果就是测试机器上所有DTK6程序(或许还有DTK5程序,DTK2程序因为太老旧了没受影响,而DTK2Widget-Qt6程序因为我太懒了没让它支持Treeland Personalization Manager也逃过一劫然后我们还提供了一个小环境变量开关:将
GXWM_DONOT_BROADCAST_TLPM变量设置为TRUE/ON/1/YES即可让合成器停止广播此协议(默认是广播Personalization Manager)。在GXDE的gxde-wlcom会话上出于兼容性需求默认不广播此协议。贰 · Portal与录屏
大伙应该看过论坛置顶帖子「在 Treeland 下使用 Portal 录屏」吧?没错,我们也要支持用Portal录屏了。为此,我们又新增了一批协议支持:
有了这一切,还得加上一个修改版的「xdg-desktop-portal-gxde」,虽然PR已经合并了但目前还没有发release,也没进源,但我可以给大伙看看效果:
OBS会唤起下方的授权窗口,我知道这丑的简直没法看,但是我的评价是至少我们向着「能用」迈出了第一步:

叁 · 更好的全局菜单
为了让GXDE顶栏的全局菜单可用,我们新增了对KDE AppMenu的支持,也加上了对XWayland全局菜单的支持。我们从rocka/appmenu-gtk-module-waylandfork了自己的库gxde-wayland-gtk-menu(其实就是加上了debian打包和CI),
肆 · 更好的双屏支持
除了之前的允许修改分辨率和缩放以外,我们还补上了屏幕排列支持:在「扩展」模式下,允许随意排列显示器局部。我没记错的话这是Kylin Wlcom的原生能力,我们把GXDE设置中心的显示器排列前端接到上面了——
伍 · 多任务与虚拟桌面
前端是我参考某个远古版本的
deepin-kwin有样学样做出来的:当然支持虚拟桌面的切换或者把某个窗口扔到某一虚拟桌面,最多支持六个虚拟桌面...
陆 · 其它一些「没这么有趣」的更新
libseat在有seatd的情况就默认使用seatd导致在LightDM/正在开发的GXDE Display Manager下无法启动的问题(现在gxde-wlcom会话强制使用logind,如果你的display manager真的使用seatd你可能得注释掉会话脚本的一个if块,脚本内有说明这里不叭叭了