协议驱动
mirage-display-v1 协议已经冻结,覆盖握手、输出注册、缓冲池绑定、帧与同步、配置、指针输入与错误处理等全部环节,以 protocol/mirage_display_v1.xml 为权威定义。
基于 mirage-display-v1 协议、稳定的 C ABI 消费/生产库与路由核心, MirageLinuxDisplay 让渲染器把 DMA-BUF 帧交给嵌入式 broker,再由 KDE Plasma 等桌面环境自有的壁纸表面呈现。像素数据全程留在 GPU 显存,从不经过 broker 拷贝。
核心能力
mirage-display-v1 协议已经冻结,覆盖握手、输出注册、缓冲池绑定、帧与同步、配置、指针输入与错误处理等全部环节,以 protocol/mirage_display_v1.xml 为权威定义。
嵌入式 md_broker 以权限 0600 的 Unix 域套接字提供服务,通过 SO_PEERCRED 校验对端是否同 UID,再按稳定输出标识把单个生产者与多个桌面消费者匹配起来,只转发报文与文件描述符。
核心实现使用 C++20,但 include/ 只导出 C11 与 C++ 都能用的稳定 C ABI,兼容 Qt、GObject 与 Rust FFI,公开 DTO 统一采用八字节定长布局。
ROUTING CORE
broker 负责稳定的发现与多输出路由,渲染器或桌面壳层重启后也能自动恢复连接;稳定输出标识取代了过去的屏幕索引约定。
$ ls -l $XDG_RUNTIME_DIR/mirage-wallpaper/ drwx------ mirage srwx------ display-v1.sock # AF_UNIX · SOCK_SEQPACKET · 0600 $ ss -xlp | grep display-v1 u_seq ESTAB 0 0 display-v1.sock peer: pid=… uid=1000 # SO_PEERCRED 同 UID
GPU HELPERS
EGL 路径借助 EGL_EXT_image_dma_buf_import 与原生 fence 完成同步;Vulkan 路径通过 external memory FD 与 DRM 修饰符导入,遇到无法直接采样的格式时,用同设备 relay/blit 回退到宿主可采样的图像。
EGL EGL_EXT_image_dma_buf_import EGL_LINUX_DMA_BUF_EXT + 原生 fence Vulkan VK_KHR_external_memory_fd DRM 修饰符枚举 + relay/blit 回退 Sync DRM syncobj 扇出 · sync_file 桥接
KDE PLASMA
作为 Plasma 6 的 Plasma/Wallpaper 壁纸包,它以 Qt Quick 显示项提供 EGL 与 Vulkan 双后端,支持多显示器、旋转、缩放、指针转发与窗口状态;工作区信息来自 Plasma/KWin 接口。
$ kpackagetool6 -t Plasma/Wallpaper \
-i mirage-wallpaper-0.2.0.zipmd_display_t* d = md_display_new(&cb); md_display_connect(d, sock, "kde", "0.2.0", &output, &caps, 5000); for (;;) md_display_dispatch(d);
渲染器 → 生产者 → MirageQt 内嵌 broker → libmirage-display 消费者 → DE 壁纸 / 背景 API → 合成器或 X 服务器
CLEAR BOUNDARY
本项目不会创建、也不会管理裸的 X11 桌面或根窗口。无论 X11 还是 Wayland,最终呈现都发生在桌面环境自有的集成点里——最后一跳永远属于桌面环境。
了解边界面向 KDE Plasma(X11 / Wayland),GNOME 与 layer-shell 正在规划中。