Live Plasma X11 session on ohm probed over SSH; substrate is healthy (xorg-server 21.1.22 + Mesa 26.0.5 / Panfrost, modesetting in-server, all 7 needed X protocol extensions live). Evidence in phase0_evidence/x11_inventory_2026-05-03/ — five raw captures + inventory.md summary. Worklist deliverables 2 + 4 flipped to done with operator-action checklist for the remaining gating items (no non-compositing WM installed today; six candidates one pacman -S away, openbox recommended). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
16 KiB
Phase 0 — X11 paths + measurement-instrument inventory
Date captured: 2026-05-03 09:08 CEST (ohm uptime 17h34m, 1280×800 panel)
Session under capture: Plasma X11 (startplasma-x11) on tty3,
session-id 347, Type=x11, kwin_x11 6.6.4 active (--replace).
Captured from: mfritsche@noether over SSH (ohm.fritz.box),
no operator interaction required for the captures themselves.
Raw evidence files in this directory:
01_live_session.txt— Xorg cmdline, kwin_x11 cmdline, plasmashell, full process tree, thermal/governor, Xorg.0.log tail.02_x11_paths.txt— installed packages, drivers, SDDM sessions, WM availability, mpv, rockchip-drm bind.03_xprotocol_extensions.txt— xdpyinfo, per-extension probes, glxinfo, drm_info (16k lines — large because drm_info dumps every property). Excerpts copied below.04_measurement_instruments.txt— tool availability + perf paranoid + xtrace probe.05_repo_check_and_planes.txt— repo availability of not-yet-installed tools + planes-table head from drm_info.
TL;DR
- The currently-live "X11" session is Plasma X11 with
kwin_x11as compositing WM. Perphase0_findings.md, this is explicitly excluded from the without-KWin cell of the matrix. It is still useful as the Phase 0 X11-substrate ground truth (liveXorg, live drivers, live extensions). A second X11 session type — no compositor — has to be created before the matrix can run its without-KWin cells. Operator action required (see § "What the campaign cannot acquire over SSH alone" below). - X11 stack is healthy on ohm:
xorg-server 21.1.22-1, sole DDX ismodesetting_drv.so(in-server), Mesa26.0.5-arch1.1, Panfrost (Mali-G52 r1 MC1), DRI3 + Present + Composite + XVideo + RANDR all initialized. Direct rendering: yes. - All required X protocol extensions for the matrix are present on the running server: Composite, DAMAGE, DRI3, Present, RANDR, SYNC, XVideo. (Confirmed via xdpyinfo extension listing — 28 extensions total.)
- rockchip-drm planes are the same ones the predecessor cataloged
on Wayland: Plane 39 (Primary, on CRTC 1 / object-id 52), Plane 45
(Overlay, on CRTCs {0,1}). Format-support details not re-extracted
in this capture but predecessor's
kwin_overlay_subsurface/phase2_source_findings.mdis valid for reference (Plane 39 is the only NV12-LINEAR-capable plane). - Most measurement tools we'll want are missing but free in extra:
xorg-xrandr,xorg-xev,xorg-xinput,xorg-xwininfo,xorg-xkill,sysprof. Operator-installable via onepacman -S. - mpv 0.41.0 is installed with libplacebo 7.360.1 — the
reference X11-overlay client called out in
phase0_findings.md§ "Open questions" can be added to the matrix without further install. - Firefox is NOT installed. Two of the six matrix cells (
C-W-ff-*,C-X-ff-*) need it. Operator decision whether to install or to drop Firefox from the matrix. - The X11 protocol tracer
xtraceis AUR-only, NOT in extra. The/usr/bin/xtraceshipped with glibc is a syscall tracer, unrelated. If protocol-trace evidence is wanted for X11 cells parallel toWAYLAND_DEBUG=1for Wayland cells, this is an operator-tasked install (or a build-from-source, or a switch toxscope/Python xcb capture). perf_event_paranoid = 2so perf record on Xorg PID needs sudo or a one-line sysctl tweak.
Deliverable 2 — X11 paths inventory
Installed (confirmed, no install needed)
| Component | Version | Notes |
|---|---|---|
xorg-server |
21.1.22-1 | binary /usr/lib/Xorg, runs as vt3 -seat seat0 -keeptty -novtswitch -verbose 3 -auth ... |
| Sole DDX driver | modesetting_drv.so |
shipped inside xorg-server; no xf86-video-* package needed (and none would help on rockchip-drm) |
| Mesa | 1:26.0.5-1 | Panfrost (Mali-G52 r1 MC1), GL 3.1 core / GLES 3.1 |
libdrm |
2.4.131-1 | |
libglvnd |
1.7.0-3 | |
xorg-xwayland |
24.1.11-1 | for the Wayland axis only — NOT used for native X11 cells |
| AIGLX module | rockchip | per Xorg.0.log line "AIGLX: Loaded and initialized rockchip" |
| GLX provider | DRI2 | Xorg log: "GLX: Initialized DRI2 GL provider for screen 0" — DRI3 also initialized via separate extension; both available to clients |
SDDM-advertised sessions
| File | Type | Exec | Status |
|---|---|---|---|
/usr/share/xsessions/plasmax11.desktop |
X11 | /usr/bin/startplasma-x11 |
the only X11 session SDDM offers today |
/usr/share/wayland-sessions/plasma.desktop |
Wayland | (Plasma 6.6.4 startup) | predecessor's baseline session |
/usr/share/wayland-sessions/weston.desktop |
Wayland | weston | reference Wayland compositor (separate concern) |
WM availability
| WM | Installed? | Available in repo? |
|---|---|---|
kwin_x11 |
yes (running) | (KDE) — excluded from without-KWin cell per matrix definition |
| openbox | no | yes (extra) |
| fluxbox | no | yes (extra) |
| i3-wm | no | yes (extra) |
| xfwm4 | no | yes (extra) |
| awesome | no | yes (extra) |
| bspwm | no | yes (extra) |
| icewm | no | yes (extra) |
| jwm | no | yes (extra) |
Verdict: zero non-compositing WMs are installed today. The
without-KWin cell of the matrix needs operator install +
SDDM session-entry creation (or a startx from a free TTY).
Recommendation: openbox. Smallest install, no compositing by
default, well-documented, used by the LFS/X11-tutorial canon for
this exact "minimal X11" purpose.
Display + DRM
- DRM driver: rockchip-drm (compatible
rockchip,display-subsystem). /dev/dri/card0(active) and/dev/dri/card1(secondary VOP — drm_info fails to read it, normal on dual-VOP rockchip), plus/dev/dri/renderD128.- Panel: 1280×800 @ 59.98 Hz (the panel is mounted portrait so the DRM mode reads as 800×1280; Xorg presents it 1280×800 logical after rotation).
- Xorg.0.log shows
modeset(0): Damage tracking initializedand a re-allocationAllocate new frame buffer 1280x800 stride— modesetting + DRI3-Present are wired up cleanly. /dev/video0..2present (hantro VPU character devices — unchanged from predecessor).
Browsers
| Browser | Installed? | Path |
|---|---|---|
| brave | yes | /usr/bin/brave (brave-bin 1:1.89.145-1) |
| chromium-fourier | yes | /tmp/chromium-ohm-gl-fix-step2/chrome (149.0.7812.0, Step 1 + Step 2) |
| firefox | no | NOT installed — operator decision needed |
Deliverable 4 — X11 measurement-instrument inventory
Installed and verified working
| Tool | Path | Owner pkg | Notes |
|---|---|---|---|
xprop |
/usr/bin/xprop |
xorg-xprop 1.2.8 | window-property dump (works) |
xdpyinfo |
/usr/bin/xdpyinfo |
xorg-xdpyinfo 1.4.0 | display + extension probe (works); per-extension probe limited (e.g. -ext Present returns "not supported by xdpyinfo" — the ext IS on the server, xdpyinfo just lacks the printer) |
xset |
/usr/bin/xset |
xorg-xset 1.2.5 | DPMS + repeat etc. |
xmessage |
/usr/bin/xmessage |
xorg-xmessage 1.0.7 | popup notifier — useful for unattended tests as ack-flag |
glxinfo / glxgears |
/usr/bin/glxinfo etc. |
mesa-utils 9.0.0 | GL renderer + benchmark fallback |
drm_info |
/usr/bin/drm_info |
drm-info 2.9.0 | plane/CRTC/format dump under live X11 |
perf |
/usr/bin/perf |
perf 7.0.2 | works; perf_event_paranoid=2 so attaching to Xorg needs sudo perf record -p <Xorg_pid> or sysctl kernel.perf_event_paranoid=1 first |
Python libxcb-present.so.0 |
shared lib present | (libxcb) | xcb_present capture from a small Python client is doable — the protocol-side present-feedback path the matrix wants for end-to-end latency timing |
Missing-but-installable (single pacman -S from extra)
| Tool | Pkg | Why we want it |
|---|---|---|
xrandr |
xorg-xrandr 1.5.4-1 |
output / vblank / mode CLI for the cells |
xev |
xorg-xev 1.2.6-2 |
per-window event capture (X equivalent of wayland-info event echo) |
xinput |
xorg-xinput 1.6.4-2 |
input-device probe for the touchscreen/touchpad confound |
xwininfo |
xorg-xwininfo 1.1.6-2 |
get the browser window's geometry/wid for targeted xprop/xrandr crop math |
xkill |
xorg-xkill 1.0.7-1 |
clean kill of a stuck client between reps |
sysprof |
sysprof 50.0-1 |
userspace alt to perf with nicer flamegraph defaults |
Recommend: install all six together —
sudo pacman -S xorg-xrandr xorg-xev xorg-xinput xorg-xwininfo xorg-xkill sysprof
(no session restart needed; doesn't affect kwin_x11).
Missing — AUR or build-from-source
| Tool | Source | Why we'd want it |
|---|---|---|
xtrace (X protocol tracer, NOT the glibc syscall xtrace) |
AUR | parallel to WAYLAND_DEBUG=1 for the X cells of the matrix — captures every X protocol request/reply per browser frame |
xrestop |
AUR | per-X-client resource (windows/pixmaps/GCs) snapshot — handy for "browser leaks GC handles per video frame" diagnostics |
intel-gpu-tools |
not applicable | rockchip GPU is Mali, irrelevant here |
xtrace (X-protocol) is the only one that materially affects the
research question. Whether to install is an operator decision —
the matrix doesn't strictly need protocol traces to answer the
research question (effective fps, drops, CPU% are
extension-independent), but they would be useful for cross-server
parity claims. Default-conservative: skip xtrace for now, add
later if a Phase 1 cell needs it.
What the X server itself supports (live xdpyinfo)
28 extensions. Of the seven the matrix actually needs:
| Extension | Status on running X server | Use |
|---|---|---|
| Composite | initialized (line 87 of Xorg log) | window-redirect base; off by default in non-compositing WMs which is what we want for the without-KWin cell |
| DAMAGE | initialized | per-window invalidation events |
| DRI3 | initialized | dmabuf import/export from clients (needed for browser/mpv hardware paths) |
| Present | initialized | flip-presentation w/ vblank-aligned timing — the X-side equivalent of wp_presentation_feedback for end-to-end latency |
| RANDR | initialized | mode + output info, vblank events |
| SYNC | initialized | XSyncCounter for present timing fences |
| XVideo | initialized | legacy hardware-overlay path (Xv); mpv --vo=xv uses this |
All seven are present.
Extension-level "is it really wired up" probe results
xdpyinfo -ext Present|DAMAGE|DRI3|RANDR|XVideoall return "extension not supported by xdpyinfo" — that's anxdpyinfocapability gap, not a server gap. Confirmed via the master extension list above.- For a definitive Present-extension probe, use a small XCB
client (
xcb_present_query_version) —libxcb-present.so.0is on the system. This is the same shape of probempv --vo=gpu --gpu-context=x11would do at startup; a successful mpv launch doubles as the probe. - Composite extension is initialized, but the matrix's
without-KWin cell wants Composite to be unredirected for the
browser window so that the X server's plane allocator can
scanout the browser's NV12 dmabuf onto Plane 39 directly.
Whether each browser actually issues
XCompositeUnredirectWindow(or just trusts no-compositor-WM default) is the browser-side open question inphase0_findings.md§ "Open questions". The Phase 0 browser-overlay-path inventory will address that.
Cross-checks against the predecessor
These ground-truth confirmations are from this campaign's session, not imported as data per the campaign-contained-data rule:
| Predecessor claim | This-session check | Match? |
|---|---|---|
| "Plane 39 is the Primary plane on the active CRTC" | drm_info under X11 shows Plane object-id 39 on CRTC object-id 52 (CRTC 1) | ✓ |
| "Plane 45 is the Overlay plane" | drm_info shows Plane object-id 45 on CRTCs {0,1} | ✓ |
| "rockchip-drm is the active DRM driver" | sysfs card0/device/uevent confirms DRIVER=rockchip-drm |
✓ |
| "kernel 6.19.10-danctnix1-1-pinetab2, Mesa 26.0.5" | uname -a + pacman -Q match | ✓ |
"CPU governor is performance" |
/sys/devices/system/cpu/cpu*/cpufreq/scaling_governor all = performance |
✓ |
| "/dev/video0..2 are the hantro VPU nodes" | confirmed (root:video, mode 660, present at session start) | ✓ |
These are agreement-with-substrate checks, not measurement imports. They establish that the hardware/kernel/Mesa/governor substrate the predecessor described is the substrate this campaign starts from.
What the campaign cannot acquire over SSH alone
These items require operator action because they involve session switches at the SDDM greeter or root-only state changes that warrant explicit ack:
-
Install the missing measurement tools (one-shot):
sudo pacman -S xorg-xrandr xorg-xev xorg-xinput xorg-xwininfo xorg-xkill sysprof(Optionally also:
sudo pacman -S openboxandsudo pacman -S firefox— see items 2 and 3.) -
Create a non-compositing WM session for the without-KWin cell. Operator decision: openbox (smallest, recommended) vs i3 vs fluxbox. Steps once a WM is installed (e.g. openbox):
sudo pacman -S openbox- Verify
/usr/share/xsessions/openbox.desktopexists (the openbox package ships one); SDDM picks it up at next greet. - Operator switches at the SDDM greeter (logout from current Plasma X11 → choose "Openbox" → log in). Cannot be SSH-driven.
- Once in the openbox session, this campaign re-runs the live-
session capture (
01_live_session.txt-equivalent) under the no-compositor WM to confirmkwin_x11is gone from the process list and the Composite extension is unused for browser windows.
-
Decide whether Firefox is in scope. Two cells of the matrix reference Firefox; it is not currently installed. Either
sudo pacman -S firefox(and thefirefox-vaapiis already part of mesa'sva_gldriver) or accept Firefox cells as N/A. -
Enable perf to attach to Xorg without sudo per-rep. Either the per-run cell uses
sudo perf record, or do once:echo "kernel.perf_event_paranoid = 1" | sudo tee /etc/sysctl.d/90-perf.conf sudo sysctl --systemThe latter is consistent with what the predecessor used for per-rep perf-on-
kwin_waylandcapture; recommend setting it the same way here. -
Optional: install the X-protocol
xtracefrom AUR (yay -S xtrace). Only if Phase 1 wants protocol-level evidence parallel toWAYLAND_DEBUG=1; the matrix's primary metrics (effective_fps / drops / latency / CPU%) don't require it.
What this inventory does NOT cover
These were called out as separate Phase 0 deliverables in
worklist.md and are not addressed here:
- Browser X11-overlay-path inventory (worklist.md § "browser X11-overlay-path inventory"). The matrix's strongest hypothesis depends on whether each browser actually requests hardware-overlay presentation under X11. Source-grep + chrome trace inspection — separate work item.
- A1 in-session Wayland baseline (worklist.md § "A1 baseline"). Mandatory per the governing rule. The user is currently in the X11 session, so the A1 Wayland baseline cannot be acquired until the user either switches back to Wayland or starts a parallel Wayland-only test rep. Operator-tasked.
- State snapshot of ohm under current Plasma Wayland (worklist.md item 1) — same constraint: requires the user to be in Wayland for the snapshot to be of Wayland. The current capture covers Plasma X11 instead, which is adjacent to but not a replacement for the Wayland snapshot.
Verdict for Phase 1 readiness (deliverables 2 + 4 only)
Phase 0 deliverables 2 and 4 are complete. The X11 substrate
exists, is healthy, and supports every protocol extension the matrix
will need. The without-KWin matrix cells are blocked on a small
operator-action list above (one pacman -S, one WM install + SDDM
session switch). No technical surprises — nothing structurally
prevents the matrix from running.