# Stereo KWin bench root, 2026-10-13

A Debian testing root file system with Sparky Stereo OS's Stereo KWin and the DisplayXR window-geometry publisher, for the kwin phase of the VKMS bench ([tools/vkms-stereo-bench](https://github.com/Sparky-OS/sparky-stereo-os/tree/main/tools/vkms-stereo-bench)) or for running KWin headless (`kwin_wayland --virtual`) under bubblewrap.
It has no kernel and no boot loader: the bench boots its own kernel.
This root replaces the one published on 2026-10-12 (KWin 4:6.7.4-2+stereo3d18.2), which stays available under `previous/2026-10-12/`.

## Files

| File | What it is |
|---|---|
| `sparky-stereo-kwin-root-20261013.tar.zst` | the root: 718 packages, 507 MB compressed, about 1.6 GB unpacked |
| `sparky-stereo-kwin-root-20261013-sources.tar` | the Debian source packages of everything in it that Sparky Stereo OS builds or changes: base-files, ffmpeg-dmo, kf6-kimageformats, kf6-kio, kpipewire, krdp, kwin, libkscreen, mesa, plasma-wayland-protocols, qt6-base, stereo-declare, stereo-layer, xwayland |
| `sparky-stereo-kwin-root-20261013.packages` | every package and its version (also inside the root, at `/etc/sparky-stereo-kwin-root.packages`) |
| `SHA256SUMS` | checksums of the three files above |
| `build-kwin-root.sh`, `build-kwin-root.diff` | the recipe this root was built with, and its change against the published `tools/vkms-stereo-bench/tools/build-kwin-root.sh` |

Unpack it with `mkdir sparky-root && tar -C sparky-root --exclude='./dev/*' -xf sparky-stereo-kwin-root-20261013.tar.zst` (the guest mounts its own `/dev`).

## What changed

The edition's packages, against the package list of the 2026-10-11 root (the 2026-10-12 root added the publisher and moved KWin to +stereo3d18.1, then +stereo3d18.2 the same day):

| Package | Before | Now |
|---|---|---|
| KWin (kwin-wayland, libkwin6, kwin-common, kwin-data) | 4:6.7.4-2+stereo3d17, then +stereo3d18.2 | 4:6.7.4-2+stereo3d20 |
| displayxr-window-geometry-publisher-kwin | +stereo3d18.2 (2026-10-12) | 4:6.7.4-2+stereo3d20 |
| libkscreen (libkscreen-bin, libkf6screen8) | 4:6.7.4-1+stereo3d6 | 4:6.7.4-1+stereo3d7 |
| Mesa (mesa-libgallium, libegl-mesa0, libgbm1, libgl1-mesa-dri, libglx-mesa0) | 26.1.6-1+stereo3d9 | 26.1.6-1+stereo3d10 |
| plasma-wayland-protocols | not installed | 1.21.0-1+stereo3d5 |
| KPipeWire (libkpipewire6, libkpipewirerecord6, libkpipewiredmabuf6) | not installed | 6.7.4-1+stereo3d1 |
| krdp | not installed | 6.7.4-1+stereo3d1 |
| libstereo-declare1, libstereo-declare-dev | not installed | 1.1.0-1 |
| libstereo-layer1, libstereo-layer-dev | not installed | 1.1.0-1 |
| FFmpeg libraries from deb-multimedia (libavcodec63 and the rest), which KPipeWire and KRdp are built against | not installed | 10:9.0.2-dmo1+stereo3d3 |
| kimageformat6-plugins | not installed | 6.30.0-1+stereo3d2 |
| base-files | Debian's 14.2 | 14.sparky9~1 |
| Qt 6 base, Xwayland, KIO | 6.11.2+dfsg-5+stereo3d5, 2:24.1.13-1+stereo3d1, 6.30.0-1+stereo3d1 | unchanged |

What KWin gained for DisplayXR since +stereo3d18.1 (the full list is in the KWin changelog in the sources):
- +stereo3d18.2: move sync (a window of a process that enabled it is painted where each frame was woven for while it moves, capability bits 3 and 4); `buffer_device` in the snapshot, the device pixels the main surface is painted at; MoveWindow lands the buffer on the pixel the runtime expects; painted positions rounded as the scene renderer rounds them.
- +stereo3d19: laptop lids, depth levels for windows on stereo outputs, full side by side Qt Quick effects.
- +stereo3d20: the phone headset as a display (virtual panels with an identity and exact refresh, screencast version 7 per eye), built against plasma-wayland-protocols +stereo3d5.

The recipe now also installs the protocols, KPipeWire, KRdp and the stereo declaration and stereo layer libraries with their development files, and adds deb-multimedia (forky, signed by its keyring, which the build host needs at `/usr/share/keyrings/deb-multimedia-keyring.pgp`) for the FFmpeg libraries.

## How it was built

`build-kwin-root.sh` (mmdebstrap 1.5.7-3, unshare mode) in a throwaway container from `debian@sha256:9e1caa3238f2e4eee5b28c781ec712798d5d1192a6206d9e0bc7ee2861717a00` (debian:testing for amd64, pinned by digest), on 2026-10-13 at 16:44 UTC: Debian testing from deb.debian.org as of that time, the edition's packages from its repository pinned at 1001, and deb-multimedia forky.
The apt source for the edition inside the root is the build's local `copy:///repo` line, which exists only during the build: replace it before running apt in the root.

## Checked on it

Stereo KWin from this root ran headless at 100, 125, 150, 166.67 and 200 % with the publisher answering (placement capabilities 27), under DisplayXR's runtime (main 0929dd3b7a, with displayxr-runtime#2019) and cube_handle_vk_linux (displayxr-common v2.32.0, with displayxr-common#78).
The numbers are on [DisplayXR/displayxr-runtime#1928](https://github.com/DisplayXR/displayxr-runtime/issues/1928).
