本次迭代进展

    写在8月末,在最近的开发工作中,wsm 在改进其核心功能方面取得了重大进展。值得注意的是,现在 wsm 已可以正常启动X11应用和 Wayland 应用。下一个关键步骤是完善 SSD UI 交互功能,以提供更完整和友好的用户体验。本次迭代主要包括以下内容:

  • 合成器基础功能的完善
  • 支持鼠标移动、resize 窗口(X11、Wayland)。
  • 支持 SSD 显示窗口图标和标题。
  • 添加窗口 resize 感应区域宽度可配置
  • 修复 CSD 窗口 resize 异常问题
  • 添加 output 与 udev_device的映射关系,方便背光调节功能集成到 wsm 中
  • 高级功能的 wsm_scene_rect、wsm_scene_image、wsm_scene_text 显示控件正在编写中
  • 修复 wsm_text_node、wsm_image_node 中一些bug
  • 迁移 wlroots scene 核心渲染控制到 wsm 中,方便颗粒化控制每个显示节点的渲染流程

后续计划

    暂时计划将 wsm 常规交互功能完善,后续计划如下:

  • SSD: 支持最小化、最大化、关闭功能。支持标题栏翻译
  • scene:基于 wsm_scene 编写wsm_scene_rect、wsm_scene_image、wsm_scene_text高性能控件
  • 窗口录制和截图:能够录制窗口图像,包括标题栏,实现所见即所得的效果。
  • 主屏幕配置:多屏模式下支持设置主屏幕功能
  • 窗口和屏幕后处理特效:支持圆角、模糊、阴影和状态切换动画等。
  • 多工作区支持:支持多个工作区的管理功能,以 Wayland 协议方式支持客户端调用管理接口。
  • 窗口平铺功能:支持窗口在屏幕上的停靠布局,屏幕二分、三分、四分等。
  • 动画线支持:提供高效的GPU动画机制。
  • 屏幕亮度调节:支持屏幕背光调光功能。
  • 肌肉记忆:支持 wsm 作为唯一显示后端,记录输入、输出硬件相关的配置参数。
  • 屏幕水印:支持在合成器层面渲染屏幕水印节点。
  • 黑屏遮罩功能:以软件绘制的方式在黑屏幕显示区域
  • 统一调试机制:支持场景渲染、DRM 输出、窗口管理、设备输入等核心功能的调试协议。
  • 多DRM 平面支持:充分使用 DRM 显示资源,提升渲染性能。

功能预览

    下图展示了在嵌套运行模式下,wsm 启动 VSCode (X11) 和 QtCreator 的工作快照。目前,wsm 已具备基本功能,但服务端的窗口装饰器仍缺少最小化、最大化和关闭的 UI 按钮。笔者已完成了后端的部分实现,接下来完善窗口装饰器 (SSD) 功能将是首要任务。
1.1 wsm运行wayland应用qtcreator和X11应用code

结语

    wsm 项目已经进入了一个活跃的开发阶段。经过与 wlroots 社区的多次讨论,笔者最终选择了自定义渲染方式。虽然这一选择给后续的迭代带来了不小的挑战,但其优势在于可以全面定制渲染管线,从而大大提高开发的灵活性。在未来的开发计划中,笔者对 wsm 中的矩形(wsm_scene_rect)、图像(wsm_scene_image)、文本(wsm_scene_text)以及动画曲线功能充满期待,因为这些功能对 wsm 的未来扩展至关重要。与此同时,笔者也在积极开发 Lychee 桌面环境。目前开发工作是在 KDE 平台上进行的,但未来目标是在 Lychee 上实现自开发。经过多次验证,wsm 的性能已经优于 kwin_Wayland,因此切换到 Lychee 只是时间问题。最近,笔者深入思考了桌面环境的图形化设计,并总结出几个与合成器关联最紧密的要点:

  • Wayland 合成器启动完成后通知桌面端进程。
  • 设置输入、输出的工作参数(wsm 将提供 Wayland 协议接口来设置和存储这些参数,以便任何客户端都能获取和修改)。
  • 窗口切换器(Window Switcher):在 Lychee 的设计中,笔者将这一功能集成到桌面客户端,以实现与合成器的解耦,通过 Wayland 协议进行通信。
  • 工作区管理(Workspace Manager):同样,在 Lychee 的设计中,这一功能也将在桌面客户端实现,并通过 Wayland 协议与合成器解耦。

    可能有读者会认为笔者的设计思路与主流做法有所不同,在此我想解释一下:wsm 项目的初衷并非仅服务于某一个操作系统或桌面环境,而是面向大众的。UI 样式并非是设计目标,更多考虑是性能高效、稳定统一。笔者致力于开发一个功能全面的系统,并提供参考桌面环境实现,使得大家可以在此基础上定制自己的风格。通过这种方式,Wayland 将逐步走向统一,从而让我们可以将更多的精力投入到驱动和系统层面的完善上。

    更多信息和详细文档可以访问 wsm 的Github 页面