Files
punktfunk/tools/cursor-probe/Cargo.toml
T
enricobuehlerandClaude Fable 5 a8744b98d1 feat(devtools): reproduce the capture-model cursor path without a real client
punktfunk-probe grows --cursor-capture: advertise CLIENT_CAP_CURSOR,
flip the channel to the capture model (CursorRenderMode client_draws=
false), and wiggle RELATIVE pointer motion for the whole dump — decode
the .h265 and the host-composited pointer must be in the pixels. Plus
--codec pyrowave (advertised only on request so the dump format of
existing recipes never changes).

tools/cursor-probe stands up the capture side alone: virtual output with
the out-of-band cursor, production PipeWire capturer, production
injector, absolute then relative motion — and reports whether
SPA_META_Cursor ever yields an overlay. It is how Mutter's
pointer-in-stream metadata gate was isolated on-glass.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-29 17:59:04 +02:00

27 lines
1.1 KiB
TOML

# On-glass probe for the Linux cursor-as-metadata capture path: creates a virtual output with the
# out-of-band cursor requested (exactly like a cursor-channel session), attaches the production
# PipeWire capturer, wiggles the pointer over it via the production injector, and reports whether
# `SPA_META_Cursor` ever yields an overlay (position + bitmap). Answers "does THIS compositor
# deliver cursor metadata on a virtual output" without needing a client.
[package]
name = "cursor-probe"
description = "On-glass probe: does this compositor's virtual output deliver SPA_META_Cursor?"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
authors.workspace = true
repository.workspace = true
[target.'cfg(target_os = "linux")'.dependencies]
pf-vdisplay = { path = "../../crates/pf-vdisplay" }
pf-capture = { path = "../../crates/pf-capture" }
pf-inject = { path = "../../crates/pf-inject" }
punktfunk-core = { path = "../../crates/punktfunk-core", features = ["quic"] }
anyhow = "1"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter"] }
[lints]
workspace = true