什么是 wsm?

    为什么要开发 wsm 项目?Wayland 世界中有多种合成器,其中较为知名的有 Weston、Kwin 和 Mutter。Weston 作为 Wayland 的参考合成器实现,虽然轻量,但并不适合用于构建功能强大的 PC 合成器;Kwin 和 Mutter 则由于历史原因,与 Plasma 和 GNOME 桌面环境有着深度的设计和功能绑定,在其基础上开发必然会引入许多其他桌面组件。在这样的背景下,笔者思考是否能够开发出一款功能强大且干净整洁的合成器,供各个桌面环境使用?wsm 正是在这种背景下应运而生。
    wsm 是一个基于 wlroots 技术打造的高效且轻巧的 Wayland 合成器,用于 Wayland 显示服务器协议的窗口管理器和桌面环境服务器。
    wsm 旨在统一 Wayland PC 生态系统中的合成器,力图像 Xserver 一样,经过时间的沉淀,打造一个统一且稳定的 Wayland 合成器。

核心功能

    wsm 提供了一套用于处理显示服务器输入、输出和窗口管理的基础功能。其核心功能包括:

  • 窗口录制支持:能够录制窗口图像,包括标题栏,实现所见即所得的效果。
  • 输入处理:支持各种输入设备(如键盘、鼠标、触摸屏、触控板等)的处理。
  • 渲染支持:支持硬件加速渲染(OpenGLES、Vulkan)和软件渲染(Cairo)。
  • 窗口和屏幕后处理特效:支持圆角、模糊、阴影和状态切换动画等。
  • 多工作区支持:支持单个屏幕多个工作区的管理功能。
  • 屏幕亮度调节:支持屏幕背光调光功能。
  • 屏幕水印:支持在合成器层面渲染屏幕水印节点。
  • 输入、输出配置和肌肉记忆:支持 wsm 作为唯一显示后端,记录硬件相关的配置参数。
  • 窗口平铺功能:支持窗口在屏幕上的停靠布局,屏幕二分、三分、四分屏等。
  • 动画线支持:提供高效的动画渲染机制。
  • 统一调试机制:支持场景渲染、DRM 输出、窗口管理、设备输入等核心功能的调试协议。
  • 多DRM 平面支持:充分使用 DRM 显示资源,提升渲染性能。

设计哲学

    wsm 的设计哲学是模块化和简洁。它将不同的功能分离到独立的模块中,使调用者可以根据需求选择使用 Wayland 协议调用这些模块。

主要组件

  • wsm_server:核心服务器。
  • wsm_output*:屏幕管理。
  • wsm_scene:渲染场景管理。
  • wsm_node*:自定义的渲染节点,用于在场景中显示图像。
  • wsm_xdg_shell:XDG窗口管理。
  • wsm_layer_shell:控制窗口层级和显示位置,通过用于管理桌面组件。
  • wsm_xwayland*: Xwayland窗口管理
  • wsm_workspace*:工作区

使用场景

  • wsm 主要用于开发Wayland显示服务器和窗口管理器,典型的使用场景包括:
  • 自定义窗口管理器:开发者可以基于 wsm 已有的基础功能快速构建具有自定义功能的窗口管理器。
  • 桌面环境:为新的桌面环境提供图形显示和窗口管理的基础支持。
  • 嵌入式系统:在嵌入式系统中实现轻量级的显示服务器。
  • 实验性项目:研究和实验新的窗口管理和显示技术。

基础框架

1.1 wsm基础框架图

结语

    wsm 作为一个强大且现代的 Wayland 合成器,虽然目前仍处于开发阶段,但笔者相信,只要按照现有的计划不断迭代功能,它终将成为一个稳定、高效的 Wayland 合成器。这样一来,操作系统厂商就能够在其基础上轻松地构建高效、定制化的解决方案,使其成为众多桌面环境的首选合成器基础。笔者在开发 wsm 项目的过程中始终遵循两点原则::

  • 与其为自己建一座桥,不如建一座坚固的大桥,让众人都能通行,而无需重复造桥。感谢 wlroots 项目为我的想法提供了非常强大的技术基础。
  • 我们应该充实和发展 wlroots 的生态,使 Wayland 走向使用同一个合成器。合成器承上启下,不需要重复实现,而是要奠定一个稳定且功能全面的版本,从而推动 Linux 驱动的改进和发展。

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