Skip to content

Instantly share code, notes, and snippets.

@samuela
Last active August 27, 2026 17:12
Show Gist options
  • Select an option

  • Save samuela/780868e1fb7122d2866fbae4d946a576 to your computer and use it in GitHub Desktop.

Select an option

Save samuela/780868e1fb7122d2866fbae4d946a576 to your computer and use it in GitHub Desktop.
Niri layer-surface DMA-BUF leak (niri-wm/niri#1457): matched A/B VM reproducer, measurements, and before/after plot for PR niri-wm/niri#4485

Niri layer-surface DMA-BUF leak — matched A/B reproducer, measurements & plot

This gist contains the harness, raw data, and plot for a matched A/B measurement of the Niri compositor memory leak fixed by niri-wm/niri#4485 (issue #1457): when an output is removed before a layer-shell client destroys its per-output layer surface, Niri retains the stale MappedLayer and its imported DMA-BUF indefinitely. On real hardware this accumulates ~84 MiB of GPU-backed shared memory per output off/on cycle for a full shell (~39 MiB for a minimal Quickshell layer) — a 16-day session with 138 HDMI reconnect cycles had accumulated ~12 GiB; see the incident postmortem.

before/after plot

Methodology (matched A/B VM run)

A single NixOS VM guest (QEMU TCG — no /dev/kvm needed; virtio-gpu without VirGL, so llvmpipe software EGL, with Niri running its real TTY/DRM backend, i.e. real output add/remove through DRM) runs the same experiment twice in the same guest, restarting the compositor between variants. The only difference is the niri binary:

variant revision
unpatched dd75865f547f0eac0e9b6c4d86d2cd00c0744252
fixed ecb953778c1031d0492cc6bc65429449cb32163c (PR niri-wm/niri#4485)

Each variant performs 10 output off/on cycles of the virtual output (Virtual-1). After each restore, a fresh generation of a synthetic layer-shell client (dmabuf-layer) maps a fullscreen background layer backed by an explicit DMA-BUF of 2560×1600 @ 4 Bpp = 16,384,000 bytes (15.625 MiB) — the same per-screen surface lifecycle pattern as a Quickshell/Noctalia shell (Variants { model: screens }). The client is killed by its own surface's closed event when the output goes away, exactly like a real shell's per-output surface.

The leak oracle is test-only, env-gated instrumentation (instrumentation.patch, applied identically to both revisions, not part of the PR): from inside remove_output(), Niri logs NIRI_REPRO_LAYER_METRICS mapped=N unmapped=M ... whenever NIRI_TEST_LAYER_METRICS=1. The collector (collect-dmabuf-tty.sh) reads that count plus the client's exact buffer size into a CSV per cycle. The full run is defined by vm-smoke.nix (a NixOS test whose test attribute performs the whole A/B, asserts the expected 10-vs-0 stale-layer counts, and exports the artifacts).

Results

Metric unpatched (dd75865f) fixed (ecb95377)
stale mapped layer surfaces after cycle k k (monotonic 0 → 10) 0 at every cycle
retained stale DMA-BUF payload per cycle 15.625 MiB 0 B
total retained after 10 cycles 156.25 MiB (163,840,000 B) 0 B

Raw per-cycle data: before.csv / after.csv (columns include client_buffer_bytes and stale_mapped_layers); compositor logs with the metric lines: niri-before.log / niri-after.log. The full VM test log is vm-test-run.log.

What this VM can and cannot show

To keep the plot honest:

  • Kernel-side DRM memory accounting is not observable on this virtio path — virtio dumb buffers do not expose drm-client-id fdinfo, so the fdinfo dumps from the run are empty and are not included.
  • Process RSS stays flat in both variants under llvmpipe, so RSS is not a leak signal here either.

The plot therefore shows compositor-side retention: stale layer surfaces retained in Niri's layer map, multiplied by the exact DMA-BUF payload each one holds (reported by the client itself). On real hardware these same retained imports manifest as GPU-backed shared DRM memory in the compositor's DRM client — the ~12 GiB case in the postmortem (~84 MiB per cycle with a full shell, ~39 MiB with a minimal Quickshell layer, measured on Intel i915 via /sys/kernel/debug/drm/<client>/ accounting).

For a human-verifiable reproduction on real hardware, shell.qml is the minimal Quickshell layer that exhibits the same lifecycle (map per screen, destroy on closed); cycle an output off/on with the output switch or a dock/undock and watch Niri's shared DRM memory grow on the unfixed build.

Reproducing

The delivered harness is exactly what produced the published numbers:

  1. Check out the two revisions and apply instrumentation.patch identically to both: git checkout dd75865f && git apply instrumentation.patch (same patch applies on ecb95377).
  2. Build each: nix develop --command cargo build, then copy each target/debug/niri to bin/niri-before / bin/niri-after beside vm-smoke.nix.
  3. Build the client: place dmabuf-layer-main.rs / dmabuf-layer-Cargo.toml in a dmabuf-layer/ crate and cargo build (the test expects ./dmabuf-layer/target/debug/niri-layer-output-dmabuf-reproducer).
  4. Run the whole A/B: nix build -L --builders '' --file vm-smoke.nix test --out-link result-ab (no KVM required — it runs under TCG; the test script itself takes ~7 minutes after the build). Artifacts land in result-ab/.
  5. Regenerate the plot: gnuplot plot.gp (reads before.csv / after.csv in the same directory, writes leak-before-after.png).

One machine-specific caveat: vm-smoke.nix pins the niri runtime closure (niriRuntimeDeps) by store path from the original build host, because it ships large prebuilt debug binaries into the guest verbatim. On a different machine, either substitute the runtime closure of your own builds or wire the two niri revisions into the test as build inputs instead; everything else (VM config, test script, assertions, collector) is machine-independent.

Files

File What it is
leak-before-after.png The before/after plot
plot.gp Self-contained gnuplot script for the plot
before.csv / after.csv Per-cycle measurements (unpatched / fixed)
niri-before.log / niri-after.log Compositor logs incl. NIRI_REPRO_LAYER_METRICS lines
before-client-logs.txt / after-client-logs.txt Client generation logs (READY ... bytes= lines)
before-final-layers.txt / after-final-layers.txt Final IPC layer listing (live layer still mapped)
vm-test-run.log Full NixOS VM test run log
vm-smoke.nix NixOS VM test definition (runs the whole A/B)
collect-dmabuf-tty.sh In-guest collector: drives the cycles, samples counters
sample-drm.sh DRM fdinfo sampler (effective on real hardware; no-op on virtio)
dmabuf-layer-main.rs / dmabuf-layer-Cargo.toml Synthetic DMA-BUF layer-shell client
shell.qml Minimal Quickshell reproducer for real sessions
instrumentation.patch Test-only, env-gated instrumentation (identical on both revisions)
== /tmp/after-client-10.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/after-client-11.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/after-client-1.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/after-client-2.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/after-client-3.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/after-client-4.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/after-client-5.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/after-client-6.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/after-client-7.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/after-client-8.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/after-client-9.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
Output "Virtual-1":
Background layer:
Surface:
Namespace: "niri-layer-output-dmabuf-reproducer"
Keyboard interactivity: none
Bottom layer: (empty)
Top layer: (empty)
Overlay layer: (empty)
variant revision cycle niri_total_kib niri_shared_kib niri_resident_kib niri_rss_kib client_total_kib client_shared_kib client_resident_kib client_rss_kib visible_layers client_buffer_bytes stale_mapped_layers
after ecb953778c1031d0492cc6bc65429449cb32163c 0 0 0 0 133008 0 0 0 32996 1 16384000 0
after ecb953778c1031d0492cc6bc65429449cb32163c 1 0 0 0 133324 0 0 0 32576 1 16384000 0
after ecb953778c1031d0492cc6bc65429449cb32163c 2 0 0 0 133324 0 0 0 32692 1 16384000 0
after ecb953778c1031d0492cc6bc65429449cb32163c 3 0 0 0 133332 0 0 0 32724 1 16384000 0
after ecb953778c1031d0492cc6bc65429449cb32163c 4 0 0 0 133332 0 0 0 32712 1 16384000 0
after ecb953778c1031d0492cc6bc65429449cb32163c 5 0 0 0 133332 0 0 0 32788 1 16384000 0
after ecb953778c1031d0492cc6bc65429449cb32163c 6 0 0 0 133332 0 0 0 32596 1 16384000 0
after ecb953778c1031d0492cc6bc65429449cb32163c 7 0 0 0 133332 0 0 0 32616 1 16384000 0
after ecb953778c1031d0492cc6bc65429449cb32163c 8 0 0 0 133332 0 0 0 32704 1 16384000 0
after ecb953778c1031d0492cc6bc65429449cb32163c 9 0 0 0 133332 0 0 0 32712 1 16384000 0
after ecb953778c1031d0492cc6bc65429449cb32163c 10 0 0 0 133332 0 0 0 32860 1 16384000 0
== /tmp/before-client-10.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/before-client-11.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/before-client-1.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/before-client-2.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/before-client-3.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/before-client-4.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/before-client-5.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/before-client-6.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/before-client-7.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/before-client-8.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
== /tmp/before-client-9.log ==
READY logical=1280x800 buffer=2560x1600 bytes=16384000
Output "Virtual-1":
Background layer:
Surface:
Namespace: "niri-layer-output-dmabuf-reproducer"
Keyboard interactivity: none
Bottom layer: (empty)
Top layer: (empty)
Overlay layer: (empty)
variant revision cycle niri_total_kib niri_shared_kib niri_resident_kib niri_rss_kib client_total_kib client_shared_kib client_resident_kib client_rss_kib visible_layers client_buffer_bytes stale_mapped_layers
before dd75865f547f0eac0e9b6c4d86d2cd00c0744252 0 0 0 0 149324 0 0 0 32112 1 16384000 0
before dd75865f547f0eac0e9b6c4d86d2cd00c0744252 1 0 0 0 149584 0 0 0 32796 1 16384000 1
before dd75865f547f0eac0e9b6c4d86d2cd00c0744252 2 0 0 0 149584 0 0 0 32724 1 16384000 2
before dd75865f547f0eac0e9b6c4d86d2cd00c0744252 3 0 0 0 149596 0 0 0 32628 1 16384000 3
before dd75865f547f0eac0e9b6c4d86d2cd00c0744252 4 0 0 0 149596 0 0 0 32704 1 16384000 4
before dd75865f547f0eac0e9b6c4d86d2cd00c0744252 5 0 0 0 149596 0 0 0 32728 1 16384000 5
before dd75865f547f0eac0e9b6c4d86d2cd00c0744252 6 0 0 0 149596 0 0 0 32640 1 16384000 6
before dd75865f547f0eac0e9b6c4d86d2cd00c0744252 7 0 0 0 149596 0 0 0 32928 1 16384000 7
before dd75865f547f0eac0e9b6c4d86d2cd00c0744252 8 0 0 0 149596 0 0 0 32716 1 16384000 8
before dd75865f547f0eac0e9b6c4d86d2cd00c0744252 9 0 0 0 149596 0 0 0 32920 1 16384000 9
before dd75865f547f0eac0e9b6c4d86d2cd00c0744252 10 0 0 0 149596 0 0 0 32620 1 16384000 10
#!/usr/bin/env bash
set -euo pipefail
if [[ $# -lt 8 || $# -gt 10 ]]; then
echo "usage: $0 LABEL REVISION NIRI_BIN CLIENT_BIN SAMPLE_DRM OUTPUT OUTPUT_CSV CYCLES [OFF_SECONDS] [SETTLE_SECONDS]" >&2
exit 2
fi
label=$1
revision=$2
niri_bin=$3
client_bin=$4
sample_drm=$5
output_name=$6
output_csv=$7
cycles=$8
off_seconds=${9:-1}
settle_seconds=${10:-2}
dmabuf_device=${DMABUF_DEVICE:-/dev/dri/renderD128}
: "${NIRI_SOCKET:?NIRI_SOCKET must point at the compositor IPC socket}"
: "${XDG_RUNTIME_DIR:?XDG_RUNTIME_DIR must be set}"
niri_pid=$(pgrep -u "$(id -u)" -x niri | head -n 1)
if [[ -z $niri_pid ]]; then
echo "could not find the niri process" >&2
exit 1
fi
socket_name=$(basename -- "$NIRI_SOCKET")
wayland_display=${socket_name#niri.}
wayland_display=${wayland_display%."$niri_pid".sock}
if [[ $wayland_display == "$socket_name" || -z $wayland_display ]]; then
echo "could not derive WAYLAND_DISPLAY from $NIRI_SOCKET and PID $niri_pid" >&2
exit 1
fi
client_pid=
client_buffer_bytes=0
generation=0
cleanup() {
if [[ -n ${client_pid:-} ]] && kill -0 "$client_pid" 2>/dev/null; then
kill -TERM "$client_pid" 2>/dev/null || true
wait "$client_pid" 2>/dev/null || true
fi
}
trap cleanup EXIT INT TERM
start_client() {
((generation += 1)) || true
local client_log="/tmp/$label-client-$generation.log"
env -u DISPLAY \
WAYLAND_DISPLAY="$wayland_display" \
BUFFER_SCALE=2 \
"$client_bin" "$dmabuf_device" \
>"$client_log" 2>&1 &
client_pid=$!
for _ in {1..600}; do
if ! kill -0 "$client_pid" 2>/dev/null; then
wait "$client_pid" || true
echo "DMA-BUF client exited during startup:" >&2
cat "$client_log" >&2
return 1
fi
if grep -q '^READY ' "$client_log" \
&& "$niri_bin" msg layers 2>/dev/null \
| grep -q 'niri-layer-output-dmabuf-reproducer'; then
client_buffer_bytes=$(sed -n 's/^READY .* bytes=\([0-9][0-9]*\)$/\1/p' "$client_log")
if [[ -z $client_buffer_bytes ]]; then
echo "could not parse DMA-BUF byte size from $client_log" >&2
return 1
fi
return 0
fi
sleep 0.1
done
echo "timed out waiting for DMA-BUF layer generation $generation" >&2
cat "$client_log" >&2
return 1
}
wait_for_client_exit() {
local client_log="/tmp/$label-client-$generation.log"
for _ in {1..600}; do
if ! kill -0 "$client_pid" 2>/dev/null; then
if ! wait "$client_pid"; then
echo "DMA-BUF client failed during output removal; see $client_log" >&2
return 1
fi
client_pid=
return 0
fi
sleep 0.1
done
echo "DMA-BUF client did not exit after output removal; see $client_log" >&2
return 1
}
layer_count() {
local count
count=$("$niri_bin" msg layers 2>/dev/null \
| grep -c 'niri-layer-output-dmabuf-reproducer' || true)
printf '%d\n' "$count"
}
sample_cycle() {
local cycle=$1
local compositor_counters client_counters retained_layers stale_layers
if ! compositor_counters=$("$sample_drm" "$niri_pid"); then
compositor_counters="0,0,0,$(awk '$1 == "VmRSS:" { print $2; exit }' "/proc/$niri_pid/status")"
fi
if ! client_counters=$("$sample_drm" "$client_pid"); then
client_counters="0,0,0,$(awk '$1 == "VmRSS:" { print $2; exit }' "/proc/$client_pid/status")"
fi
retained_layers=$(layer_count)
stale_layers=0
if [[ -n ${NIRI_REPRO_LOG:-} && -e $NIRI_REPRO_LOG ]]; then
stale_layers=$(sed -n \
's/.*NIRI_REPRO_LAYER_METRICS mapped=\([0-9][0-9]*\).*/\1/p' \
"$NIRI_REPRO_LOG" | tail -n 1)
stale_layers=${stale_layers:-0}
fi
printf '%s,%s,%d,%s,%s,%d,%s,%d\n' \
"$label" "$revision" "$cycle" \
"$compositor_counters" "$client_counters" "$retained_layers" \
"$client_buffer_bytes" "$stale_layers" \
| tee -a "$output_csv"
}
dump_niri_fdinfo() {
local destination=$1
: >"$destination"
for fdinfo in "/proc/$niri_pid"/fdinfo/*; do
if grep -q '^drm-client-id:' "$fdinfo" 2>/dev/null; then
printf '\n== %s ==\n' "$fdinfo" >>"$destination"
cat "$fdinfo" >>"$destination"
fi
done
}
printf '%s\n' \
'variant,revision,cycle,niri_total_kib,niri_shared_kib,niri_resident_kib,niri_rss_kib,client_total_kib,client_shared_kib,client_resident_kib,client_rss_kib,visible_layers,client_buffer_bytes,stale_mapped_layers' \
>"$output_csv"
start_client
sleep "$settle_seconds"
dump_niri_fdinfo "/tmp/$label-niri-fdinfo-start.txt"
sample_cycle 0
for ((cycle = 1; cycle <= cycles; cycle++)); do
"$niri_bin" msg output "$output_name" off >/dev/null
wait_for_client_exit
sleep "$off_seconds"
"$niri_bin" msg output "$output_name" on >/dev/null
start_client
sleep "$settle_seconds"
sample_cycle "$cycle"
done
dump_niri_fdinfo "/tmp/$label-niri-fdinfo-end.txt"
"$niri_bin" msg layers >"/tmp/$label-final-layers.txt"
: >"/tmp/$label-client-logs.txt"
for client_log in "/tmp/$label-client-"*.log; do
printf '== %s ==\n' "$client_log" >>"/tmp/$label-client-logs.txt"
cat "$client_log" >>"/tmp/$label-client-logs.txt"
done
[package]
name = "niri-layer-output-dmabuf-reproducer"
version = "0.1.0"
edition = "2021"
publish = false
[dependencies]
anyhow = "1"
gbm = { version = "0.18", default-features = false }
wayland-client = "0.31"
wayland-protocols = { version = "0.32", features = ["client"] }
wayland-protocols-wlr = { version = "0.3", features = ["client"] }
use std::fs::OpenOptions;
use std::os::fd::AsFd;
use anyhow::{Context, Result};
use gbm::{BufferObjectFlags, Device, Format};
use wayland_client::globals::{registry_queue_init, GlobalListContents};
use wayland_client::protocol::{
wl_buffer, wl_compositor, wl_output, wl_registry, wl_surface,
};
use wayland_client::{delegate_noop, Connection, Dispatch, QueueHandle};
use wayland_protocols::wp::linux_dmabuf::zv1::client::{
zwp_linux_buffer_params_v1, zwp_linux_dmabuf_v1,
};
use wayland_protocols_wlr::layer_shell::v1::client::{
zwlr_layer_shell_v1, zwlr_layer_surface_v1,
};
#[derive(Default)]
struct State {
configure: Option<(u32, u32)>,
closed: bool,
}
fn main() -> Result<()> {
let render_node = std::env::args()
.nth(1)
.unwrap_or_else(|| "/dev/dri/renderD128".to_owned());
let scale = std::env::var("BUFFER_SCALE")
.ok()
.and_then(|value| value.parse::<u32>().ok())
.unwrap_or(2);
let connection = Connection::connect_to_env().context("connect to Wayland compositor")?;
let (globals, mut event_queue) =
registry_queue_init::<State>(&connection).context("read Wayland globals")?;
let qh = event_queue.handle();
let compositor: wl_compositor::WlCompositor = globals
.bind(&qh, 4..=6, ())
.context("bind wl_compositor")?;
let output: wl_output::WlOutput =
globals.bind(&qh, 1..=4, ()).context("bind wl_output")?;
let layer_shell: zwlr_layer_shell_v1::ZwlrLayerShellV1 = globals
.bind(&qh, 1..=4, ())
.context("bind zwlr_layer_shell_v1")?;
let linux_dmabuf: zwp_linux_dmabuf_v1::ZwpLinuxDmabufV1 = globals
.bind(&qh, 3..=4, ())
.context("bind zwp_linux_dmabuf_v1")?;
let surface = compositor.create_surface(&qh, ());
let layer_surface = layer_shell.get_layer_surface(
&surface,
Some(&output),
zwlr_layer_shell_v1::Layer::Background,
"niri-layer-output-dmabuf-reproducer".to_owned(),
&qh,
(),
);
layer_surface.set_anchor(
zwlr_layer_surface_v1::Anchor::Top
| zwlr_layer_surface_v1::Anchor::Bottom
| zwlr_layer_surface_v1::Anchor::Left
| zwlr_layer_surface_v1::Anchor::Right,
);
layer_surface.set_exclusive_zone(-1);
layer_surface.set_size(0, 0);
surface.commit();
connection.flush().context("send initial layer commit")?;
let mut state = State::default();
while state.configure.is_none() {
event_queue
.blocking_dispatch(&mut state)
.context("wait for initial layer configure")?;
}
let (logical_width, logical_height) = state.configure.unwrap();
let logical_width = logical_width.max(1);
let logical_height = logical_height.max(1);
let buffer_width = logical_width.checked_mul(scale).context("buffer width overflow")?;
let buffer_height = logical_height.checked_mul(scale).context("buffer height overflow")?;
let drm_file = OpenOptions::new()
.read(true)
.write(true)
.open(&render_node)
.with_context(|| format!("open render node {render_node}"))?;
let gbm = Device::new(drm_file).context("create GBM device")?;
let bo = gbm
.create_buffer_object::<()>(
buffer_width,
buffer_height,
Format::Argb8888,
BufferObjectFlags::RENDERING | BufferObjectFlags::LINEAR,
)
.context("allocate linear ARGB8888 GBM buffer")?;
let dma_fd = bo.fd().context("export GBM buffer as DMA-BUF")?;
let stride = bo.stride();
let modifier: u64 = bo.modifier().into();
let params = linux_dmabuf.create_params(&qh, ());
params.add(
dma_fd.as_fd(),
0,
0,
stride,
(modifier >> 32) as u32,
modifier as u32,
);
let buffer = params.create_immed(
buffer_width as i32,
buffer_height as i32,
Format::Argb8888 as u32,
zwp_linux_buffer_params_v1::Flags::empty(),
&qh,
(),
);
params.destroy();
surface.set_buffer_scale(scale as i32);
surface.attach(Some(&buffer), 0, 0);
surface.damage_buffer(0, 0, buffer_width as i32, buffer_height as i32);
surface.commit();
connection.flush().context("map DMA-BUF layer")?;
println!(
"READY logical={}x{} buffer={}x{} bytes={}",
logical_width,
logical_height,
buffer_width,
buffer_height,
u64::from(stride) * u64::from(buffer_height)
);
while !state.closed {
event_queue
.blocking_dispatch(&mut state)
.context("wait for layer close")?;
}
buffer.destroy();
layer_surface.destroy();
surface.destroy();
connection.flush().context("send layer teardown")?;
drop((dma_fd, bo, gbm));
Ok(())
}
impl Dispatch<wl_registry::WlRegistry, GlobalListContents> for State {
fn event(
_state: &mut Self,
_proxy: &wl_registry::WlRegistry,
_event: wl_registry::Event,
_data: &GlobalListContents,
_connection: &Connection,
_qh: &QueueHandle<Self>,
) {
}
}
impl Dispatch<zwlr_layer_surface_v1::ZwlrLayerSurfaceV1, ()> for State {
fn event(
state: &mut Self,
layer_surface: &zwlr_layer_surface_v1::ZwlrLayerSurfaceV1,
event: zwlr_layer_surface_v1::Event,
_data: &(),
_connection: &Connection,
_qh: &QueueHandle<Self>,
) {
match event {
zwlr_layer_surface_v1::Event::Configure {
serial,
width,
height,
} => {
layer_surface.ack_configure(serial);
state.configure = Some((width, height));
}
zwlr_layer_surface_v1::Event::Closed => state.closed = true,
_ => {}
}
}
}
delegate_noop!(State: ignore wl_compositor::WlCompositor);
delegate_noop!(State: ignore wl_output::WlOutput);
delegate_noop!(State: ignore wl_surface::WlSurface);
delegate_noop!(State: ignore wl_buffer::WlBuffer);
delegate_noop!(State: ignore zwlr_layer_shell_v1::ZwlrLayerShellV1);
delegate_noop!(State: ignore zwp_linux_dmabuf_v1::ZwpLinuxDmabufV1);
delegate_noop!(State: ignore zwp_linux_buffer_params_v1::ZwpLinuxBufferParamsV1);
diff --git a/src/backend/mod.rs b/src/backend/mod.rs
index 49fbc6b0..11a0a61e 100644
--- a/src/backend/mod.rs
+++ b/src/backend/mod.rs
@@ -196,7 +196,7 @@ impl Backend {
pub fn on_output_config_changed(&mut self, niri: &mut Niri) {
match self {
Backend::Tty(tty) => tty.on_output_config_changed(niri),
- Backend::Winit(_) => (),
+ Backend::Winit(winit) => winit.on_output_config_changed(niri),
Backend::Headless(_) => (),
}
}
diff --git a/src/backend/tty.rs b/src/backend/tty.rs
index 6dd83492..1355f33f 100644
--- a/src/backend/tty.rs
+++ b/src/backend/tty.rs
@@ -786,20 +786,26 @@ impl Tty {
let mut try_initialize_gpu = || {
let display = unsafe { EGLDisplay::new(gbm.clone())? };
let egl_device = EGLDevice::device_for_display(&display)?;
+ let is_software = egl_device.is_software();
// Software EGL devices (e.g., llvmpipe/softpipe) are rejected for now. They have some
// problems (segfault on importing dmabufs from other renderers) and need to be
// excluded from some places like DRM leasing.
ensure!(
- !egl_device.is_software(),
+ !is_software
+ || std::env::var_os("NIRI_TEST_ALLOW_SOFTWARE_RENDERER").is_some(),
"software EGL renderers are skipped"
);
- let render_node = egl_device
- .try_get_render_node()
- .ok()
- .flatten()
- .unwrap_or(node);
+ let render_node = if is_software {
+ self.primary_render_node
+ } else {
+ egl_device
+ .try_get_render_node()
+ .ok()
+ .flatten()
+ .unwrap_or(node)
+ };
self.gpu_manager
.as_mut()
.add_node(render_node, gbm.clone())
diff --git a/src/backend/winit.rs b/src/backend/winit.rs
index f5ac80a2..6f112a63 100644
--- a/src/backend/winit.rs
+++ b/src/backend/winit.rs
@@ -130,11 +130,18 @@ impl Winit {
state.niri.ipc_outputs_changed = true;
}
- state.niri.output_resized(&winit.output);
+ if state.niri.output_exists(&winit.output) {
+ state.niri.output_resized(&winit.output);
+ }
}
WinitEvent::Input(event) => state.process_input_event(event),
WinitEvent::Focus(_) => (),
- WinitEvent::Redraw => state.niri.queue_redraw(&state.backend.winit().output),
+ WinitEvent::Redraw => {
+ let output = state.backend.winit().output.clone();
+ if state.niri.output_exists(&output) {
+ state.niri.queue_redraw(&output);
+ }
+ }
WinitEvent::CloseRequested => state.niri.stop_signal.stop(),
})
.unwrap();
@@ -309,6 +316,30 @@ impl Winit {
renderer.set_debug_flags(renderer.debug_flags() ^ DebugFlags::TINT);
}
+ /// Test-only hook that makes `niri msg output winit off/on` remove and restore the nested
+ /// compositor's synthetic output, matching a physical connector disconnect/reconnect.
+ pub fn on_output_config_changed(&mut self, niri: &mut Niri) {
+ let name = self.output.user_data().get::<OutputName>().unwrap();
+ let off = self
+ .config
+ .borrow()
+ .outputs
+ .find(name)
+ .is_some_and(|config| config.off);
+
+ match (off, niri.output_exists(&self.output)) {
+ (true, true) => niri.remove_output(&self.output),
+ (false, false) => niri.add_output(self.output.clone(), None, false),
+ _ => return,
+ }
+
+ let mut ipc_outputs = self.ipc_outputs.lock().unwrap();
+ let ipc_output = ipc_outputs.values_mut().next().unwrap();
+ ipc_output.current_mode = (!off).then_some(0);
+ ipc_output.logical = (!off).then(|| logical_output(&self.output));
+ niri.ipc_outputs_changed = true;
+ }
+
pub fn import_dmabuf(&mut self, dmabuf: &Dmabuf) -> bool {
match self.backend.renderer().import_dmabuf(dmabuf, None) {
Ok(_texture) => true,
diff --git a/src/niri.rs b/src/niri.rs
index fa44b5cb..e582a0b3 100644
--- a/src/niri.rs
+++ b/src/niri.rs
@@ -2936,6 +2936,15 @@ impl Niri {
layer.layer_surface().send_close();
}
+ if std::env::var_os("NIRI_TEST_LAYER_METRICS").is_some() {
+ warn!(
+ "NIRI_REPRO_LAYER_METRICS mapped={} unmapped={} removed_output_layers={}",
+ self.mapped_layer_surfaces.len(),
+ self.unmapped_layer_surfaces.len(),
+ layer_map_for_output(output).layers().count(),
+ );
+ }
+
self.layout.remove_output(output);
self.global_space.unmap_output(output);
self.reposition_outputs(None);
2026-08-27T14:30:46.511246Z  INFO niri: starting version 26.04 (v26.04-86-gecb95377-modified)
2026-08-27T14:30:47.000341Z DEBUG niri_config: loaded config from "/nix/store/gmpbc87798p6hxz382wk644jsld48ilh-niri-vm-test.kdl"
2026-08-27T14:30:48.150376Z  INFO niri::backend::tty: using as the render node: "/dev/dri/renderD128"
2026-08-27T14:30:49.532288Z DEBUG niri::backend::tty: adding device: 57856 "/dev/dri/card0"
2026-08-27T14:30:49.536540Z DEBUG niri::backend::tty: this is the primary node
2026-08-27T14:30:49.552457Z  WARN smithay::backend::drm::device::fd: Unable to become drm master, assuming unprivileged mode
2026-08-27T14:30:50.643178Z DEBUG niri::backend::tty: got render node: renderD128
2026-08-27T14:30:50.646719Z DEBUG niri::backend::tty: initializing the primary renderer
2026-08-27T14:30:50.661624Z  WARN smithay::backend::egl::context: ignoring requested context priority, EGL_IMG_context_priority not supported priority=High
2026-08-27T14:30:51.970363Z DEBUG niri::backend::tty: device changed: 57856
2026-08-27T14:30:52.046259Z DEBUG niri::backend::tty: new connector: Virtual-1 "Red Hat, Inc. QEMU Monitor Unknown"
2026-08-27T14:30:52.091950Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:30:52.099157Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:30:52.110910Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:30:52.122125Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:30:52.130830Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:30:52.238188Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:30:52.472161Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:30:52.570659Z  INFO niri: listening on Wayland socket: wayland-1
2026-08-27T14:30:52.573299Z  INFO niri: IPC listening on: /run/user/1000/niri.wayland-1.3160.sock
2026-08-27T14:30:52.608617Z  WARN niri::utils::xwayland::satellite: error spawning xwayland-satellite at "xwayland-satellite", disabling integration: No such file or directory (os error 2)
2026-08-27T14:30:53.675144Z  WARN niri::cursor: error loading xcursor default@24: no default icon
2026-08-27T14:31:18.000546Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:31:18.017049Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=0 unmapped=0 removed_output_layers=0
2026-08-27T14:31:20.559851Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:31:20.562056Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:31:20.563601Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:31:20.564676Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:31:20.565630Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:31:20.579567Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:31:20.629685Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:31:20.841970Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:31:30.021697Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:31:30.024274Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=0 unmapped=0 removed_output_layers=0
2026-08-27T14:31:32.641990Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:31:32.643237Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:31:32.644331Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:31:32.645227Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:31:32.645711Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:31:32.654823Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:31:32.689688Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:31:32.902891Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:31:41.846277Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:31:41.850332Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=0 unmapped=0 removed_output_layers=0
2026-08-27T14:31:44.408053Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:31:44.409387Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:31:44.410539Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:31:44.411615Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:31:44.412256Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:31:44.422639Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:31:44.462416Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:31:44.661068Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:31:53.758325Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:31:53.761381Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=0 unmapped=0 removed_output_layers=0
2026-08-27T14:31:56.339632Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:31:56.341044Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:31:56.342056Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:31:56.342653Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:31:56.343449Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:31:56.352321Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:31:56.397057Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:31:56.595371Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:32:05.703258Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:32:05.706016Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=0 unmapped=0 removed_output_layers=0
2026-08-27T14:32:08.250511Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:32:08.252100Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:32:08.253115Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:32:08.253890Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:32:08.254275Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:32:08.263316Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:32:08.306317Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:32:08.501696Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:32:17.467496Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:32:17.470483Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=0 unmapped=0 removed_output_layers=0
2026-08-27T14:32:20.032104Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:32:20.033479Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:32:20.034597Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:32:20.035576Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:32:20.036212Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:32:20.046430Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:32:20.094528Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:32:20.277670Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:32:29.277149Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:32:29.279640Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=0 unmapped=0 removed_output_layers=0
2026-08-27T14:32:31.841442Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:32:31.842915Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:32:31.844154Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:32:31.845148Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:32:31.845675Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:32:31.855938Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:32:31.897953Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:32:32.109143Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:32:41.165106Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:32:41.167563Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=0 unmapped=0 removed_output_layers=0
2026-08-27T14:32:43.783693Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:32:43.785192Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:32:43.786363Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:32:43.787289Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:32:43.787997Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:32:43.796648Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:32:43.835994Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:32:44.048616Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:32:53.240645Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:32:53.243165Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=0 unmapped=0 removed_output_layers=0
2026-08-27T14:32:55.793272Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:32:55.794991Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:32:55.795975Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:32:55.796633Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:32:55.797191Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:32:55.805234Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:32:55.851297Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:32:56.068000Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:33:05.050248Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:33:05.052706Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=0 unmapped=0 removed_output_layers=0
2026-08-27T14:33:07.622078Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:33:07.623509Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:33:07.625176Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:33:07.626666Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:33:07.627638Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:33:07.638449Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:33:07.687301Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:33:07.883066Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:27:49.638611Z  INFO niri: starting version 26.04 (v26.04-85-gdd75865f-modified)
2026-08-27T14:27:50.477650Z DEBUG niri_config: loaded config from "/nix/store/gmpbc87798p6hxz382wk644jsld48ilh-niri-vm-test.kdl"
2026-08-27T14:27:52.587494Z  INFO niri::backend::tty: using as the render node: "/dev/dri/renderD128"
2026-08-27T14:27:56.105475Z DEBUG niri::backend::tty: adding device: 57856 "/dev/dri/card0"
2026-08-27T14:27:56.111096Z DEBUG niri::backend::tty: this is the primary node
2026-08-27T14:27:56.151236Z  WARN smithay::backend::drm::device::fd: Unable to become drm master, assuming unprivileged mode
2026-08-27T14:28:02.376336Z DEBUG niri::backend::tty: got render node: renderD128
2026-08-27T14:28:02.380277Z DEBUG niri::backend::tty: initializing the primary renderer
2026-08-27T14:28:02.395420Z  WARN smithay::backend::egl::context: ignoring requested context priority, EGL_IMG_context_priority not supported priority=High
2026-08-27T14:28:13.818583Z DEBUG niri::backend::tty: device changed: 57856
2026-08-27T14:28:14.030038Z DEBUG niri::backend::tty: new connector: Virtual-1 "Red Hat, Inc. QEMU Monitor Unknown"
2026-08-27T14:28:14.099553Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:28:14.112231Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:28:14.138954Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:28:14.164518Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:28:14.178705Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:28:14.411554Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:28:15.028390Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:28:15.230316Z  INFO niri: listening on Wayland socket: wayland-1
2026-08-27T14:28:15.236474Z  INFO niri: IPC listening on: /run/user/1000/niri.wayland-1.1052.sock
2026-08-27T14:28:15.318568Z  WARN niri::utils::xwayland::satellite: error spawning xwayland-satellite at "xwayland-satellite", disabling integration: No such file or directory (os error 2)
2026-08-27T14:28:16.691434Z DEBUG niri::backend::tty: adding device: 57984 "/dev/dri/renderD128"
2026-08-27T14:28:16.705418Z DEBUG niri::backend::tty: not a primary node, skipping
2026-08-27T14:28:17.148538Z  WARN niri::cursor: error loading xcursor default@24: no default icon
2026-08-27T14:28:42.702340Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:28:42.706088Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=1 unmapped=0 removed_output_layers=1
2026-08-27T14:28:45.464360Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:28:45.465958Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:28:45.467372Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:28:45.468545Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:28:45.469365Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:28:45.483954Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:28:45.529670Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:28:45.761306Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:28:54.615455Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:28:54.616895Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=2 unmapped=0 removed_output_layers=1
2026-08-27T14:28:57.206992Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:28:57.208278Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:28:57.209369Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:28:57.210152Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:28:57.210560Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:28:57.218524Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:28:57.262376Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:28:57.503064Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:29:06.115060Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:29:06.116191Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=3 unmapped=0 removed_output_layers=1
2026-08-27T14:29:08.659398Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:29:08.660989Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:29:08.662087Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:29:08.662905Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:29:08.663338Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:29:08.673212Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:29:08.714393Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:29:08.924912Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:29:17.498115Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:29:17.499229Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=4 unmapped=0 removed_output_layers=1
2026-08-27T14:29:20.060962Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:29:20.062282Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:29:20.063397Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:29:20.064485Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:29:20.065119Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:29:20.074181Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:29:20.116438Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:29:20.323024Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:29:28.887461Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:29:28.889124Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=5 unmapped=0 removed_output_layers=1
2026-08-27T14:29:31.446438Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:29:31.447935Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:29:31.449022Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:29:31.449939Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:29:31.450444Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:29:31.460459Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:29:31.505192Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:29:31.706936Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:29:40.276530Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:29:40.277590Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=6 unmapped=0 removed_output_layers=1
2026-08-27T14:29:42.809016Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:29:42.810294Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:29:42.811333Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:29:42.812286Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:29:42.813485Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:29:42.823650Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:29:42.869439Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:29:43.080243Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:29:51.819702Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:29:51.821490Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=7 unmapped=0 removed_output_layers=1
2026-08-27T14:29:54.422885Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:29:54.424047Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:29:54.425042Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:29:54.425627Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:29:54.426191Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:29:54.434434Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:29:54.477993Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:29:54.680288Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:30:03.239293Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:30:03.240394Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=8 unmapped=0 removed_output_layers=1
2026-08-27T14:30:05.906030Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:30:05.907988Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:30:05.909913Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:30:05.911331Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:30:05.913132Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:30:05.927208Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:30:05.974330Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:30:06.167551Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:30:14.804208Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:30:14.805493Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=9 unmapped=0 removed_output_layers=1
2026-08-27T14:30:17.377031Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:30:17.378304Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:30:17.379420Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:30:17.380265Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:30:17.380868Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:30:17.389234Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:30:17.452396Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:30:17.668990Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:30:26.234346Z DEBUG niri::backend::tty: disconnecting connector: "Virtual-1"
2026-08-27T14:30:26.235424Z  WARN niri::niri: NIRI_REPRO_LAYER_METRICS mapped=10 unmapped=0 removed_output_layers=1
2026-08-27T14:30:28.811467Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:30:28.812657Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:30:28.813923Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:30:28.814579Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:30:28.815313Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:30:28.824050Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:30:28.873229Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:30:29.084129Z  WARN smithay::backend::drm::surface::atomic: Failed to destroy old mode property blob: No such file or directory (os error 2)
2026-08-27T14:30:41.890255Z  INFO niri::utils::signals::platform: quitting due to receiving signal SIGTERM
2026-08-27T14:30:42.083141Z DEBUG niri::utils::watcher: exiting watcher thread for Explicit("/nix/store/gmpbc87798p6hxz382wk644jsld48ilh-niri-vm-test.kdl")
2026-08-27T14:30:42.287423Z ERROR smithay::backend::drm::device::atomic: Failed to restore previous state. Error: Permission denied (os error 13)
#!/usr/bin/env gnuplot
# Before/after plot for the Niri layer-surface DMA-BUF leak
# (niri-wm/niri issue #1457, fix PR niri-wm/niri#4485).
#
# Data source: matched A/B VM run in a single QEMU virtio-gpu guest running
# Niri's real TTY/DRM backend (see README.md in this gist for methodology).
# before.csv = unpatched niri @ dd75865f547f0eac0e9b6c4d86d2cd00c0744252
# after.csv = fixed niri @ ecb953778c1031d0492cc6bc65429449cb32163c
#
# CSV columns (see header row): 3 = cycle, 13 = client_buffer_bytes,
# 14 = stale_mapped_layers. `every ::1` skips the header row.
#
# Top panel: retained stale DMA-BUF payload in MiB, computed as
# client_buffer_bytes * stale_mapped_layers / 2^20
# Bottom panel: stale layer surfaces retained in the compositor's layer map
#
# Run from the directory containing before.csv / after.csv:
# gnuplot plot.gp (writes leak-before-after.png)
set terminal pngcairo size 1200, 900 background rgb "white" font "Sans,13"
set output "leak-before-after.png"
set datafile separator ","
BEFORE = "before.csv"
AFTER = "after.csv"
# Series colors: unpatched = red, fixed = green
CB = "#d62728"
CA = "#1a7f37"
set title "Niri layer-surface DMA-BUF retention: unpatched vs fixed (matched A/B VM run)\n{/:Small Same QEMU virtio-gpu guest, same DMA-BUF layer client, same cycle timing; only the compositor binary differs. Metric: compositor-side retention (see README)}"
set xrange [-0.5:10.5]
set xtics 0, 1, 10
set border 3
set grid ytics lt 0 lc rgb "#dddddd"
set multiplot layout 2, 1
# --- Top panel: retained stale DMA-BUF payload (MiB) -----------------------
set ylabel "Retained stale DMA-BUF payload (MiB)"
set yrange [0:185]
set format x ""
set key top left spacing 1.3
set label 1 "leak rate: 15.625 MiB per output cycle" at 7.8, 48 center font "Sans,12" textcolor rgb "#404040"
set arrow 1 from 7.8, 57 to 7.8, 112 head lw 1.2 lc rgb "#555555"
set label 2 "156.25 MiB after 10 cycles" at 9.6, 168 right font "Sans,12" textcolor rgb CB
set label 3 "0 MiB retained" at 5.0, 10 center font "Sans,12" textcolor rgb CA
plot BEFORE every ::1 using 3:($13*$14/1048576) with linespoints pt 7 ps 1.1 lw 2 lc rgb CB title "unpatched (dd75865f)", \
AFTER every ::1 using 3:($13*$14/1048576) with linespoints pt 5 ps 1.1 lw 2 lc rgb CA title "fixed (ecb95377, PR #4485)"
# --- Bottom panel: stale layer surfaces retained ----------------------------
unset label 1
unset label 2
unset label 3
unset arrow 1
set title ""
set format x "%g"
set xlabel "output off/on cycle"
set ylabel "Stale layer surfaces retained\n(compositor map)"
set yrange [0:11.5]
set key off
plot BEFORE every ::1 using 3:14 with linespoints pt 7 ps 1.1 lw 2 lc rgb CB notitle, \
AFTER every ::1 using 3:14 with linespoints pt 5 ps 1.1 lw 2 lc rgb CA notitle
unset multiplot
#!/usr/bin/env bash
set -euo pipefail
if [[ $# -ne 1 ]]; then
echo "usage: $0 PID" >&2
exit 2
fi
sample_pid=$1
declare -A seen_clients=()
total_kib=0
shared_kib=0
resident_kib=0
for fdinfo in "/proc/$sample_pid"/fdinfo/*; do
client_id=$(awk '$1 == "drm-client-id:" { print $2; exit }' "$fdinfo" 2>/dev/null || true)
[[ -n $client_id ]] || continue
device=$(awk '$1 == "drm-pdev:" { print $2; exit }' "$fdinfo" 2>/dev/null || true)
client_key="${device:-unknown}/$client_id"
[[ -z ${seen_clients[$client_key]+present} ]] || continue
seen_clients[$client_key]=1
read -r client_total client_shared client_resident < <(
awk '
$1 ~ /^drm-total-/ { total += $2 }
$1 ~ /^drm-shared-/ { shared += $2 }
$1 ~ /^drm-resident-/ { resident += $2 }
END { printf "%d %d %d\n", total, shared, resident }
' "$fdinfo"
)
((total_kib += client_total)) || true
((shared_kib += client_shared)) || true
((resident_kib += client_resident)) || true
done
if (( ${#seen_clients[@]} == 0 )); then
echo "no DRM client counters found for PID $sample_pid" >&2
exit 1
fi
rss_kib=$(awk '$1 == "VmRSS:" { print $2; exit }' "/proc/$sample_pid/status")
printf '%d,%d,%d,%d\n' "$total_kib" "$shared_kib" "$resident_kib" "$rss_kib"
import QtQuick
import Quickshell
import Quickshell.Wayland
ShellRoot {
Variants {
model: Quickshell.screens
delegate: PanelWindow {
required property ShellScreen modelData
screen: modelData
color: "#203040"
anchors {
top: true
bottom: true
left: true
right: true
}
WlrLayershell.layer: WlrLayer.Background
WlrLayershell.namespace: "niri-layer-output-leak-reproducer"
WlrLayershell.exclusionMode: ExclusionMode.Ignore
}
}
}
let
pkgs = import <nixpkgs> { };
niriRuntimeDeps = [
(builtins.storePath "/nix/store/0iv8glcslgfcgn371lbjr5jjw5a6cqir-gcc-15.3.0-lib")
(builtins.storePath "/nix/store/456p4q4ka95c0i2i5hd5hfbinn1568s0-pixman-0.46.4")
(builtins.storePath "/nix/store/5za8k2yfzgqhxrrjx7gkamgm6s80pra9-harfbuzz-13.2.1")
(builtins.storePath "/nix/store/7pnisyzd7zvz0gg3jhgmzrd486lqwcih-pipewire-1.6.8")
(builtins.storePath "/nix/store/aclryalbnnwidjhf21s0bpsm4v0v182l-libdisplay-info-0.3.0")
(builtins.storePath "/nix/store/axx9bvf0dmah41f39ds9xdkds1lsz6z9-systemd-261")
(builtins.storePath "/nix/store/bn21gzsggp8dvzfizi3nhhmz0s555ybq-libxkbcommon-1.13.2")
(builtins.storePath "/nix/store/bz0iyqml02szkbk1h2a37wl4nbl6irm1-systemd-minimal-libs-261")
(builtins.storePath "/nix/store/c9qdmjd4c1cc5phnwz3r38mc26xyvzfz-pango-1.57.1")
(builtins.storePath "/nix/store/fw02nk054hybn1swhrfgvln90rfav0iv-seatd-0.9.3")
(builtins.storePath "/nix/store/kl041rz45ijs9qp7ahjr1zabw0fl2xwx-cairo-1.18.4")
(builtins.storePath "/nix/store/kzym5fa5jsw2ykpxlmdy9sswh5g81kxj-mesa-libgbm-26.1.3")
(builtins.storePath "/nix/store/l8si8gnvvq93yzms1jsgh5aixyf9rl5x-glibc-2.42-67")
(builtins.storePath "/nix/store/msjil83s4z6f0h373c8q4fm7rkhjax46-wayland-1.26.0")
(builtins.storePath "/nix/store/v8x5c24y4zgxv5xmwhz5lz26ir816c31-libglvnd-1.7.0")
(builtins.storePath "/nix/store/y3z5sr16sxd50bgcn2zkn46afn8fy0na-glib-2.88.1")
(builtins.storePath "/nix/store/ywvmyakqkzflp1mq6z0ly8widqrdgad5-libinput-1.31.3")
];
beforeNiri = pkgs.runCommand "niri-before-dd75865f" { inherit niriRuntimeDeps; } ''
mkdir -p "$out/bin"
cp ${./bin/niri-before} "$out/bin/niri"
'';
afterNiri = pkgs.runCommand "niri-after-ecb95377" { inherit niriRuntimeDeps; } ''
mkdir -p "$out/bin"
cp ${./bin/niri-after} "$out/bin/niri"
'';
dmabufClient = pkgs.runCommand "niri-layer-output-dmabuf-reproducer" {
inherit niriRuntimeDeps;
} ''
mkdir -p "$out/bin"
cp ${./dmabuf-layer/target/debug/niri-layer-output-dmabuf-reproducer} \
"$out/bin/niri-layer-output-dmabuf-reproducer"
'';
reproTools = pkgs.runCommand "niri-layer-output-reproducer-tools" { } ''
mkdir -p "$out/bin"
cp ${./collect-dmabuf-tty.sh} "$out/bin/collect-dmabuf-tty"
cp ${./sample-drm.sh} "$out/bin/sample-drm"
substituteInPlace "$out/bin/collect-dmabuf-tty" \
--replace-fail '#!/usr/bin/env bash' '#!${pkgs.bash}/bin/bash'
substituteInPlace "$out/bin/sample-drm" \
--replace-fail '#!/usr/bin/env bash' '#!${pkgs.bash}/bin/bash'
chmod +x "$out/bin/collect-dmabuf-tty" "$out/bin/sample-drm"
'';
config = pkgs.writeText "niri-vm-test.kdl" ''
hotkey-overlay {
skip-at-startup
}
'';
launcher = pkgs.writeShellApplication {
name = "niri-vm-launcher";
runtimeInputs = [ pkgs.coreutils ];
text = ''
while true; do
while [[ ! -e /home/alice/.niri-variant ]]; do
sleep 0.1
done
variant=$(< /home/alice/.niri-variant)
case "$variant" in
before) niri=${beforeNiri}/bin/niri ;;
after) niri=${afterNiri}/bin/niri ;;
*) echo "unknown variant: $variant" >&2; exit 1 ;;
esac
rm -f /home/alice/.niri-variant
if LIBSEAT_BACKEND=seatd \
XDG_RUNTIME_DIR=/run/user/1000 \
NIRI_TEST_ALLOW_SOFTWARE_RENDERER=1 \
NIRI_TEST_LAYER_METRICS=1 \
RUST_LOG=niri=debug,smithay=warn \
"$niri" --config ${config} >"/tmp/niri-$variant.log" 2>&1
then
status=0
else
status=$?
fi
printf '%s\n' "$status" >"/tmp/niri-$variant.status"
touch "/tmp/niri-$variant.done"
done
'';
};
in
{
inherit beforeNiri afterNiri dmabufClient reproTools;
test = pkgs.testers.runNixOSTest {
name = "niri-layer-output-ab";
globalTimeout = 3600;
nodes.machine = {
imports = [ "${pkgs.path}/nixos/tests/common/user-account.nix" ];
services.getty.autologinUser = "alice";
users.users.alice.extraGroups = [
"seat"
"video"
"render"
"input"
];
services.seatd.enable = true;
hardware.graphics.enable = true;
networking.useDHCP = false;
environment.systemPackages = [
beforeNiri
afterNiri
dmabufClient
launcher
reproTools
pkgs.gawk
pkgs.gnugrep
pkgs.mesa-demos
pkgs.procps
pkgs.wayland-utils
];
programs.bash.loginShellInit = ''
if [[ $(tty) == /dev/tty1 ]]; then
exec ${launcher}/bin/niri-vm-launcher
fi
'';
virtualisation.memorySize = 3072;
virtualisation.cores = 2;
virtualisation.qemu.options = [ "-vga none -device virtio-gpu-pci" ];
};
testScript = ''
import csv
import io
import os
def start_niri(variant):
machine.succeed(
f"su - alice -c 'printf {variant} >/home/alice/.niri-variant'"
)
machine.wait_until_succeeds(
f"pgrep -u alice -x niri || test -e /tmp/niri-{variant}.done",
timeout=120,
)
print(machine.succeed(f"cat /tmp/niri-{variant}.log"))
machine.succeed("pgrep -u alice -x niri")
machine.wait_until_succeeds(
"find /run/user/1000 -maxdepth 1 -type s -name 'niri.*.sock' | grep -q .",
timeout=120,
)
socket = machine.succeed(
"find /run/user/1000 -maxdepth 1 -type s -name 'niri.*.sock' | head -n 1"
).strip()
machine.sleep(10)
print(machine.succeed(f"cat /tmp/niri-{variant}.log"))
print(machine.succeed(
"for file in /sys/class/drm/card0-Virtual-1/status "
"/sys/class/drm/card0-Virtual-1/enabled "
"/sys/class/drm/card0-Virtual-1/modes; do "
"echo $file; cat $file; done"
))
print(machine.succeed(
f"su - alice -c 'NIRI_SOCKET={socket} ${beforeNiri}/bin/niri msg outputs' || true"
))
machine.wait_until_succeeds(
f"su - alice -c 'NIRI_SOCKET={socket} ${beforeNiri}/bin/niri msg outputs' "
"| grep -q 'Virtual-1'",
timeout=180,
)
print(machine.succeed(
f"su - alice -c 'NIRI_SOCKET={socket} ${beforeNiri}/bin/niri msg outputs'"
))
print(machine.succeed("ls -l /dev/dri; id alice"))
machine.succeed(
"su - alice -c 'test -r /dev/dri/renderD128 -a -w /dev/dri/renderD128'"
)
return socket
def stop_niri():
machine.succeed("pkill -TERM -u alice -x niri")
machine.wait_until_fails("pgrep -u alice -x niri", timeout=180)
machine.wait_until_fails(
"find /run/user/1000 -maxdepth 1 -type s -name 'niri.*.sock' | grep -q .",
timeout=60,
)
def collect(variant, revision, niri, socket):
command = (
"XDG_RUNTIME_DIR=/run/user/1000 "
f"NIRI_SOCKET={socket} "
"DMABUF_DEVICE=/dev/dri/card0 "
f"NIRI_REPRO_LOG=/tmp/niri-{variant}.log "
"${reproTools}/bin/collect-dmabuf-tty "
f"{variant} {revision} {niri} "
"${dmabufClient}/bin/niri-layer-output-dmabuf-reproducer "
"${reproTools}/bin/sample-drm Virtual-1 "
f"/tmp/{variant}.csv 10 2 2"
)
machine.succeed(f"su - alice -c '{command}'", timeout=1500)
data = machine.succeed(f"cat /tmp/{variant}.csv")
print(data)
return data
def retain_artifacts(names):
output = os.environ["out"]
os.makedirs(output, exist_ok=True)
for name in names:
data = machine.succeed(f"cat /tmp/{name}")
with open(os.path.join(output, name), "w", encoding="utf-8") as handle:
handle.write(data)
start_all()
machine.wait_for_unit("seatd.service", timeout=180)
machine.wait_until_succeeds("test -e /dev/dri/card0", timeout=180)
machine.succeed("chgrp render /dev/dri/card0 /dev/dri/renderD128")
machine.succeed("chmod 0660 /dev/dri/card0 /dev/dri/renderD128")
print(machine.succeed("ls -l /dev/dri; find /sys/class/drm -maxdepth 1 -printf '%f\\n' | sort"))
print(machine.succeed("systemctl status getty@tty1.service --no-pager || true"))
machine.wait_until_succeeds(
"pgrep -u alice -f '/bin/niri-vm-launcher'",
timeout=180,
)
before_socket = start_niri("before")
before_data = collect(
"before",
"dd75865f547f0eac0e9b6c4d86d2cd00c0744252",
"${beforeNiri}/bin/niri",
before_socket,
)
stop_niri()
after_socket = start_niri("after")
after_data = collect(
"after",
"ecb953778c1031d0492cc6bc65429449cb32163c",
"${afterNiri}/bin/niri",
after_socket,
)
before_rows = list(csv.DictReader(io.StringIO(before_data)))
after_rows = list(csv.DictReader(io.StringIO(after_data)))
assert len(before_rows) == 11
assert len(after_rows) == 11
assert int(before_rows[-1]["stale_mapped_layers"]) == 10
assert int(after_rows[-1]["stale_mapped_layers"]) == 0
retain_artifacts([
"before.csv",
"after.csv",
"before-niri-fdinfo-start.txt",
"before-niri-fdinfo-end.txt",
"after-niri-fdinfo-start.txt",
"after-niri-fdinfo-end.txt",
"before-final-layers.txt",
"after-final-layers.txt",
"before-client-logs.txt",
"after-client-logs.txt",
"niri-before.log",
"niri-after.log",
])
stop_niri()
'';
};
}
got build log for '/nix/store/5wn4k7gv3l6i06by75fl78irk1wc4jnl-vm-test-run-niri-layer-output-ab' from 'daemon'
Machine state will be reset. To keep it, pass --keep-vm-state
start all VLans
start vlan
running vlan (pid 7; ctl /build/vde1.ctl)
(finished: start all VLans, in 0.00 seconds)
Test will time out and terminate in 3600 seconds
run the VM test script
additionally exposed symbols:
machine,
vlan1,
start_all, test_script, machines, vlans, driver, log, os, create_machine, subtest, run_tests, join_all, retry, serial_stdout_off, serial_stdout_on, polling_condition, Machine, t, debug
start all VMs
machine: starting vm
mke2fs 1.47.3 (8-Jul-2025)
qemu-system-x86_64: Could not access KVM kernel module: No such file or directory
qemu-system-x86_64: failed to initialize kvm: No such file or directory
qemu-system-x86_64: falling back to tcg
machine # Disk image does not exist, creating the virtualisation disk image...
machine # Formatting '/build/vm-state-machine/tmp.FrSjf4GSal', fmt=raw size=1073741824
machine # Discarding device blocks: 0/262144 done
machine # Creating filesystem with 262144 4k blocks and 65536 inodes
machine # Filesystem UUID: fcdcae98-59a9-4280-bb4a-2b34d121fee8
machine # Superblock backups stored on blocks:
machine # 32768, 98304, 163840, 229376
machine # 
machine # Allocating group tables: 0/8 done
machine # Writing inode tables: 0/8 done
machine # Creating journal (8192 blocks): done
machine: QEMU running (pid 9)
machine # Writing superblocks and filesystem accounting information: 0/8 done
machine # 
machine # Virtualisation disk image created.
(finished: start all VMs, in 0.49 seconds)
machine: waiting for unit seatd.service
machine: waiting for the VM to finish booting
machine # c[?7lSeaBIOS (version rel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org)
machine # 
machine # 
machine # iPXE (http://ipxe.org) 00:02.0 C000 PCI2.10 PnP PMM+BEFD1950+BEF31950 C000
machine # Press Ctrl-B to configure iPXE (PCI 00:02.0)...
machine # 
machine # 
machine # 
machine # 
machine # iPXE (http://ipxe.org) 00:08.0 C100 PCI2.10 PnP PMM BEFD1950 BEF31950 C100
machine # Press Ctrl-B to configure iPXE (PCI 00:08.0)...
machine # 
machine # 
machine # Booting from ROM...
machine # Probing EDD (edd=off to disable)... oc[?7l[ 0.000000] Linux version 6.12.82 (nixbld@localhost) (gcc (GCC) 14.3.0, GNU ld (GNU Binutils) 2.44) #1-NixOS SMP PREEMPT_DYNAMIC Sat Apr 18 08:41:59 UTC 2026
machine # [ 0.000000] Command line: console=ttyS0 console=tty0 panic=1 boot.panic_on_fail clocksource=acpi_pm loglevel=7 net.ifnames=0 lsm=landlock,yama,bpf init=/nix/store/8vbbm5bzbsvmigy4hfzqpvj34vf3qv72-nixos-system-machine-test/init regInfo=/nix/store/1avhq9ydbhff2jz8c6lsvklf1zx49saw-closure-info/registration console=ttyS0,115200n8 console=tty0
machine # [ 0.000000] BIOS-provided physical RAM map:
machine # [ 0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009fbff] usable
machine # [ 0.000000] BIOS-e820: [mem 0x000000000009fc00-0x000000000009ffff] reserved
machine # [ 0.000000] BIOS-e820: [mem 0x00000000000f0000-0x00000000000fffff] reserved
machine # [ 0.000000] BIOS-e820: [mem 0x0000000000100000-0x00000000bffdafff] usable
machine # [ 0.000000] BIOS-e820: [mem 0x00000000bffdb000-0x00000000bfffffff] reserved
machine # [ 0.000000] BIOS-e820: [mem 0x00000000fffc0000-0x00000000ffffffff] reserved
machine # [ 0.000000] BIOS-e820: [mem 0x000000fd00000000-0x000000ffffffffff] reserved
machine # [ 0.000000] NX (Execute Disable) protection: active
machine # [ 0.000000] APIC: Static calls initialized
machine # [ 0.000000] SMBIOS 2.8 present.
machine # [ 0.000000] DMI: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.17.0-0-gb52ca86e094d-prebuilt.qemu.org 04/01/2014
machine # [ 0.000000] DMI: Memory slots populated: 1/1
machine # [ 0.000000] tsc: Fast TSC calibration using PIT
machine # [ 0.000000] tsc: Detected 2208.011 MHz processor
machine # [ 0.008381] last_pfn = 0xbffdb max_arch_pfn = 0x10000000000
machine # [ 0.009353] MTRR map: 4 entries (3 fixed + 1 variable; max 19), built from 8 variable MTRRs
machine # [ 0.009585] x86/PAT: Configuration [0-7]: WB WC UC- UC WB WP UC- WT
machine # [ 0.033990] found SMP MP-table at [mem 0x000f5460-0x000f546f]
machine # [ 0.036347] Using GB pages for direct mapping
machine # [ 0.042581] RAMDISK: [mem 0xbf3cd000-0xbffcffff]
machine # [ 0.043263] ACPI: Early table checksum verification disabled
machine # [ 0.043888] ACPI: RSDP 0x00000000000F5280 000014 (v00 BOCHS )
machine # [ 0.044365] ACPI: RSDT 0x00000000BFFE2418 000034 (v01 BOCHS BXPC 00000001 BXPC 00000001)
machine # [ 0.045405] ACPI: FACP 0x00000000BFFE22C4 000074 (v01 BOCHS BXPC 00000001 BXPC 00000001)
machine # [ 0.046245] ACPI: DSDT 0x00000000BFFE0040 002284 (v01 BOCHS BXPC 00000001 BXPC 00000001)
machine # [ 0.046366] ACPI: FACS 0x00000000BFFE0000 000040
machine # [ 0.046449] ACPI: APIC 0x00000000BFFE2338 000080 (v03 BOCHS BXPC 00000001 BXPC 00000001)
machine # [ 0.046492] ACPI: HPET 0x00000000BFFE23B8 000038 (v01 BOCHS BXPC 00000001 BXPC 00000001)
machine # [ 0.046531] ACPI: WAET 0x00000000BFFE23F0 000028 (v01 BOCHS BXPC 00000001 BXPC 00000001)
machine # [ 0.046664] ACPI: Reserving FACP table memory at [mem 0xbffe22c4-0xbffe2337]
machine # [ 0.046702] ACPI: Reserving DSDT table memory at [mem 0xbffe0040-0xbffe22c3]
machine # [ 0.046714] ACPI: Reserving FACS table memory at [mem 0xbffe0000-0xbffe003f]
machine # [ 0.046725] ACPI: Reserving APIC table memory at [mem 0xbffe2338-0xbffe23b7]
machine # [ 0.046734] ACPI: Reserving HPET table memory at [mem 0xbffe23b8-0xbffe23ef]
machine # [ 0.046743] ACPI: Reserving WAET table memory at [mem 0xbffe23f0-0xbffe2417]
machine # [ 0.052134] No NUMA configuration found
machine # [ 0.052169] Faking a node at [mem 0x0000000000000000-0x00000000bffdafff]
machine # [ 0.052971] NODE_DATA(0) allocated [mem 0xbffd58c0-0xbffdadff]
machine # [ 0.057351] Zone ranges:
machine # [ 0.057389] DMA [mem 0x0000000000001000-0x0000000000ffffff]
machine # [ 0.057492] DMA32 [mem 0x0000000001000000-0x00000000bffdafff]
machine # [ 0.057509] Normal empty
machine # [ 0.057531] Device empty
machine # [ 0.057548] Movable zone start for each node
machine # [ 0.057589] Early memory node ranges
machine # [ 0.057626] node 0: [mem 0x0000000000001000-0x000000000009efff]
machine # [ 0.057828] node 0: [mem 0x0000000000100000-0x00000000bffdafff]
machine # [ 0.058006] Initmem setup node 0 [mem 0x0000000000001000-0x00000000bffdafff]
machine # [ 0.059616] On node 0, zone DMA: 1 pages in unavailable ranges
machine # [ 0.059960] On node 0, zone DMA: 97 pages in unavailable ranges
machine # [ 0.162935] On node 0, zone DMA32: 37 pages in unavailable ranges
machine # [ 0.163591] ACPI: PM-Timer IO Port: 0x608
machine # [ 0.164284] ACPI: LAPIC_NMI (acpi_id[0xff] dfl dfl lint[0x1])
machine # [ 0.164837] IOAPIC[0]: apic_id 0, version 32, address 0xfec00000, GSI 0-23
machine # [ 0.165001] ACPI: INT_SRC_OVR (bus 0 bus_irq 0 global_irq 2 dfl dfl)
machine # [ 0.165334] ACPI: INT_SRC_OVR (bus 0 bus_irq 5 global_irq 5 high level)
machine # [ 0.165398] ACPI: INT_SRC_OVR (bus 0 bus_irq 9 global_irq 9 high level)
machine # [ 0.165534] ACPI: INT_SRC_OVR (bus 0 bus_irq 10 global_irq 10 high level)
machine # [ 0.165550] ACPI: INT_SRC_OVR (bus 0 bus_irq 11 global_irq 11 high level)
machine # [ 0.165799] ACPI: Using ACPI (MADT) for SMP configuration information
machine # [ 0.165864] ACPI: HPET id: 0x8086a201 base: 0xfed00000
machine # [ 0.166380] CPU topo: Max. logical packages: 1
machine # [ 0.166398] CPU topo: Max. logical dies: 1
machine # [ 0.166413] CPU topo: Max. dies per package: 1
machine # [ 0.166488] CPU topo: Max. threads per core: 1
machine # [ 0.166708] CPU topo: Num. cores per package: 2
machine # [ 0.166735] CPU topo: Num. threads per package: 2
machine # [ 0.166751] CPU topo: Allowing 2 present CPUs plus 0 hotplug CPUs
machine # [ 0.167863] PM: hibernation: Registered nosave memory: [mem 0x00000000-0x00000fff]
machine # [ 0.167904] PM: hibernation: Registered nosave memory: [mem 0x0009f000-0x000fffff]
machine # [ 0.168050] [mem 0xc0000000-0xfffbffff] available for PCI devices
machine # [ 0.168127] Booting paravirtualized kernel on bare hardware
machine # [ 0.168793] clocksource: refined-jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1910969940391419 ns
machine # [ 0.184548] setup_percpu: NR_CPUS:384 nr_cpumask_bits:2 nr_cpu_ids:2 nr_node_ids:1
machine # [ 0.188483] percpu: Embedded 116 pages/cpu s294912 r65536 d114688 u1048576
machine # [ 0.190451] Kernel command line: console=ttyS0 console=tty0 panic=1 boot.panic_on_fail clocksource=acpi_pm loglevel=7 net.ifnames=0 lsm=landlock,yama,bpf init=/nix/store/8vbbm5bzbsvmigy4hfzqpvj34vf3qv72-nixos-system-machine-test/init regInfo=/nix/store/1avhq9ydbhff2jz8c6lsvklf1zx49saw-closure-info/registration console=ttyS0,115200n8 console=tty0
machine # [ 0.192696] Unknown kernel command line parameters "regInfo=/nix/store/1avhq9ydbhff2jz8c6lsvklf1zx49saw-closure-info/registration", will be passed to user space.
machine # [ 0.193576] random: crng init done
machine # [ 0.196117] Dentry cache hash table entries: 524288 (order: 10, 4194304 bytes, linear)
machine # [ 0.197315] Inode-cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
machine # [ 0.201167] Fallback order for Node 0: 0
machine # [ 0.201578] Built 1 zonelists, mobility grouping on. Total pages: 786297
machine # [ 0.201605] Policy zone: DMA32
machine # [ 0.203802] mem auto-init: stack:all(zero), heap alloc:on, heap free:off
machine # [ 0.301630] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
machine # [ 0.308791] allocated 6291456 bytes of page_ext
machine # [ 0.312272] ftrace: allocating 46233 entries in 181 pages
machine # [ 0.361720] ftrace: allocated 181 pages with 5 groups
machine # [ 0.376666] Dynamic Preempt: voluntary
machine # [ 0.382581] rcu: Preemptible hierarchical RCU implementation.
machine # [ 0.382596] rcu: RCU event tracing is enabled.
machine # [ 0.382627] rcu: RCU restricting CPUs from NR_CPUS=384 to nr_cpu_ids=2.
machine # [ 0.382810] Trampoline variant of Tasks RCU enabled.
machine # [ 0.382822] Rude variant of Tasks RCU enabled.
machine # [ 0.382832] Tracing variant of Tasks RCU enabled.
machine # [ 0.382981] rcu: RCU calculated value of scheduler-enlistment delay is 100 jiffies.
machine # [ 0.383021] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
machine # [ 0.384696] RCU Tasks: Setting shift to 1 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=2.
machine # [ 0.384727] RCU Tasks Rude: Setting shift to 1 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=2.
machine # [ 0.384744] RCU Tasks Trace: Setting shift to 1 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=2.
machine # [ 0.438623] NR_IRQS: 24832, nr_irqs: 440, preallocated irqs: 16
machine # [ 0.452234] rcu: srcu_init: Setting srcu_struct sizes based on contention.
machine # [ 0.458800] kfence: initialized - using 2097152 bytes for 255 objects at 0x(____ptrval____)-0x(____ptrval____)
machine # [ 0.463810] Console: colour *CGA 80x25
machine # [ 0.464376] printk: legacy console [tty0] enabled
machine # [ 0.471248] printk: legacy console [ttyS0] enabled
machine # [ 0.486807] ACPI: Core revision 20240827
machine # [ 0.495402] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604467 ns
machine # [ 0.502934] APIC: Switch to symmetric I/O mode setup
machine # [ 0.504692] x2apic: IRQ remapping doesn't support X2APIC mode
machine # [ 0.511649] ..TIMER: vector=0x30 apic1=0 pin1=2 apic2=-1 pin2=-1
machine # [ 0.517568] clocksource: tsc-early: mask: 0xffffffffffffffff max_cycles: 0x1fd3c27e9e4, max_idle_ns: 440795236185 ns
machine # [ 0.518647] Calibrating delay loop (skipped), value calculated using timer frequency.. 4416.02 BogoMIPS (lpj=2208011)
machine # [ 0.522859] x86/cpu: User Mode Instruction Prevention (UMIP) activated
machine # [ 0.537587] Last level iTLB entries: 4KB 0, 2MB 0, 4MB 0
machine # [ 0.538072] Last level dTLB entries: 4KB 0, 2MB 0, 4MB 0, 1GB 0
machine # [ 0.540510] Spectre V1 : Mitigation: usercopy/swapgs barriers and __user pointer sanitization
machine # [ 0.542114] Spectre V2 : Mitigation: Retpolines
machine # [ 0.542303] Spectre V2 : Spectre v2 / SpectreRSB: Filling RSB on context switch and VMEXIT
machine # [ 0.542667] Speculative Store Bypass: Vulnerable
machine # [ 0.549185] x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers'
machine # [ 0.553509] x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers'
machine # [ 0.553715] x86/fpu: Supporting XSAVE feature 0x004: 'AVX registers'
machine # [ 0.554074] x86/fpu: Supporting XSAVE feature 0x008: 'MPX bounds registers'
machine # [ 0.554313] x86/fpu: Supporting XSAVE feature 0x010: 'MPX CSR'
machine # [ 0.554649] x86/fpu: Supporting XSAVE feature 0x200: 'Protection Keys User registers'
machine # [ 0.555232] x86/fpu: xstate_offset[2]: 576, xstate_sizes[2]: 256
machine # [ 0.555548] x86/fpu: xstate_offset[3]: 960, xstate_sizes[3]: 64
machine # [ 0.555706] x86/fpu: xstate_offset[4]: 1024, xstate_sizes[4]: 64
machine # [ 0.555895] x86/fpu: xstate_offset[9]: 2688, xstate_sizes[9]: 8
machine # [ 0.556233] x86/fpu: Enabled xstate features 0x21f, context size is 2696 bytes, using 'standard' format.
machine # [ 0.768916] Freeing SMP alternatives memory: 40K
machine # [ 0.770624] pid_max: default: 32768 minimum: 301
machine # [ 0.780433] LSM: initializing lsm=capability,landlock,yama,bpf
machine # [ 0.784325] landlock: Up and running.
machine # [ 0.784450] Yama: becoming mindful.
machine # [ 0.786812] LSM support for eBPF active
machine # [ 0.795078] Mount-cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
machine # [ 0.795833] Mountpoint-cache hash table entries: 8192 (order: 4, 65536 bytes, linear)
machine # [ 0.961021] smpboot: CPU0: AMD QEMU TCG CPU version 2.5+ (family: 0x6, model: 0x6, stepping: 0x3)
machine # [ 0.981498] Performance Events: PMU not available due to virtualization, using software events only.
machine # [ 0.985686] signal: max sigframe size: 3632
machine # [ 0.988497] rcu: Hierarchical SRCU implementation.
machine # [ 0.988740] rcu: Max phase no-delay instances is 400.
machine # [ 0.992746] Timer migration: 1 hierarchy levels; 8 children per group; 1 crossnode level
machine # [ 1.002732] NMI watchdog: Perf NMI watchdog permanently disabled
machine # [ 1.005917] smp: Bringing up secondary CPUs ...
machine # [ 1.014649] smpboot: x86: Booting SMP configuration:
machine # [ 1.014863] .... node #0, CPUs: #1
machine # [ 1.102174] smp: Brought up 1 node, 2 CPUs
machine # [ 1.102755] smpboot: Total of 2 processors activated (8824.53 BogoMIPS)
machine # [ 1.115990] Memory: 3013904K/3145188K available (16384K kernel code, 2646K rwdata, 12592K rodata, 3416K init, 3348K bss, 118704K reserved, 0K cma-reserved)
machine # [ 1.132105] devtmpfs: initialized
machine # [ 1.139378] x86/mm: Memory block size: 128MB
machine # [ 1.159757] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 1911260446275000 ns
machine # [ 1.161207] futex hash table entries: 512 (order: 3, 32768 bytes, linear)
machine # [ 1.165976] pinctrl core: initialized pinctrl subsystem
machine # [ 1.178558] PM: RTC time: 14:26:24, date: 2026-08-27
machine # [ 1.205921] NET: Registered PF_NETLINK/PF_ROUTE protocol family
machine # [ 1.213936] DMA: preallocated 512 KiB GFP_KERNEL pool for atomic allocations
machine # [ 1.216271] DMA: preallocated 512 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
machine # [ 1.217805] DMA: preallocated 512 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
machine # [ 1.218442] audit: initializing netlink subsys (disabled)
machine # [ 1.223119] audit: type=2000 audit(1787840784.720:1): state=initialized audit_enabled=0 res=1
machine # [ 1.230257] thermal_sys: Registered thermal governor 'bang_bang'
machine # [ 1.230332] thermal_sys: Registered thermal governor 'step_wise'
machine # [ 1.230492] thermal_sys: Registered thermal governor 'user_space'
machine # [ 1.232247] cpuidle: using governor menu
machine # [ 1.236580] acpiphp: ACPI Hot Plug PCI Controller Driver version: 0.5
machine # [ 1.241344] PCI: Using configuration type 1 for base access
machine # [ 1.243171] mtrr: your CPUs had inconsistent fixed MTRR settings
machine # [ 1.243345] mtrr: your CPUs had inconsistent variable MTRR settings
machine # [ 1.243514] mtrr: your CPUs had inconsistent MTRRdefType settings
machine # [ 1.243752] mtrr: probably your BIOS does not setup all CPUs.
machine # [ 1.243896] mtrr: corrected configuration.
machine # [ 1.248692] kprobes: kprobe jump-optimization is enabled. All kprobes are optimized if possible.
machine # [ 1.259184] HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages
machine # [ 1.259401] HugeTLB: 16380 KiB vmemmap can be freed for a 1.00 GiB page
machine # [ 1.259611] HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages
machine # [ 1.259755] HugeTLB: 28 KiB vmemmap can be freed for a 2.00 MiB page
machine # [ 1.359873] ACPI: Added _OSI(Module Device)
machine # [ 1.360083] ACPI: Added _OSI(Processor Device)
machine # [ 1.360208] ACPI: Added _OSI(Processor Aggregator Device)
machine # [ 1.399272] ACPI: 1 ACPI AML tables successfully acquired and loaded
machine # [ 1.432402] ACPI: Interpreter enabled
machine # [ 1.434514] ACPI: PM: (supports S0 S3 S4 S5)
machine # [ 1.434709] ACPI: Using IOAPIC for interrupt routing
machine # [ 1.435720] PCI: Using host bridge windows from ACPI; if necessary, use "pci=nocrs" and report a bug
machine # [ 1.435980] PCI: Using E820 reservations for host bridge windows
machine # [ 1.439176] ACPI: Enabled 2 GPEs in block 00 to 0F
machine # [ 1.550480] ACPI: PCI Root Bridge [PCI0] (domain 0000 [bus 00-ff])
machine # [ 1.551799] acpi PNP0A03:00: _OSC: OS supports [ASPM ClockPM Segments MSI HPX-Type3]
machine # [ 1.552272] acpi PNP0A03:00: _OSC: not requesting OS control; OS requires [ExtendedConfig ASPM ClockPM MSI]
machine # [ 1.553788] acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended configuration space under this bridge
machine # [ 1.562459] acpiphp: Slot [2] registered
machine # [ 1.562938] acpiphp: Slot [3] registered
machine # [ 1.563262] acpiphp: Slot [4] registered
machine # [ 1.563545] acpiphp: Slot [5] registered
machine # [ 1.563799] acpiphp: Slot [6] registered
machine # [ 1.564242] acpiphp: Slot [7] registered
machine # [ 1.564516] acpiphp: Slot [8] registered
machine # [ 1.564788] acpiphp: Slot [9] registered
machine # [ 1.565185] acpiphp: Slot [11] registered
machine # [ 1.565499] acpiphp: Slot [12] registered
machine # [ 1.565774] acpiphp: Slot [13] registered
machine # [ 1.566120] acpiphp: Slot [14] registered
machine # [ 1.566402] acpiphp: Slot [15] registered
machine # [ 1.566703] acpiphp: Slot [16] registered
machine # [ 1.566963] acpiphp: Slot [17] registered
machine # [ 1.567308] acpiphp: Slot [18] registered
machine # [ 1.567580] acpiphp: Slot [19] registered
machine # [ 1.567878] acpiphp: Slot [20] registered
machine # [ 1.568214] acpiphp: Slot [21] registered
machine # [ 1.568491] acpiphp: Slot [22] registered
machine # [ 1.568802] acpiphp: Slot [23] registered
machine # [ 1.569147] acpiphp: Slot [24] registered
machine # [ 1.569437] acpiphp: Slot [25] registered
machine # [ 1.569721] acpiphp: Slot [26] registered
machine # [ 1.570083] acpiphp: Slot [27] registered
machine # [ 1.570370] acpiphp: Slot [28] registered
machine # [ 1.570650] acpiphp: Slot [29] registered
machine # [ 1.570918] acpiphp: Slot [30] registered
machine # [ 1.571266] acpiphp: Slot [31] registered
machine # [ 1.571890] PCI host bridge to bus 0000:00
machine # [ 1.572493] pci_bus 0000:00: root bus resource [io 0x0000-0x0cf7 window]
machine # [ 1.572820] pci_bus 0000:00: root bus resource [io 0x0d00-0xffff window]
machine # [ 1.573051] pci_bus 0000:00: root bus resource [mem 0x000a0000-0x000bffff window]
machine # [ 1.573321] pci_bus 0000:00: root bus resource [mem 0xc0000000-0xfebfffff window]
machine # [ 1.573513] pci_bus 0000:00: root bus resource [mem 0x100000000-0x17fffffff window]
machine # [ 1.573965] pci_bus 0000:00: root bus resource [bus 00-ff]
machine # [ 1.576251] pci 0000:00:00.0: [8086:1237] type 00 class 0x060000 conventional PCI endpoint
machine # [ 1.583494] pci 0000:00:01.0: [8086:7000] type 00 class 0x060100 conventional PCI endpoint
machine # [ 1.584800] pci 0000:00:01.1: [8086:7010] type 00 class 0x010180 conventional PCI endpoint
machine # [ 1.590287] pci 0000:00:01.1: BAR 4 [io 0xc1e0-0xc1ef]
machine # [ 1.594245] pci 0000:00:01.1: BAR 0 [io 0x01f0-0x01f7]: legacy IDE quirk
machine # [ 1.594606] pci 0000:00:01.1: BAR 1 [io 0x03f6]: legacy IDE quirk
machine # [ 1.594606] pci 0000:00:01.1: BAR 2 [io 0x0170-0x0177]: legacy IDE quirk
machine # [ 1.594695] pci 0000:00:01.1: BAR 3 [io 0x0376]: legacy IDE quirk
machine # [ 1.597495] pci 0000:00:01.2: [8086:7020] type 00 class 0x0c0300 conventional PCI endpoint
machine # [ 1.602803] pci 0000:00:01.2: BAR 4 [io 0xc100-0xc11f]
machine # [ 1.615802] pci 0000:00:01.3: [8086:7113] type 00 class 0x068000 conventional PCI endpoint
machine # [ 1.616683] pci 0000:00:01.3: quirk: [io 0x0600-0x063f] claimed by PIIX4 ACPI
machine # [ 1.617065] pci 0000:00:01.3: quirk: [io 0x0700-0x070f] claimed by PIIX4 SMB
machine # [ 1.618536] pci 0000:00:02.0: [1af4:1000] type 00 class 0x020000 conventional PCI endpoint
machine # [ 1.621094] pci 0000:00:02.0: BAR 0 [io 0xc120-0xc13f]
machine # [ 1.623084] pci 0000:00:02.0: BAR 1 [mem 0xfebc0000-0xfebc0fff]
machine # [ 1.628912] pci 0000:00:02.0: BAR 4 [mem 0xfebd4000-0xfebd7fff 64bit pref]
machine # [ 1.632105] pci 0000:00:02.0: ROM [mem 0xfeb40000-0xfeb7ffff pref]
machine # [ 1.640674] pci 0000:00:03.0: [1af4:1005] type 00 class 0x00ff00 conventional PCI endpoint
machine # [ 1.643070] pci 0000:00:03.0: BAR 0 [io 0xc140-0xc15f]
machine # [ 1.645092] pci 0000:00:03.0: BAR 1 [mem 0xfebc1000-0xfebc1fff]
machine # [ 1.652111] pci 0000:00:03.0: BAR 4 [mem 0xfebd8000-0xfebdbfff 64bit pref]
machine # [ 1.663464] pci 0000:00:04.0: [1af4:1009] type 00 class 0x000200 conventional PCI endpoint
machine # [ 1.666072] pci 0000:00:04.0: BAR 0 [io 0xc080-0xc0bf]
machine # [ 1.668070] pci 0000:00:04.0: BAR 1 [mem 0xfebc2000-0xfebc2fff]
machine # [ 1.673106] pci 0000:00:04.0: BAR 4 [mem 0xfebdc000-0xfebdffff 64bit pref]
machine # [ 1.685512] pci 0000:00:05.0: [1af4:1009] type 00 class 0x000200 conventional PCI endpoint
machine # [ 1.688098] pci 0000:00:05.0: BAR 0 [io 0xc160-0xc17f]
machine # [ 1.690070] pci 0000:00:05.0: BAR 1 [mem 0xfebc3000-0xfebc3fff]
machine # [ 1.694787] pci 0000:00:05.0: BAR 4 [mem 0xfebe0000-0xfebe3fff 64bit pref]
machine # [ 1.703958] pci 0000:00:06.0: [1af4:1009] type 00 class 0x000200 conventional PCI endpoint
machine # [ 1.705021] pci 0000:00:06.0: BAR 0 [io 0xc180-0xc19f]
machine # [ 1.708070] pci 0000:00:06.0: BAR 1 [mem 0xfebc4000-0xfebc4fff]
machine # [ 1.713107] pci 0000:00:06.0: BAR 4 [mem 0xfebe4000-0xfebe7fff 64bit pref]
machine # [ 1.724002] pci 0000:00:07.0: [1af4:1001] type 00 class 0x010000 conventional PCI endpoint
machine # [ 1.727071] pci 0000:00:07.0: BAR 0 [io 0xc000-0xc07f]
machine # [ 1.729072] pci 0000:00:07.0: BAR 1 [mem 0xfebc5000-0xfebc5fff]
machine # [ 1.733747] pci 0000:00:07.0: BAR 4 [mem 0xfebe8000-0xfebebfff 64bit pref]
machine # [ 1.744919] pci 0000:00:08.0: [1af4:1000] type 00 class 0x020000 conventional PCI endpoint
machine # [ 1.748082] pci 0000:00:08.0: BAR 0 [io 0xc1a0-0xc1bf]
machine # [ 1.750070] pci 0000:00:08.0: BAR 1 [mem 0xfebc6000-0xfebc6fff]
machine # [ 1.754074] pci 0000:00:08.0: BAR 4 [mem 0xfebec000-0xfebeffff 64bit pref]
machine # [ 1.757068] pci 0000:00:08.0: ROM [mem 0xfeb80000-0xfebbffff pref]
machine # [ 1.767773] pci 0000:00:09.0: [1af4:1052] type 00 class 0x090000 conventional PCI endpoint
machine # [ 1.770083] pci 0000:00:09.0: BAR 1 [mem 0xfebc7000-0xfebc7fff]
machine # [ 1.777135] pci 0000:00:09.0: BAR 4 [mem 0xfebf0000-0xfebf3fff 64bit pref]
machine # [ 1.789927] pci 0000:00:0a.0: [1af4:1050] type 00 class 0x038000 conventional PCI endpoint
machine # [ 1.794152] pci 0000:00:0a.0: BAR 1 [mem 0xfebc8000-0xfebc8fff]
machine # [ 1.799021] pci 0000:00:0a.0: BAR 4 [mem 0xfebf4000-0xfebf7fff 64bit pref]
machine # [ 1.801376] pci 0000:00:0b.0: [1af4:1003] type 00 class 0x078000 conventional PCI endpoint
machine # [ 1.803993] pci 0000:00:0b.0: BAR 0 [io 0xc0c0-0xc0ff]
machine # [ 1.805021] pci 0000:00:0b.0: BAR 1 [mem 0xfebc9000-0xfebc9fff]
machine # [ 1.806079] pci 0000:00:0b.0: BAR 4 [mem 0xfebf8000-0xfebfbfff 64bit pref]
machine # [ 1.818740] pci 0000:00:0c.0: [1af4:1005] type 00 class 0x00ff00 conventional PCI endpoint
machine # [ 1.820021] pci 0000:00:0c.0: BAR 0 [io 0xc1c0-0xc1df]
machine # [ 1.821848] pci 0000:00:0c.0: BAR 1 [mem 0xfebca000-0xfebcafff]
machine # [ 1.830064] pci 0000:00:0c.0: BAR 4 [mem 0xfebfc000-0xfebfffff 64bit pref]
machine # [ 1.848721] ACPI: PCI: Interrupt link LNKA configured for IRQ 10
machine # [ 1.851146] ACPI: PCI: Interrupt link LNKB configured for IRQ 10
machine # [ 1.852780] ACPI: PCI: Interrupt link LNKC configured for IRQ 11
machine # [ 1.854275] ACPI: PCI: Interrupt link LNKD configured for IRQ 11
machine # [ 1.854930] ACPI: PCI: Interrupt link LNKS configured for IRQ 9
machine # [ 1.862452] iommu: Default domain type: Translated
machine # [ 1.862661] iommu: DMA domain TLB invalidation policy: lazy mode
machine # [ 1.863956] ACPI: bus type USB registered
machine # [ 1.865231] usbcore: registered new interface driver usbfs
machine # [ 1.865991] usbcore: registered new interface driver hub
machine # [ 1.866429] usbcore: registered new device driver usb
machine # [ 1.886756] NetLabel: Initializing
machine # [ 1.886933] NetLabel: domain hash size = 128
machine # [ 1.887064] NetLabel: protocols = UNLABELED CIPSOv4 CALIPSO
machine # [ 1.888742] NetLabel: unlabeled traffic allowed by default
machine # [ 1.888949] PCI: Using ACPI for IRQ routing
machine # [ 1.899573] vgaarb: loaded
machine # [ 1.900688] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0
machine # [ 1.900917] hpet0: 3 comparators, 64-bit 100.000000 MHz counter
machine # [ 1.911567] clocksource: Switched to clocksource tsc-early
machine # [ 1.917708] VFS: Disk quotas dquot_6.6.0
machine # [ 1.918204] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
machine # [ 1.923017] pnp: PnP ACPI init
machine # [ 1.932033] pnp: PnP ACPI: found 6 devices
machine # [ 1.985374] clocksource: acpi_pm: mask: 0xffffff max_cycles: 0xffffff, max_idle_ns: 2085701024 ns
machine # [ 1.986030] clocksource: Switched to clocksource acpi_pm
machine # [ 1.988014] NET: Registered PF_INET protocol family
machine # [ 1.991851] IP idents hash table entries: 65536 (order: 7, 524288 bytes, linear)
machine # [ 2.096809] tcp_listen_portaddr_hash hash table entries: 2048 (order: 3, 32768 bytes, linear)
machine # [ 2.097790] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
machine # [ 2.098768] TCP established hash table entries: 32768 (order: 6, 262144 bytes, linear)
machine # [ 2.101918] TCP bind hash table entries: 32768 (order: 8, 1048576 bytes, linear)
machine # [ 2.102949] TCP: Hash tables configured (established 32768 bind 32768)
machine # [ 2.106021] MPTCP token hash table entries: 4096 (order: 5, 98304 bytes, linear)
machine # [ 2.106932] UDP hash table entries: 2048 (order: 4, 65536 bytes, linear)
machine # [ 2.107757] UDP-Lite hash table entries: 2048 (order: 4, 65536 bytes, linear)
machine # [ 2.110610] NET: Registered PF_UNIX/PF_LOCAL protocol family
machine # [ 2.111574] NET: Registered PF_XDP protocol family
machine # [ 2.113073] pci_bus 0000:00: resource 4 [io 0x0000-0x0cf7 window]
machine # [ 2.113319] pci_bus 0000:00: resource 5 [io 0x0d00-0xffff window]
machine # [ 2.113487] pci_bus 0000:00: resource 6 [mem 0x000a0000-0x000bffff window]
machine # [ 2.113671] pci_bus 0000:00: resource 7 [mem 0xc0000000-0xfebfffff window]
machine # [ 2.113850] pci_bus 0000:00: resource 8 [mem 0x100000000-0x17fffffff window]
machine # [ 2.115173] pci 0000:00:01.0: PIIX3: Enabling Passive Release
machine # [ 2.115567] pci 0000:00:00.0: Limiting direct PCI/PCI transfers
machine # [ 2.133521] ACPI: \_SB_.LNKD: Enabled at IRQ 11
machine # [ 2.146632] pci 0000:00:01.2: quirk_usb_early_handoff+0x0/0x790 took 30043 usecs
machine # [ 2.147687] PCI: CLS 0 bytes, default 64
machine # [ 2.157032] Trying to unpack rootfs image as initramfs...
machine # [ 2.251031] Initialise system trusted keyrings
machine # [ 2.254804] workingset: timestamp_bits=40 max_order=20 bucket_order=0
machine # [ 2.359328] Key type asymmetric registered
machine # [ 2.359689] Asymmetric key parser 'x509' registered
machine # [ 2.360453] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 251)
machine # [ 2.363320] io scheduler mq-deadline registered
machine # [ 2.363590] io scheduler kyber registered
machine # [ 2.377534] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
machine # [ 2.388341] 00:04: ttyS0 at I/O 0x3f8 (irq = 4, base_baud = 115200) is a 16550A
machine # [ 2.405610] Linux agpgart interface v0.103
machine # [ 2.406512] ACPI: bus type drm_connector registered
machine # [ 2.418668] usbcore: registered new interface driver usbserial_generic
machine # [ 2.419573] usbserial: USB Serial support registered for generic
machine # [ 2.420030] amd_pstate: the _CPC object is not present in SBIOS or ACPI disabled
machine # [ 2.422261] drop_monitor: Initializing network drop monitor service
machine # [ 2.424498] NET: Registered PF_INET6 protocol family
machine # [ 3.158724] tsc: Refined TSC clocksource calibration: 2207.988 MHz
machine # [ 3.159856] clocksource: tsc: mask: 0xffffffffffffffff max_cycles: 0x1fd3acfaa6e, max_idle_ns: 440795317221 ns
machine # [ 3.210413] Freeing initrd memory: 12300K
machine # [ 3.228522] Segment Routing with IPv6
machine # [ 3.229394] In-situ OAM (IOAM) with IPv6
machine # [ 3.236249] IPI shorthand broadcast: enabled
machine # [ 3.269419] sched_clock: Marking stable (3220096885, 49074976)->(3320552574, -51380713)
machine # [ 3.275110] registered taskstats version 1
machine # [ 3.279006] Loading compiled-in X.509 certificates
machine # [ 3.331186] Demotion targets for Node 0: null
machine # [ 3.333423] Key type .fscrypt registered
machine # [ 3.333617] Key type fscrypt-provisioning registered
machine # [ 3.341861] PM: Magic number: 6:900:435
machine # [ 3.349354] RAS: Correctable Errors collector initialized.
machine # [ 3.378888] clk: Disabling unused clocks
machine # [ 3.379703] PM: genpd: Disabling unused power domains
machine # [ 3.436028] Freeing unused decrypted memory: 2028K
machine # [ 3.548017] Freeing unused kernel image (initmem) memory: 3416K
machine # [ 3.548606] Write protecting the kernel read-only data: 30720k
machine # [ 3.552792] Freeing unused kernel image (rodata/data gap) memory: 1744K
machine # [ 3.767470] x86/mm: Checked W+X mappings: passed, no W+X pages found.
machine # [ 3.768461] Run /init as init process
machine # [ 4.711348] device-mapper: ioctl: 4.48.0-ioctl (2023-03-01) initialised: dm-devel@lists.linux.dev
machine # [ 6.999652] ACPI: \_SB_.LNKB: Enabled at IRQ 10
machine # [ 7.140861] uhci_hcd 0000:00:01.2: UHCI Host Controller
machine # [ 7.142722] ACPI: \_SB_.LNKC: Enabled at IRQ 11
machine # [ 7.149958] uhci_hcd 0000:00:01.2: new USB bus registered, assigned bus number 1
machine # [ 7.151455] uhci_hcd 0000:00:01.2: detected 2 ports
machine # [ 7.159449] uhci_hcd 0000:00:01.2: irq 11, io port 0x0000c100
machine # [ 7.199787] usb usb1: New USB device found, idVendor=1d6b, idProduct=0001, bcdDevice= 6.12
machine # [ 7.200129] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
machine # [ 7.200553] usb usb1: Product: UHCI Host Controller
machine # [ 7.200795] usb usb1: Manufacturer: Linux 6.12.82 uhci_hcd
machine # [ 7.201028] usb usb1: SerialNumber: 0000:00:01.2
machine # [ 7.244734] hub 1-0:1.0: USB hub found
machine # [ 7.264566] hub 1-0:1.0: 2 ports detected
machine # [ 7.288940] SCSI subsystem initialized
machine # [ 7.351019] i8042: PNP: PS/2 Controller [PNP0303:KBD,PNP0f13:MOU] at 0x60,0x64 irq 1,12
machine # [ 7.373256] serio: i8042 KBD port at 0x60,0x64 irq 1
machine # [ 7.374206] serio: i8042 AUX port at 0x60,0x64 irq 12
machine # [ 7.405823] ACPI: \_SB_.LNKA: Enabled at IRQ 10
machine # [ 7.524509] usb 1-1: new full-speed USB device number 2 using uhci_hcd
machine # [ 7.669805] scsi host0: ata_piix
machine # [ 7.688462] scsi host1: ata_piix
machine # [ 7.691325] ata1: PATA max MWDMA2 cmd 0x1f0 ctl 0x3f6 bmdma 0xc1e0 irq 14 lpm-pol 0
machine # [ 7.691923] ata2: PATA max MWDMA2 cmd 0x170 ctl 0x376 bmdma 0xc1e8 irq 15 lpm-pol 0
machine # [ 7.710562] usb 1-1: New USB device found, idVendor=0627, idProduct=0001, bcdDevice= 0.00
machine # [ 7.710900] usb 1-1: New USB device strings: Mfr=1, Product=3, SerialNumber=10
machine # [ 7.711336] usb 1-1: Product: QEMU USB Tablet
machine # [ 7.711517] usb 1-1: Manufacturer: QEMU
machine # [ 7.711679] usb 1-1: SerialNumber: 28754-0000:00:01.2-1
machine # [ 7.727713] [drm] pci: virtio-gpu-pci detected at 0000:00:0a.0
machine # [ 7.729321] [drm] features: -virgl +edid -resource_blob -host_visible
machine # [ 7.729388] [drm] features: -context_init
machine # [ 7.733011] [drm] number of scanouts: 1
machine # [ 7.733382] [drm] number of cap sets: 0
machine # [ 7.792735] [drm] Initialized virtio_gpu 0.1.0 for 0000:00:0a.0 on minor 0
machine # [ 7.858973] ata2: found unknown device (class 0)
machine # [ 7.870284] ata2.00: ATAPI: QEMU DVD-ROM, 2.5+, max UDMA/100
machine # [ 7.909838] scsi 1:0:0:0: CD-ROM QEMU QEMU DVD-ROM 2.5+ PQ: 0 ANSI: 5
machine # [ 8.213018] Console: switching to colour frame buffer device 160x50
machine # [ 8.232514] virtio-pci 0000:00:0a.0: [drm] fb0: virtio_gpudrmfb frame buffer device
machine # [ 9.331782] virtio_blk virtio5: 2/0/0 default/read/poll queues
machine # [ 9.411630] virtio_blk virtio5: [vda] 2097152 512-byte logical blocks (1.07 GB/1.00 GiB)
machine # [ 9.534533] input: AT Translated Set 2 keyboard as /devices/platform/i8042/serio0/input/input0
machine # [ 9.953231] netfs: FS-Cache loaded
machine # [ 9.968902] sr 1:0:0:0: [sr0] scsi3-mmc drive: 4x/4x cd/rw xa/form2 tray
machine # [ 9.969963] cdrom: Uniform CD-ROM driver Revision: 3.20
machine # [ 10.032927] 9pnet: Installing 9P2000 support
machine # [ 10.105071] hid: raw HID events driver (C) Jiri Kosina
machine # [ 10.248677] usbcore: registered new interface driver usbhid
machine # [ 10.249107] usbhid: USB HID core driver
machine # [ 10.315835] input: QEMU QEMU USB Tablet as /devices/pci0000:00/0000:00:01.2/usb1/1-1/1-1:1.0/0003:0627:0001.0001/input/input2
machine # [ 10.320606] hid-generic 0003:0627:0001.0001: input,hidraw0: USB HID v0.01 Mouse [QEMU QEMU USB Tablet] on usb-0000:00:01.2-1/input0
machine # [ 12.007916] EXT4-fs (vda): mounted filesystem fcdcae98-59a9-4280-bb4a-2b34d121fee8 r/w with ordered data mode. Quota mode: none.
machine # [ 12.226429] 9p: Installing v9fs 9p2000 file system support
machine # [ 15.509008] EXT4-fs (vda): re-mounted fcdcae98-59a9-4280-bb4a-2b34d121fee8.
machine # [ 15.539087] booting system configuration /nix/store/8vbbm5bzbsvmigy4hfzqpvj34vf3qv72-nixos-system-machine-test
machine: Guest root shell did not produce any data yet...
machine: To debug, enter the VM and run 'systemctl status backdoor.service'.
machine # [ 28.416278] systemd[1]: Inserted module 'autofs4'
machine # [ 28.486491] NET: Registered PF_VSOCK protocol family
machine # [ 28.630552] fuse: init (API version 7.41)
machine # [ 28.920816] systemd[1]: systemd 258.5 running in system mode (+PAM +AUDIT -SELINUX +APPARMOR +IMA +IPE +SMACK +SECCOMP +GCRYPT -GNUTLS +OPENSSL +ACL +BLKID +CURL +ELFUTILS +FIDO2 +IDN2 -IDN -IPTC +KMOD +LIBCRYPTSETUP +LIBCRYPTSETUP_PLUGINS +LIBFDISK +PCRE2 +PWQUALITY +P11KIT +QRENCODE +TPM2 +BZIP2 +LZ4 +XZ +ZLIB +ZSTD +BPF_FRAMEWORK -BTF -XKBCOMMON +UTMP -SYSVINIT +LIBARCHIVE)
machine # [ 28.932321] systemd[1]: Detected virtualization qemu.
machine # [ 28.937347] systemd[1]: Detected architecture x86-64.
machine # [ 28.943290] systemd[1]: Detected first boot.
machine # [ 28.998606] systemd[1]: Initializing machine ID from random generator.
machine # [ 29.041703] systemd[1]: Hostname set to <machine>.
machine # [ 30.963470] systemd[1]: bpf-restrict-fs: LSM BPF program attached
machine # [ 32.251028] systemd[1]: Applying preset policy.
machine # [ 34.552340] systemd[1]: Populated /etc with preset unit settings.
machine # [ 36.828005] systemd[1]: Queued start job for default target Multi-User System.
machine # [ 37.052753] systemd[1]: Created slice Slice /system/getty.
machine # [ 37.071872] systemd[1]: Created slice Slice /system/modprobe.
machine # [ 37.087453] systemd[1]: Created slice User and Session Slice.
machine # [ 37.098511] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
machine # [ 37.104346] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
machine # [ 37.111544] systemd[1]: Expecting device /dev/hvc0...
machine # [ 37.116613] systemd[1]: Expecting device /dev/ttyS0...
machine # [ 37.120759] systemd[1]: Expecting device /sys/subsystem/net/devices/eth1...
machine # [ 37.125740] systemd[1]: Reached target Local Encrypted Volumes.
machine # [ 37.130941] systemd[1]: Reached target Virtual Machines and Containers.
machine # [ 37.135818] systemd[1]: Reached target Path Units.
machine # [ 37.140284] systemd[1]: Reached target Remote File Systems.
machine # [ 37.144577] systemd[1]: Reached target Slice Units.
machine # [ 37.148926] systemd[1]: Reached target Swaps.
machine # [ 37.186899] systemd[1]: Listening on Process Core Dump Socket.
machine # [ 37.210513] systemd[1]: Listening on Credential Encryption/Decryption.
machine # [ 37.223555] systemd[1]: Listening on Journal Audit Socket.
machine # [ 37.231573] systemd[1]: Listening on Journal Socket (/dev/log).
machine # [ 37.237412] systemd[1]: Listening on Journal Sockets.
machine # [ 37.245948] systemd[1]: Listening on Userspace Out-Of-Memory (OOM) Killer Socket.
machine # [ 37.250779] systemd[1]: Make TPM PCR Policy skipped, unmet condition check ConditionSecurity=measured-uki
machine # [ 37.256634] systemd[1]: Listening on udev Control Socket.
machine # [ 37.262050] systemd[1]: Listening on udev Kernel Socket.
machine # [ 37.319826] systemd[1]: Mounting Huge Pages File System...
machine # [ 37.351899] systemd[1]: Mounting POSIX Message Queue File System...
machine # [ 37.414840] systemd[1]: Mounting Kernel Debug File System...
machine # [ 37.487863] systemd[1]: Mounting Kernel Trace File System...
machine # [ 37.644804] systemd[1]: Starting Create List of Static Device Nodes...
machine # [ 37.671623] systemd[1]: Load Kernel Module 9pnet_virtio skipped, unmet condition check ConditionKernelModuleLoaded=!9pnet_virtio
machine # [ 37.839430] systemd[1]: Starting Load Kernel Module configfs...
machine # [ 37.855482] systemd[1]: Load Kernel Module drm skipped, unmet condition check ConditionKernelModuleLoaded=!drm
machine # [ 37.944009] systemd[1]: Starting Load Kernel Module efi_pstore...
machine # [ 37.952897] systemd[1]: Load Kernel Module fuse skipped, unmet condition check ConditionKernelModuleLoaded=!fuse
machine # [ 38.000049] systemd[1]: Mounting FUSE Control File System...
machine # [ 38.011826] systemd[1]: File System Check on Root Device skipped, unmet condition check ConditionPathIsReadWrite=!/
machine # [ 38.029026] systemd[1]: Clear Stale Hibernate Storage Info skipped, unmet condition check ConditionPathExists=/sys/firmware/efi/efivars/HibernateLocation-8cf2644b-4b0b-428f-9387-6d876050dc67
machine # [ 38.136626] systemd[1]: Starting Journal Service...
machine # [ 38.206634] systemd[1]: Starting Load Kernel Modules...
machine # [ 38.304801] systemd[1]: Starting Userspace Out-Of-Memory (OOM) Killer...
machine # [ 38.378990] systemd[1]: Starting Remount Root and Kernel File Systems...
machine # [ 38.386461] systemd[1]: Early TPM SRK Setup skipped, unmet condition check ConditionSecurity=measured-uki
machine # [ 38.426884] systemd[1]: Starting Coldplug All udev Devices...
machine # [ 38.522108] systemd[1]: Mounted Huge Pages File System.
machine # [ 38.534849] systemd[1]: Mounted POSIX Message Queue File System.
machine # [ 38.543893] systemd[1]: Mounted Kernel Debug File System.
machine # [ 38.552994] systemd[1]: Mounted Kernel Trace File System.
machine # [ 38.577435] systemd[1]: Finished Create List of Static Device Nodes.
machine # [ 38.595487] systemd[1]: Mounted FUSE Control File System.
machine # [ 38.641462] systemd[1]: Starting Create Static Device Nodes in /dev gracefully...
machine # [ 38.762920] (modprobe)[430]: modprobe@configfs.service: modprobe@configfs.service: Unable to locate executable 'modprobe': No such file or directory
machine # [ 38.899852] systemd[1]: modprobe@configfs.service: Deactivated successfully.
machine # [ 38.919850] systemd[1]: Finished Load Kernel Module configfs.
machine # [ 38.943490] systemd[1]: Kernel Configuration File System skipped, unmet condition check ConditionPathExists=/sys/kernel/config
machine # [ 38.957997] (modprobe)[431]: modprobe@efi_pstore.service: modprobe@efi_pstore.service: Unable to locate executable 'modprobe': No such file or directory
machine # [ 38.996483] systemd[1]: modprobe@efi_pstore.service: Deactivated successfully.
machine # [ 39.009676] systemd[1]: Finished Load Kernel Module efi_pstore.
machine # [ 39.605505] EXT4-fs (vda): re-mounted fcdcae98-59a9-4280-bb4a-2b34d121fee8.
machine # [ 39.732046] systemd[1]: Finished Remount Root and Kernel File Systems.
machine # [ 39.756800] systemd[1]: Platform Persistent Storage Archival skipped, unmet condition check ConditionDirectoryNotEmpty=/sys/fs/pstore
machine # [ 39.828803] systemd[1]: Starting Load/Save OS Random Seed...
machine # [ 39.836987] systemd[1]: TPM SRK Setup skipped, unmet condition check ConditionSecurity=measured-uki
machine # [ 40.059703] loop: module loaded
machine # [ 40.154071] systemd[1]: Finished Load Kernel Modules.
machine # [ 40.216577] systemd[1]: Starting Firewall...
machine # [ 40.280858] systemd[1]: Starting Apply Kernel Variables...
machine # [ 40.714808] systemd[1]: Finished Load/Save OS Random Seed.
machine # [ 40.727867] systemd[1]: Reached target First Boot Complete.
machine # [ 40.863799] systemd-journald[433]: Collecting audit messages is enabled.
machine # [ 41.114525] systemd[1]: Finished Create Static Device Nodes in /dev gracefully.
machine # [ 41.198645] systemd[1]: Starting Create Static Device Nodes in /dev...
machine # [ 41.902572] systemd[1]: Finished Apply Kernel Variables.
machine # [ 42.802064] systemd[1]: Started Userspace Out-Of-Memory (OOM) Killer.
machine # [ 42.939981] systemd[1]: Finished Create Static Device Nodes in /dev.
machine # [ 42.977066] systemd[1]: Reached target Preparation for Local File Systems.
machine # [ 43.029760] systemd[1]: Mounting /run/wrappers...
machine # [ 43.077521] systemd[1]: Starting Rule-based Manager for Device Events and Files...
machine # [ 43.533030] systemd[1]: Mounted /run/wrappers.
machine # [ 43.547369] systemd[1]: Reached target Local File Systems.
machine # [ 43.586300] systemd[1]: Listening on Boot Entries Service Socket.
machine # [ 43.635606] systemd[1]: Starting Create SUID/SGID Wrappers...
machine # [ 43.644553] systemd[1]: Update Boot Loader Random Seed skipped, no trigger condition checks were met.
machine # [ 43.699747] systemd[1]: Starting Save Transient machine-id to Disk...
machine # [ 44.604420] systemd[1]: etc-machine\x2did.mount: Deactivated successfully.
machine # [ 44.663494] systemd[1]: Finished Save Transient machine-id to Disk.
machine # [ 44.929705] systemd[1]: Started Journal Service.
machine # [ 44.932892] systemd-modules-load[434]: Inserted module 'loop'
machine # [ 44.983655] systemd-oomd[435]: [0;1;38:5:185mNo swap; memory pressure usage will be degraded
machine # [ 45.044322] systemd[1]: Starting Flush Journal to Persistent Storage...
machine # [ 45.190917] systemd-udevd[458]: Using default interface naming scheme 'v258'.
machine # [ 45.910891] systemd-journald[433]: Received client request to flush runtime journal.
machine # [ 47.047794] systemd[1]: Finished Flush Journal to Persistent Storage.
machine # [ 47.077815] systemd[1]: Starting Create System Files and Directories...
machine # [ 47.939534] systemd[1]: Started Rule-based Manager for Device Events and Files.
machine # [ 49.326417] systemd[1]: Finished Create System Files and Directories.
machine # [ 49.379794] systemd[1]: Starting Rebuild Journal Catalog...
machine # [ 49.427577] systemd[1]: Starting Record System Boot/Shutdown in UTMP...
machine # [ 50.664898] systemd[1]: Finished Record System Boot/Shutdown in UTMP.
machine # [ 51.765943] systemd[1]: Finished Rebuild Journal Catalog.
machine # [ 51.795715] systemd[1]: Starting Update is Completed...
machine # [ 52.638555] systemd[1]: Finished Update is Completed.
machine # [ 54.548797] systemd[1]: suid-sgid-wrappers.service: Deactivated successfully.
machine # [ 54.564798] systemd[1]: Finished Create SUID/SGID Wrappers.
machine # [ 54.579884] systemd[1]: suid-sgid-wrappers.service: Consumed 2.997s CPU time, 3.3M memory peak.
machine # [ 54.675562] systemd[1]: Finished Coldplug All udev Devices.
machine # [ 54.684511] systemd[1]: Reached target System Initialization.
machine # [ 54.713492] systemd[1]: Started Discard unused filesystem blocks once a week.
machine # [ 54.738746] systemd[1]: Started Daily Cleanup of Temporary Directories.
machine # [ 54.754773] systemd[1]: Reached target Timer Units.
machine # [ 54.766830] systemd[1]: Listening on D-Bus System Message Bus Socket.
machine # [ 54.773910] systemd[1]: Listening on Nix Daemon Socket.
machine # [ 54.781805] systemd[1]: Listening on Hostname Service Socket.
machine # [ 54.794781] systemd[1]: Reached target Socket Units.
machine # [ 54.803811] systemd[1]: Reached target Basic System.
machine # [ 54.812826] systemd[1]: System is tainted: support-ended
machine # [ 54.824726] systemd[1]: Starting Import lastlog data into lastlog2 database...
machine # [ 54.877649] systemd[1]: Starting Name Service Cache Daemon (nsncd)...
machine # [ 54.936758] systemd[1]: Started Reset console on configuration changes.
machine # [ 54.995690] systemd[1]: Starting resolvconf update...
machine # [ 55.050216] systemd[1]: Starting Seat management daemon...
machine # [ 55.127721] systemd[1]: Starting D-Bus System Message Bus...
machine # [ 56.154837] seatd[639]: 00:00:00.016 [INFO] [seatd/seat.c:48] Created VT-bound seat seat0
machine # [ 56.174490] seatd[639]: 00:00:00.030 [INFO] [seatd/seatd.c:194] seatd started
machine # [ 56.220634] systemd[1]: Started Seat management daemon.
machine # [ 56.776548] systemd[1]: Finished Import lastlog data into lastlog2 database.
machine # [ 57.188399] dbus-daemon[640]: dbus[640]: Unknown username "systemd-timesync" in message bus configuration file
machine # [ 57.260533] systemd[1]: Started Name Service Cache Daemon (nsncd).
machine # [ 57.280336] systemd[1]: Reached target Host and Network Name Lookups.
machine # [ 57.296389] systemd[1]: Reached target User and Group Name Lookups.
machine # [ 57.404383] nsncd[636]: Aug 27 14:27:20.735 INFO started, config: Config { ignored_request_types: {}, worker_count: 8, handoff_timeout: 10s }, path: "/var/run/nscd/socket"
machine # [ 57.417957] systemd[1]: Starting User Login Management...
machine # [ 58.121444] systemd[1]: Started D-Bus System Message Bus.
machine: Guest root shell did not produce any data yet...
machine: To debug, enter the VM and run 'systemctl status backdoor.service'.
machine # [ 59.890936] systemd[1]: Stopped target Host and Network Name Lookups.
machine # [ 59.917411] systemd[1]: Stopping Host and Network Name Lookups...
machine # [ 59.929422] systemd[1]: Stopped target User and Group Name Lookups.
machine # [ 59.947667] systemd[1]: Stopping User and Group Name Lookups...
machine # [ 59.983417] systemd[1]: Stopping Name Service Cache Daemon (nsncd)...
machine # [ 60.006597] systemd[1]: nscd.service: Deactivated successfully.
machine # [ 60.017559] systemd[1]: Stopped Name Service Cache Daemon (nsncd).
machine # [ 60.155548] systemd-logind[665]: New seat seat0.
machine # [ 60.183532] systemd[1]: Starting Name Service Cache Daemon (nsncd)...
machine # [ 60.247798] systemd[1]: Started User Login Management.
machine # [ 60.306262] systemd[1]: Starting linger-users.service...
machine # [ 61.196696] systemd[1]: linger-users.service: Deactivated successfully.
machine # [ 61.215413] systemd[1]: Finished linger-users.service.
machine # [ 61.272908] systemd[1]: Started Name Service Cache Daemon (nsncd).
machine # [ 61.311579] nsncd[723]: Aug 27 14:27:24.811 INFO started, config: Config { ignored_request_types: {}, worker_count: 8, handoff_timeout: 10s }, path: "/var/run/nscd/socket"
machine # [ 61.322821] systemd[1]: Reached target Host and Network Name Lookups.
machine # [ 61.329846] systemd[1]: Reached target User and Group Name Lookups.
machine # [ 61.460733] systemd[1]: Finished Firewall.
machine # [ 61.859369] systemd[1]: Finished resolvconf update.
machine # [ 61.883598] systemd[1]: Reached target Preparation for Network.
machine # [ 63.627757] systemd[1]: Found device /dev/hvc0.
machine # [ 64.272612] systemd[1]: Found device /dev/ttyS0.
machine # [ 64.320791] systemd[1]: Started backdoor.service.
machine # [ 65.010374] (udev-worker)[784]: [0;1;38:5:185meth1: Config file /etc/systemd/network/40-eth1.link is applied to device based on potentially unpredictable interface name.
machine # [ 65.047421] (udev-worker)[784]: Network interface NamePolicy= disabled on kernel command line.
machine # [ 65.136406] (udev-worker)[780]: Network interface NamePolicy= disabled on kernel command line.
machine # connecting to host...
machine: Guest shell says: b'Spawning backdoor root shell...\n'
machine: connected to guest root shell
machine: (connecting took 67.12 seconds)
machine: (finished: waiting for the VM to finish booting, in 67.12 seconds)
machine # [ 65.971906] systemd[1]: Found device Virtio network device.
machine # [ 66.031515] systemd[1]: Starting Address configuration of eth1...
machine: (finished: waiting for unit seatd.service, in 68.12 seconds)
machine: waiting for success: test -e /dev/dri/card0
machine: (finished: waiting for success: test -e /dev/dri/card0, in 0.38 seconds)
machine: must succeed: chgrp render /dev/dri/card0 /dev/dri/renderD128
machine # [ 66.774712] network-addresses-eth1-start[814]: adding address 192.168.1.1/24... done
machine # [ 66.959554] network-addresses-eth1-start[814]: adding address 2001:db8:1::1/64... done
machine # [ 67.177896] systemd[1]: Finished Address configuration of eth1.
machine # [ 67.214818] systemd[1]: Starting Networking Setup...
machine: (finished: must succeed: chgrp render /dev/dri/card0 /dev/dri/renderD128, in 0.71 seconds)
machine: must succeed: chmod 0660 /dev/dri/card0 /dev/dri/renderD128
machine: (finished: must succeed: chmod 0660 /dev/dri/card0 /dev/dri/renderD128, in 0.50 seconds)
machine: must succeed: ls -l /dev/dri; find /sys/class/drm -maxdepth 1 -printf '%f\n' | sort
machine: (finished: must succeed: ls -l /dev/dri; find /sys/class/drm -maxdepth 1 -printf '%f\n' | sort, in 1.02 seconds)
total 0
crw-rw---- 1 root render 226, 0 Aug 27 14:26 card0
crw-rw---- 1 root render 226, 128 Aug 27 14:26 renderD128
card0
card0-Virtual-1
drm
renderD128
version
machine: must succeed: systemctl status getty@tty1.service --no-pager || true
machine # [ 70.328003] systemd[1]: Finished Networking Setup.
machine # [ 70.348549] systemd[1]: Reached target Network.
machine # [ 70.412784] systemd[1]: Starting Permit User Sessions...
machine: (finished: must succeed: systemctl status getty@tty1.service --no-pager || true, in 1.54 seconds)
○ getty@tty1.service - Getty on tty1
Loaded: loaded (/etc/systemd/system/getty@.service; disabled; preset: ignored)
Drop-In: /nix/store/pzznk29qgrd0zjx3a1qkgwpc2nyc221q-system-units/getty@.service.d
└─overrides.conf
Active: inactive (dead)
Job: 84
Docs: man:agetty(8)
man:systemd-getty-generator(8)
https://0pointer.de/blog/projects/serial-console.html
machine: waiting for success: pgrep -u alice -f '/bin/niri-vm-launcher'
machine # [ 70.847650] systemd[1]: Finished Permit User Sessions.
machine # [ 70.901841] systemd[1]: Started Getty on tty1.
machine # [ 70.911477] systemd[1]: Reached target Login Prompts.
machine # [ 70.930441] systemd[1]: Reached target Multi-User System.
machine # [ 70.942849] systemd[1]: Startup finished in 28.120s (kernel) + 42.798s (userspace) = 1min 10.918s.
machine # [ 72.321847] login[934]: pam_unix(login:session): session opened for user alice(uid=1000) by LOGIN(uid=0)
machine # [ 72.993630] systemd[1]: Created slice Slice /user/1000.
machine # [ 73.010773] systemd[1]: Starting User Runtime Directory /run/user/1000...
machine # [ 73.447620] systemd-logind[665]: New session '1' of user 'alice' with class 'user' and type 'tty'.
machine # [ 73.675448] systemd[1]: Finished User Runtime Directory /run/user/1000.
machine # [ 73.789341] systemd[1]: Starting User Manager for UID 1000...
machine # [ 74.277014] (systemd)[963]: pam_unix(systemd-user:session): session opened for user alice(uid=1000) by (uid=0)
machine # [ 74.323383] systemd-logind[665]: New session '2' of user 'alice' with class 'manager' and type 'unspecified'.
machine # [ 77.229012] systemd[963]: Queued start job for default target Main User Target.
machine # [ 77.331894] systemd[963]: Created slice User Application Slice.
machine # [ 77.407842] input: Power Button as /devices/LNXSYSTM:00/LNXPWRBN:00/input/input3
machine # [ 77.366719] systemd[963]: Started Daily Cleanup of User's Temporary Directories.
machine # [ 77.386509] systemd[963]: Reached target Paths.
machine # [ 77.398649] systemd[963]: Reached target Timers.
machine # [ 77.412413] systemd[963]: Starting D-Bus User Message Bus Socket...
machine # [ 77.468308] ACPI: button: Power Button [PWRF]
machine # [ 77.430749] systemd[963]: Starting Create User Files and Directories...
machine # [ 78.052761] systemd[963]: Finished Create User Files and Directories.
machine # [ 78.383585] systemd[963]: Listening on D-Bus User Message Bus Socket.
machine # [ 78.388050] systemd[963]: Reached target Sockets.
machine # [ 78.392635] systemd[963]: Reached target Basic System.
machine # [ 78.415012] systemd[1]: Started User Manager for UID 1000.
machine # [ 78.448001] systemd[963]: Starting Run user-specific NixOS activation...
machine # [ 78.459512] systemd[1]: Started Session 1 of User alice.
machine # [ 79.056328] systemd[963]: Finished Run user-specific NixOS activation.
machine # [ 79.075573] systemd[963]: Reached target Main User Target.
machine # [ 79.084210] systemd[963]: Startup finished in 4.596s.
machine # [ 80.331612] mousedev: PS/2 mouse device common for all mice
machine: (finished: waiting for success: pgrep -u alice -f '/bin/niri-vm-launcher', in 9.93 seconds)
machine: must succeed: su - alice -c 'printf before >/home/alice/.niri-variant'
machine # [ 80.664431] piix4_smbus 0000:00:01.3: SMBus Host Controller at 0x700, revision 0
machine # [ 80.679052] i2c i2c-0: Memory type 0x07 not supported yet, not instantiating SPD
machine # [ 80.999939] su[1036]: Successful su for alice by root
machine # [ 81.229543] su[1036]: pam_unix(su:session): session opened for user alice(uid=1000) by (uid=0)
machine # [ 81.668919] su[1036]: pam_unix(su:session): session closed for user alice
machine: (finished: must succeed: su - alice -c 'printf before >/home/alice/.niri-variant', in 1.25 seconds)
machine: waiting for success: pgrep -u alice -x niri || test -e /tmp/niri-before.done
machine: (finished: waiting for success: pgrep -u alice -x niri || test -e /tmp/niri-before.done, in 1.28 seconds)
machine: must succeed: cat /tmp/niri-before.log
machine: (finished: must succeed: cat /tmp/niri-before.log, in 0.59 seconds)
machine: must succeed: pgrep -u alice -x niri
machine: (finished: must succeed: pgrep -u alice -x niri, in 0.94 seconds)
machine: waiting for success: find /run/user/1000 -maxdepth 1 -type s -name 'niri.*.sock' | grep -q .
machine # [ 87.137457] parport_pc 00:03: reported by Plug and Play ACPI
machine # [ 87.187905] parport0: PC-style at 0x378, irq 7 [PCSPP(,...)]
machine # [ 87.254628] rtc_cmos 00:05: RTC can wake from S4
machine # [ 87.436022] Floppy drive(s): fd0 is 2.88M AMI BIOS
machine # [ 87.397257] seatd[639]: 00:00:31.264 [INFO] [seatd/server.c:145] New client connected (pid: 1052, uid: 1000, gid: 100)
machine # [ 87.405664] seatd[639]: 00:00:31.269 [INFO] [seatd/seat.c:239] Added client 1 to seat0
machine # [ 87.415996] seatd[639]: 00:00:31.278 [INFO] [seatd/seat.c:563] Opened client 1 on seat0
machine # [ 87.483661] rtc_cmos 00:05: registered as rtc0
machine # [ 87.488863] FDC 0 is a S82078B
machine # [ 87.499592] rtc_cmos 00:05: setting system clock to 2026-08-27T14:27:51 UTC (1787840871)
machine # [ 87.604488] rtc_cmos 00:05: alarms up to one day, y3k, 242 bytes nvram, hpet irqs
machine # [ 92.111606] input: ImExPS/2 Generic Explorer Mouse as /devices/platform/i8042/serio1/input/input4
machine: (finished: waiting for success: find /run/user/1000 -maxdepth 1 -type s -name 'niri.*.sock' | grep -q ., in 8.41 seconds)
machine: must succeed: find /run/user/1000 -maxdepth 1 -type s -name 'niri.*.sock' | head -n 1
machine # [ 93.304571] input: QEMU Virtio Keyboard as /devices/pci0000:00/0000:00:09.0/virtio7/input/input5
machine: (finished: must succeed: find /run/user/1000 -maxdepth 1 -type s -name 'niri.*.sock' | head -n 1, in 0.90 seconds)
machine: must succeed: sleep 10
machine # [ 96.167859] cryptd: max_cpu_qlen set to 1000
machine # [ 96.488832] AES CTR mode by8 optimization enabled
machine # [ 100.112546] kvm_amd: Nested Virtualization enabled
machine # [ 100.112989] kvm_amd: Nested Paging enabled
machine # [ 100.114874] kvm_amd: Virtual GIF supported
machine # [ 100.115270] kvm_amd: PMU virtualization is disabled
machine: (finished: must succeed: sleep 10, in 10.86 seconds)
machine: must succeed: cat /tmp/niri-before.log
machine # [ 104.907796] systemd[1]: Starting Virtual Console Setup...
machine: (finished: must succeed: cat /tmp/niri-before.log, in 1.40 seconds)
2026-08-27T14:27:49.638611Z  INFO niri: starting version 26.04 (v26.04-85-gdd75865f-modified)
2026-08-27T14:27:50.477650Z DEBUG niri_config: loaded config from "/nix/store/gmpbc87798p6hxz382wk644jsld48ilh-niri-vm-test.kdl"
2026-08-27T14:27:52.587494Z  INFO niri::backend::tty: using as the render node: "/dev/dri/renderD128"
2026-08-27T14:27:56.105475Z DEBUG niri::backend::tty: adding device: 57856 "/dev/dri/card0"
2026-08-27T14:27:56.111096Z DEBUG niri::backend::tty: this is the primary node
2026-08-27T14:27:56.151236Z  WARN smithay::backend::drm::device::fd: Unable to become drm master, assuming unprivileged mode
2026-08-27T14:28:02.376336Z DEBUG niri::backend::tty: got render node: renderD128
2026-08-27T14:28:02.380277Z DEBUG niri::backend::tty: initializing the primary renderer
2026-08-27T14:28:02.395420Z  WARN smithay::backend::egl::context: ignoring requested context priority, EGL_IMG_context_priority not supported priority=High
machine: must succeed: for file in /sys/class/drm/card0-Virtual-1/status /sys/class/drm/card0-Virtual-1/enabled /sys/class/drm/card0-Virtual-1/modes; do echo $file; cat $file; done
machine: (finished: must succeed: for file in /sys/class/drm/card0-Virtual-1/status /sys/class/drm/card0-Virtual-1/enabled /sys/class/drm/card0-Virtual-1/modes; do echo $file; cat $file; done, in 1.75 seconds)
/sys/class/drm/card0-Virtual-1/status
connected
/sys/class/drm/card0-Virtual-1/enabled
enabled
/sys/class/drm/card0-Virtual-1/modes
1280x800
5120x2160
4096x2160
3840x2160
3840x2160
3840x2160
1920x1440
2560x1080
1856x1392
1792x1344
2048x1152
1920x1200
1920x1080
1920x1080
1600x1200
1680x1050
1400x1050
1280x1024
1440x900
1280x960
1360x768
1280x768
1024x768
800x600
640x480
640x480
machine: must succeed: su - alice -c 'NIRI_SOCKET=/run/user/1000/niri.wayland-1.1052.sock /nix/store/m8krb6xhdqnpmxa44ily5g7hdnz13hzf-niri-before-dd75865f/bin/niri msg outputs' || true
machine # [ 109.435730] su[1265]: Successful su for alice by root
machine # [ 109.929793] su[1265]: pam_unix(su:session): session opened for user alice(uid=1000) by (uid=0)
machine # [ 110.862614] systemd[1]: Finished Virtual Console Setup.
machine # [ 112.858342] dbus-daemon[640]: [system] Activating via systemd: service name='org.freedesktop.locale1' unit='dbus-org.freedesktop.locale1.service' requested by ':1.6' (uid=1000 pid=1052 comm="/nix/store/m8krb6xhdqnpmxa44ily5g7hdnz13hzf-niri-b")
machine # [ 113.076602] systemd[1]: Starting Locale Service...
machine # [ 115.123157] systemd-logind[665]: Watching system buttons on /dev/input/event0 (AT Translated Set 2 keyboard)
machine # [ 116.039989] systemd[1]: Started Locale Service.
machine # [ 116.094899] dbus-daemon[640]: [system] Successfully activated service 'org.freedesktop.locale1'
machine # [ 119.635730] systemd-logind[665]: Watching system buttons on /dev/input/event2 (Power Button)
machine # [ 120.002971] ppdev: user-space parallel port driver
machine # [ 120.346816] systemd-logind[665]: Watching system buttons on /dev/input/event4 (QEMU Virtio Keyboard)
machine # [ 120.732701] su[1265]: pam_unix(su:session): session closed for user alice
machine: (finished: must succeed: su - alice -c 'NIRI_SOCKET=/run/user/1000/niri.wayland-1.1052.sock /nix/store/m8krb6xhdqnpmxa44ily5g7hdnz13hzf-niri-before-dd75865f/bin/niri msg outputs' || true, in 12.94 seconds)
Output "Red Hat, Inc. QEMU Monitor Unknown" (Virtual-1)
Current mode: 1280x800 @ 74.994 Hz (preferred)
Variable refresh rate: not supported
Physical size: 320x200 mm
Logical position: 0, 0
Logical size: 1280x800
Scale: 1
Transform: normal
Available modes:
1280x800@74.994 (current, preferred)
5120x2160@50.000
4096x2160@50.000
3840x2160@60.000
3840x2160@59.940
3840x2160@50.000
1920x1440@60.000
2560x1080@50.000
1856x1392@59.995
1792x1344@60.000
2048x1152@60.000
1920x1200@59.885
1920x1080@60.000
1920x1080@50.000
1600x1200@60.000
1680x1050@59.954
1400x1050@59.978
1280x1024@60.020
1440x900@59.887
1280x960@60.000
1360x768@60.015
1280x768@59.870
1024x768@60.004
800x600@60.317
640x480@60.000
640x480@59.940
machine: waiting for success: su - alice -c 'NIRI_SOCKET=/run/user/1000/niri.wayland-1.1052.sock /nix/store/m8krb6xhdqnpmxa44ily5g7hdnz13hzf-niri-before-dd75865f/bin/niri msg outputs' | grep -q 'Virtual-1'
machine # [ 121.446430] su[1324]: Successful su for alice by root
machine # [ 121.597996] su[1324]: pam_unix(su:session): session opened for user alice(uid=1000) by (uid=0)
machine # [ 122.212586] su[1324]: pam_unix(su:session): session closed for user alice
machine: (finished: waiting for success: su - alice -c 'NIRI_SOCKET=/run/user/1000/niri.wayland-1.1052.sock /nix/store/m8krb6xhdqnpmxa44ily5g7hdnz13hzf-niri-before-dd75865f/bin/niri msg outputs' | grep -q 'Virtual-1', in 1.46 seconds)
machine: must succeed: su - alice -c 'NIRI_SOCKET=/run/user/1000/niri.wayland-1.1052.sock /nix/store/m8krb6xhdqnpmxa44ily5g7hdnz13hzf-niri-before-dd75865f/bin/niri msg outputs'
machine # [ 122.439470] su[1332]: Successful su for alice by root
machine # [ 122.531589] su[1332]: pam_unix(su:session): session opened for user alice(uid=1000) by (uid=0)
machine # [ 123.054939] su[1332]: pam_unix(su:session): session closed for user alice
machine: (finished: must succeed: su - alice -c 'NIRI_SOCKET=/run/user/1000/niri.wayland-1.1052.sock /nix/store/m8krb6xhdqnpmxa44ily5g7hdnz13hzf-niri-before-dd75865f/bin/niri msg outputs', in 0.83 seconds)
Output "Red Hat, Inc. QEMU Monitor Unknown" (Virtual-1)
Current mode: 1280x800 @ 74.994 Hz (preferred)
Variable refresh rate: not supported
Physical size: 320x200 mm
Logical position: 0, 0
Logical size: 1280x800
Scale: 1
Transform: normal
Available modes:
1280x800@74.994 (current, preferred)
5120x2160@50.000
4096x2160@50.000
3840x2160@60.000
3840x2160@59.940
3840x2160@50.000
1920x1440@60.000
2560x1080@50.000
1856x1392@59.995
1792x1344@60.000
2048x1152@60.000
1920x1200@59.885
1920x1080@60.000
1920x1080@50.000
1600x1200@60.000
1680x1050@59.954
1400x1050@59.978
1280x1024@60.020
1440x900@59.887
1280x960@60.000
1360x768@60.015
1280x768@59.870
1024x768@60.004
800x600@60.317
640x480@60.000
640x480@59.940
machine: must succeed: ls -l /dev/dri; id alice
machine: (finished: must succeed: ls -l /dev/dri; id alice, in 0.40 seconds)
total 0
drwxr-xr-x 2 root root 80 Aug 27 14:27 by-path
crw-rw----+ 1 root video 226, 0 Aug 27 14:27 card0
crw-rw-rw- 1 root render 226, 128 Aug 27 14:27 renderD128
uid=1000(alice) gid=100(users) groups=100(users),26(video),174(input),303(render),997(seat)
machine: must succeed: su - alice -c 'test -r /dev/dri/renderD128 -a -w /dev/dri/renderD128'
machine # [ 123.698899] su[1342]: Successful su for alice by root
machine # [ 123.808723] su[1342]: pam_unix(su:session): session opened for user alice(uid=1000) by (uid=0)
machine # [ 123.973591] su[1342]: pam_unix(su:session): session closed for user alice
machine: (finished: must succeed: su - alice -c 'test -r /dev/dri/renderD128 -a -w /dev/dri/renderD128', in 0.52 seconds)
machine: must succeed: su - alice -c 'XDG_RUNTIME_DIR=/run/user/1000 NIRI_SOCKET=/run/user/1000/niri.wayland-1.1052.sock DMABUF_DEVICE=/dev/dri/card0 NIRI_REPRO_LOG=/tmp/niri-before.log /nix/store/wlvm6j10hypf096yy729hzdx46vihdpb-niri-layer-output-reproducer-tools/bin/collect-dmabuf-tty before dd75865f547f0eac0e9b6c4d86d2cd00c0744252 /nix/store/m8krb6xhdqnpmxa44ily5g7hdnz13hzf-niri-before-dd75865f/bin/niri /nix/store/y7s3kq0b270bl7qmc9l8b6x53lxhp2r5-niri-layer-output-dmabuf-reproducer/bin/niri-layer-output-dmabuf-reproducer /nix/store/wlvm6j10hypf096yy729hzdx46vihdpb-niri-layer-output-reproducer-tools/bin/sample-drm Virtual-1 /tmp/before.csv 10 2 2'
machine # [ 124.243940] su[1351]: Successful su for alice by root
machine # [ 124.345884] su[1351]: pam_unix(su:session): session opened for user alice(uid=1000) by (uid=0)
machine # no DRM client counters found for PID 1052
machine # no DRM client counters found for PID 1360
machine # [ 146.230704] systemd[1]: systemd-localed.service: Deactivated successfully.
machine # [ 146.240243] systemd[1]: systemd-localed.service: Consumed 1.384s CPU time, 2.6M memory peak.
machine # no DRM client counters found for PID 1052
machine # no DRM client counters found for PID 1568
machine # no DRM client counters found for PID 1052
machine # no DRM client counters found for PID 1720
machine # no DRM client counters found for PID 1052
machine # no DRM client counters found for PID 1869
machine # no DRM client counters found for PID 1052
machine # no DRM client counters found for PID 2018
machine # no DRM client counters found for PID 1052
machine # no DRM client counters found for PID 2167
machine # no DRM client counters found for PID 1052
machine # no DRM client counters found for PID 2316
machine # no DRM client counters found for PID 1052
machine # no DRM client counters found for PID 2465
machine # no DRM client counters found for PID 1052
machine # no DRM client counters found for PID 2614
machine # no DRM client counters found for PID 1052
machine # no DRM client counters found for PID 2763
machine # no DRM client counters found for PID 1052
machine # no DRM client counters found for PID 2912
machine # [ 257.225597] su[1351]: pam_unix(su:session): session closed for user alice
machine: (finished: must succeed: su - alice -c 'XDG_RUNTIME_DIR=/run/user/1000 NIRI_SOCKET=/run/user/1000/niri.wayland-1.1052.sock DMABUF_DEVICE=/dev/dri/card0 NIRI_REPRO_LOG=/tmp/niri-before.log /nix/store/wlvm6j10hypf096yy729hzdx46vihdpb-niri-layer-output-reproducer-tools/bin/collect-dmabuf-tty before dd75865f547f0eac0e9b6c4d86d2cd00c0744252 /nix/store/m8krb6xhdqnpmxa44ily5g7hdnz13hzf-niri-before-dd75865f/bin/niri /nix/store/y7s3kq0b270bl7qmc9l8b6x53lxhp2r5-niri-layer-output-dmabuf-reproducer/bin/niri-layer-output-dmabuf-reproducer /nix/store/wlvm6j10hypf096yy729hzdx46vihdpb-niri-layer-output-reproducer-tools/bin/sample-drm Virtual-1 /tmp/before.csv 10 2 2', in 133.28 seconds)
machine: must succeed: cat /tmp/before.csv
machine: (finished: must succeed: cat /tmp/before.csv, in 0.28 seconds)
variant,revision,cycle,niri_total_kib,niri_shared_kib,niri_resident_kib,niri_rss_kib,client_total_kib,client_shared_kib,client_resident_kib,client_rss_kib,visible_layers,client_buffer_bytes,stale_mapped_layers
before,dd75865f547f0eac0e9b6c4d86d2cd00c0744252,0,0,0,0,149324,0,0,0,32112,1,16384000,0
before,dd75865f547f0eac0e9b6c4d86d2cd00c0744252,1,0,0,0,149584,0,0,0,32796,1,16384000,1
before,dd75865f547f0eac0e9b6c4d86d2cd00c0744252,2,0,0,0,149584,0,0,0,32724,1,16384000,2
before,dd75865f547f0eac0e9b6c4d86d2cd00c0744252,3,0,0,0,149596,0,0,0,32628,1,16384000,3
before,dd75865f547f0eac0e9b6c4d86d2cd00c0744252,4,0,0,0,149596,0,0,0,32704,1,16384000,4
before,dd75865f547f0eac0e9b6c4d86d2cd00c0744252,5,0,0,0,149596,0,0,0,32728,1,16384000,5
before,dd75865f547f0eac0e9b6c4d86d2cd00c0744252,6,0,0,0,149596,0,0,0,32640,1,16384000,6
before,dd75865f547f0eac0e9b6c4d86d2cd00c0744252,7,0,0,0,149596,0,0,0,32928,1,16384000,7
before,dd75865f547f0eac0e9b6c4d86d2cd00c0744252,8,0,0,0,149596,0,0,0,32716,1,16384000,8
before,dd75865f547f0eac0e9b6c4d86d2cd00c0744252,9,0,0,0,149596,0,0,0,32920,1,16384000,9
before,dd75865f547f0eac0e9b6c4d86d2cd00c0744252,10,0,0,0,149596,0,0,0,32620,1,16384000,10
machine: must succeed: pkill -TERM -u alice -x niri
machine: (finished: must succeed: pkill -TERM -u alice -x niri, in 0.30 seconds)
machine: waiting for failure: pgrep -u alice -x niri
machine # [ 258.163518] seatd[639]: 00:03:22.068 [INFO] [seatd/seat.c:158] No clients on seat0 to activate
machine # [ 258.186395] seatd[639]: 00:03:22.098 [INFO] [seatd/seat.c:290] Removed client 1 from seat0
machine # [ 258.189852] seatd[639]: 00:03:22.101 [INFO] [seatd/client.c:496] Client disconnected
machine: (finished: waiting for failure: pgrep -u alice -x niri, in 1.78 seconds)
machine: waiting for failure: find /run/user/1000 -maxdepth 1 -type s -name 'niri.*.sock' | grep -q .
machine: (finished: waiting for failure: find /run/user/1000 -maxdepth 1 -type s -name 'niri.*.sock' | grep -q ., in 0.25 seconds)
machine: must succeed: su - alice -c 'printf after >/home/alice/.niri-variant'
machine # [ 260.131736] su[3147]: Successful su for alice by root
machine # [ 260.242762] su[3147]: pam_unix(su:session): session opened for user alice(uid=1000) by (uid=0)
machine # [ 260.442284] su[3147]: pam_unix(su:session): session closed for user alice
machine: (finished: must succeed: su - alice -c 'printf after >/home/alice/.niri-variant', in 0.58 seconds)
machine: waiting for success: pgrep -u alice -x niri || test -e /tmp/niri-after.done
machine: (finished: waiting for success: pgrep -u alice -x niri || test -e /tmp/niri-after.done, in 0.51 seconds)
machine: must succeed: cat /tmp/niri-after.log
machine: (finished: must succeed: cat /tmp/niri-after.log, in 0.25 seconds)
machine: must succeed: pgrep -u alice -x niri
machine: (finished: must succeed: pgrep -u alice -x niri, in 0.48 seconds)
machine: waiting for success: find /run/user/1000 -maxdepth 1 -type s -name 'niri.*.sock' | grep -q .
machine # [ 263.202957] seatd[639]: 00:03:27.100 [INFO] [seatd/server.c:145] New client connected (pid: 3160, uid: 1000, gid: 100)
machine # [ 263.208801] seatd[639]: 00:03:27.103 [INFO] [seatd/seat.c:239] Added client 1 to seat0
machine # [ 263.211949] seatd[639]: 00:03:27.104 [INFO] [seatd/seat.c:563] Opened client 1 on seat0
machine: (finished: waiting for success: find /run/user/1000 -maxdepth 1 -type s -name 'niri.*.sock' | grep -q ., in 4.55 seconds)
machine: must succeed: find /run/user/1000 -maxdepth 1 -type s -name 'niri.*.sock' | head -n 1
machine: (finished: must succeed: find /run/user/1000 -maxdepth 1 -type s -name 'niri.*.sock' | head -n 1, in 0.38 seconds)
machine: must succeed: sleep 10
machine # [ 269.410951] dbus-daemon[640]: [system] Activating via systemd: service name='org.freedesktop.locale1' unit='dbus-org.freedesktop.locale1.service' requested by ':1.9' (uid=1000 pid=3160 comm="/nix/store/5fjs49rjk4127n6wvi5c3y962din63qk-niri-a")
machine # [ 269.568932] systemd[1]: Starting Locale Service...
machine # [ 270.528679] systemd[1]: Started Locale Service.
machine # [ 270.546900] dbus-daemon[640]: [system] Successfully activated service 'org.freedesktop.locale1'
machine: (finished: must succeed: sleep 10, in 10.27 seconds)
machine: must succeed: cat /tmp/niri-after.log
machine: (finished: must succeed: cat /tmp/niri-after.log, in 0.13 seconds)
2026-08-27T14:30:46.511246Z  INFO niri: starting version 26.04 (v26.04-86-gecb95377-modified)
2026-08-27T14:30:47.000341Z DEBUG niri_config: loaded config from "/nix/store/gmpbc87798p6hxz382wk644jsld48ilh-niri-vm-test.kdl"
2026-08-27T14:30:48.150376Z  INFO niri::backend::tty: using as the render node: "/dev/dri/renderD128"
2026-08-27T14:30:49.532288Z DEBUG niri::backend::tty: adding device: 57856 "/dev/dri/card0"
2026-08-27T14:30:49.536540Z DEBUG niri::backend::tty: this is the primary node
2026-08-27T14:30:49.552457Z  WARN smithay::backend::drm::device::fd: Unable to become drm master, assuming unprivileged mode
2026-08-27T14:30:50.643178Z DEBUG niri::backend::tty: got render node: renderD128
2026-08-27T14:30:50.646719Z DEBUG niri::backend::tty: initializing the primary renderer
2026-08-27T14:30:50.661624Z  WARN smithay::backend::egl::context: ignoring requested context priority, EGL_IMG_context_priority not supported priority=High
2026-08-27T14:30:51.970363Z DEBUG niri::backend::tty: device changed: 57856
2026-08-27T14:30:52.046259Z DEBUG niri::backend::tty: new connector: Virtual-1 "Red Hat, Inc. QEMU Monitor Unknown"
2026-08-27T14:30:52.091950Z DEBUG niri::backend::tty: connecting connector: Virtual-1
2026-08-27T14:30:52.099157Z DEBUG niri::backend::tty: picking mode: Mode { name: "1280x800", clock: 107300, size: (1280, 800), hsync: (1600, 1638, 1728), vsync: (804, 808, 828), hskew: 0, vscan: 0, vrefresh: 75, mode_type: ModeTypeFlags(PREFERRED | DRIVER) }
2026-08-27T14:30:52.110910Z DEBUG niri::backend::tty: failed to set HDR properties: couldn't find property: "HDR_OUTPUT_METADATA"
2026-08-27T14:30:52.122125Z DEBUG niri::backend::tty: couldn't get gamma properties: missing GAMMA_LUT property
2026-08-27T14:30:52.130830Z DEBUG niri::backend::tty: couldn't reset gamma: setting gamma is not supported
2026-08-27T14:30:52.238188Z  WARN smithay::backend::drm::compositor: Preferred format AB30 not available: NoSupportedPlaneFormat
2026-08-27T14:30:52.472161Z DEBUG niri::niri: putting output Virtual-1 at x=0 y=0
2026-08-27T14:30:52.570659Z  INFO niri: listening on Wayland socket: wayland-1
2026-08-27T14:30:52.573299Z  INFO niri: IPC listening on: /run/user/1000/niri.wayland-1.3160.sock
2026-08-27T14:30:52.608617Z  WARN niri::utils::xwayland::satellite: error spawning xwayland-satellite at "xwayland-satellite", disabling integration: No such file or directory (os error 2)
2026-08-27T14:30:53.675144Z  WARN niri::cursor: error loading xcursor default@24: no default icon
machine: must succeed: for file in /sys/class/drm/card0-Virtual-1/status /sys/class/drm/card0-Virtual-1/enabled /sys/class/drm/card0-Virtual-1/modes; do echo $file; cat $file; done
machine: (finished: must succeed: for file in /sys/class/drm/card0-Virtual-1/status /sys/class/drm/card0-Virtual-1/enabled /sys/class/drm/card0-Virtual-1/modes; do echo $file; cat $file; done, in 0.20 seconds)
/sys/class/drm/card0-Virtual-1/status
connected
/sys/class/drm/card0-Virtual-1/enabled
enabled
/sys/class/drm/card0-Virtual-1/modes
1280x800
5120x2160
4096x2160
3840x2160
3840x2160
3840x2160
1920x1440
2560x1080
1856x1392
1792x1344
2048x1152
1920x1200
1920x1080
1920x1080
1600x1200
1680x1050
1400x1050
1280x1024
1440x900
1280x960
1360x768
1280x768
1024x768
800x600
640x480
640x480
machine: must succeed: su - alice -c 'NIRI_SOCKET=/run/user/1000/niri.wayland-1.3160.sock /nix/store/m8krb6xhdqnpmxa44ily5g7hdnz13hzf-niri-before-dd75865f/bin/niri msg outputs' || true
machine # [ 277.448898] su[3226]: Successful su for alice by root
machine # [ 277.531678] su[3226]: pam_unix(su:session): session opened for user alice(uid=1000) by (uid=0)
machine # [ 278.049843] su[3226]: pam_unix(su:session): session closed for user alice
machine: (finished: must succeed: su - alice -c 'NIRI_SOCKET=/run/user/1000/niri.wayland-1.3160.sock /nix/store/m8krb6xhdqnpmxa44ily5g7hdnz13hzf-niri-before-dd75865f/bin/niri msg outputs' || true, in 0.83 seconds)
Output "Red Hat, Inc. QEMU Monitor Unknown" (Virtual-1)
Current mode: 1280x800 @ 74.994 Hz (preferred)
Variable refresh rate: not supported
Physical size: 320x200 mm
Logical position: 0, 0
Logical size: 1280x800
Scale: 1
Transform: normal
Available modes:
1280x800@74.994 (current, preferred)
5120x2160@50.000
4096x2160@50.000
3840x2160@60.000
3840x2160@59.940
3840x2160@50.000
1920x1440@60.000
2560x1080@50.000
1856x1392@59.995
1792x1344@60.000
2048x1152@60.000
1920x1200@59.885
1920x1080@60.000
1920x1080@50.000
1600x1200@60.000
1680x1050@59.954
1400x1050@59.978
1280x1024@60.020
1440x900@59.887
1280x960@60.000
1360x768@60.015
1280x768@59.870
1024x768@60.004
800x600@60.317
640x480@60.000
640x480@59.940
machine: waiting for success: su - alice -c 'NIRI_SOCKET=/run/user/1000/niri.wayland-1.3160.sock /nix/store/m8krb6xhdqnpmxa44ily5g7hdnz13hzf-niri-before-dd75865f/bin/niri msg outputs' | grep -q 'Virtual-1'
machine # [ 278.279984] su[3234]: Successful su for alice by root
machine # [ 278.361572] su[3234]: pam_unix(su:session): session opened for user alice(uid=1000) by (uid=0)
machine # [ 278.786495] su[3234]: pam_unix(su:session): session closed for user alice
machine: (finished: waiting for success: su - alice -c 'NIRI_SOCKET=/run/user/1000/niri.wayland-1.3160.sock /nix/store/m8krb6xhdqnpmxa44ily5g7hdnz13hzf-niri-before-dd75865f/bin/niri msg outputs' | grep -q 'Virtual-1', in 0.74 seconds)
machine: must succeed: su - alice -c 'NIRI_SOCKET=/run/user/1000/niri.wayland-1.3160.sock /nix/store/m8krb6xhdqnpmxa44ily5g7hdnz13hzf-niri-before-dd75865f/bin/niri msg outputs'
machine # [ 278.981390] su[3239]: Successful su for alice by root
machine # [ 279.070934] su[3239]: pam_unix(su:session): session opened for user alice(uid=1000) by (uid=0)
machine # [ 279.538369] su[3239]: pam_unix(su:session): session closed for user alice
machine: (finished: must succeed: su - alice -c 'NIRI_SOCKET=/run/user/1000/niri.wayland-1.3160.sock /nix/store/m8krb6xhdqnpmxa44ily5g7hdnz13hzf-niri-before-dd75865f/bin/niri msg outputs', in 0.75 seconds)
Output "Red Hat, Inc. QEMU Monitor Unknown" (Virtual-1)
Current mode: 1280x800 @ 74.994 Hz (preferred)
Variable refresh rate: not supported
Physical size: 320x200 mm
Logical position: 0, 0
Logical size: 1280x800
Scale: 1
Transform: normal
Available modes:
1280x800@74.994 (current, preferred)
5120x2160@50.000
4096x2160@50.000
3840x2160@60.000
3840x2160@59.940
3840x2160@50.000
1920x1440@60.000
2560x1080@50.000
1856x1392@59.995
1792x1344@60.000
2048x1152@60.000
1920x1200@59.885
1920x1080@60.000
1920x1080@50.000
1600x1200@60.000
1680x1050@59.954
1400x1050@59.978
1280x1024@60.020
1440x900@59.887
1280x960@60.000
1360x768@60.015
1280x768@59.870
1024x768@60.004
800x600@60.317
640x480@60.000
640x480@59.940
machine: must succeed: ls -l /dev/dri; id alice
machine: (finished: must succeed: ls -l /dev/dri; id alice, in 0.29 seconds)
total 0
drwxr-xr-x 2 root root 80 Aug 27 14:27 by-path
crw-rw----+ 1 root video 226, 0 Aug 27 14:27 card0
crw-rw-rw- 1 root render 226, 128 Aug 27 14:27 renderD128
uid=1000(alice) gid=100(users) groups=100(users),26(video),174(input),303(render),997(seat)
machine: must succeed: su - alice -c 'test -r /dev/dri/renderD128 -a -w /dev/dri/renderD128'
machine # [ 280.024331] su[3249]: Successful su for alice by root
machine # [ 280.106529] su[3249]: pam_unix(su:session): session opened for user alice(uid=1000) by (uid=0)
machine # [ 280.246005] su[3249]: pam_unix(su:session): session closed for user alice
machine: (finished: must succeed: su - alice -c 'test -r /dev/dri/renderD128 -a -w /dev/dri/renderD128', in 0.42 seconds)
machine: must succeed: su - alice -c 'XDG_RUNTIME_DIR=/run/user/1000 NIRI_SOCKET=/run/user/1000/niri.wayland-1.3160.sock DMABUF_DEVICE=/dev/dri/card0 NIRI_REPRO_LOG=/tmp/niri-after.log /nix/store/wlvm6j10hypf096yy729hzdx46vihdpb-niri-layer-output-reproducer-tools/bin/collect-dmabuf-tty after ecb953778c1031d0492cc6bc65429449cb32163c /nix/store/5fjs49rjk4127n6wvi5c3y962din63qk-niri-after-ecb95377/bin/niri /nix/store/y7s3kq0b270bl7qmc9l8b6x53lxhp2r5-niri-layer-output-dmabuf-reproducer/bin/niri-layer-output-dmabuf-reproducer /nix/store/wlvm6j10hypf096yy729hzdx46vihdpb-niri-layer-output-reproducer-tools/bin/sample-drm Virtual-1 /tmp/after.csv 10 2 2'
machine # [ 280.473189] su[3258]: Successful su for alice by root
machine # [ 280.556956] su[3258]: pam_unix(su:session): session opened for user alice(uid=1000) by (uid=0)
machine # no DRM client counters found for PID 3160
machine # no DRM client counters found for PID 3267
machine # [ 300.656780] systemd[1]: systemd-localed.service: Deactivated successfully.
machine # no DRM client counters found for PID 3160
machine # no DRM client counters found for PID 3484
machine # no DRM client counters found for PID 3160
machine # no DRM client counters found for PID 3650
machine # no DRM client counters found for PID 3160
machine # no DRM client counters found for PID 3811
machine # no DRM client counters found for PID 3160
machine # no DRM client counters found for PID 3972
machine # no DRM client counters found for PID 3160
machine # no DRM client counters found for PID 4133
machine # no DRM client counters found for PID 3160
machine # no DRM client counters found for PID 4296
machine # no DRM client counters found for PID 3160
machine # no DRM client counters found for PID 4457
machine # no DRM client counters found for PID 3160
machine # no DRM client counters found for PID 4618
machine # no DRM client counters found for PID 3160
machine # no DRM client counters found for PID 4779
machine # no DRM client counters found for PID 3160
machine # no DRM client counters found for PID 4940
machine # [ 416.721708] su[3258]: pam_unix(su:session): session closed for user alice
machine: (finished: must succeed: su - alice -c 'XDG_RUNTIME_DIR=/run/user/1000 NIRI_SOCKET=/run/user/1000/niri.wayland-1.3160.sock DMABUF_DEVICE=/dev/dri/card0 NIRI_REPRO_LOG=/tmp/niri-after.log /nix/store/wlvm6j10hypf096yy729hzdx46vihdpb-niri-layer-output-reproducer-tools/bin/collect-dmabuf-tty after ecb953778c1031d0492cc6bc65429449cb32163c /nix/store/5fjs49rjk4127n6wvi5c3y962din63qk-niri-after-ecb95377/bin/niri /nix/store/y7s3kq0b270bl7qmc9l8b6x53lxhp2r5-niri-layer-output-dmabuf-reproducer/bin/niri-layer-output-dmabuf-reproducer /nix/store/wlvm6j10hypf096yy729hzdx46vihdpb-niri-layer-output-reproducer-tools/bin/sample-drm Virtual-1 /tmp/after.csv 10 2 2', in 136.51 seconds)
machine: must succeed: cat /tmp/after.csv
machine: (finished: must succeed: cat /tmp/after.csv, in 0.25 seconds)
variant,revision,cycle,niri_total_kib,niri_shared_kib,niri_resident_kib,niri_rss_kib,client_total_kib,client_shared_kib,client_resident_kib,client_rss_kib,visible_layers,client_buffer_bytes,stale_mapped_layers
after,ecb953778c1031d0492cc6bc65429449cb32163c,0,0,0,0,133008,0,0,0,32996,1,16384000,0
after,ecb953778c1031d0492cc6bc65429449cb32163c,1,0,0,0,133324,0,0,0,32576,1,16384000,0
after,ecb953778c1031d0492cc6bc65429449cb32163c,2,0,0,0,133324,0,0,0,32692,1,16384000,0
after,ecb953778c1031d0492cc6bc65429449cb32163c,3,0,0,0,133332,0,0,0,32724,1,16384000,0
after,ecb953778c1031d0492cc6bc65429449cb32163c,4,0,0,0,133332,0,0,0,32712,1,16384000,0
after,ecb953778c1031d0492cc6bc65429449cb32163c,5,0,0,0,133332,0,0,0,32788,1,16384000,0
after,ecb953778c1031d0492cc6bc65429449cb32163c,6,0,0,0,133332,0,0,0,32596,1,16384000,0
after,ecb953778c1031d0492cc6bc65429449cb32163c,7,0,0,0,133332,0,0,0,32616,1,16384000,0
after,ecb953778c1031d0492cc6bc65429449cb32163c,8,0,0,0,133332,0,0,0,32704,1,16384000,0
after,ecb953778c1031d0492cc6bc65429449cb32163c,9,0,0,0,133332,0,0,0,32712,1,16384000,0
after,ecb953778c1031d0492cc6bc65429449cb32163c,10,0,0,0,133332,0,0,0,32860,1,16384000,0
machine: must succeed: cat /tmp/before.csv
machine: (finished: must succeed: cat /tmp/before.csv, in 0.16 seconds)
machine: must succeed: cat /tmp/after.csv
machine: (finished: must succeed: cat /tmp/after.csv, in 0.15 seconds)
machine: must succeed: cat /tmp/before-niri-fdinfo-start.txt
machine: (finished: must succeed: cat /tmp/before-niri-fdinfo-start.txt, in 0.18 seconds)
machine: must succeed: cat /tmp/before-niri-fdinfo-end.txt
machine: (finished: must succeed: cat /tmp/before-niri-fdinfo-end.txt, in 0.16 seconds)
machine: must succeed: cat /tmp/after-niri-fdinfo-start.txt
machine: (finished: must succeed: cat /tmp/after-niri-fdinfo-start.txt, in 0.15 seconds)
machine: must succeed: cat /tmp/after-niri-fdinfo-end.txt
machine: (finished: must succeed: cat /tmp/after-niri-fdinfo-end.txt, in 0.15 seconds)
machine: must succeed: cat /tmp/before-final-layers.txt
machine: (finished: must succeed: cat /tmp/before-final-layers.txt, in 0.16 seconds)
machine: must succeed: cat /tmp/after-final-layers.txt
machine # [ 418.170633] systemd[963]: Created slice User Background Tasks Slice.
machine # [ 418.222588] systemd[963]: Starting Cleanup of User's Temporary Files and Directories...
machine: (finished: must succeed: cat /tmp/after-final-layers.txt, in 0.22 seconds)
machine: must succeed: cat /tmp/before-client-logs.txt
machine # [ 418.469788] systemd[963]: Finished Cleanup of User's Temporary Files and Directories.
machine: (finished: must succeed: cat /tmp/before-client-logs.txt, in 0.23 seconds)
machine: must succeed: cat /tmp/after-client-logs.txt
machine: (finished: must succeed: cat /tmp/after-client-logs.txt, in 0.15 seconds)
machine: must succeed: cat /tmp/niri-before.log
machine: (finished: must succeed: cat /tmp/niri-before.log, in 0.16 seconds)
machine: must succeed: cat /tmp/niri-after.log
machine: (finished: must succeed: cat /tmp/niri-after.log, in 0.15 seconds)
machine: must succeed: pkill -TERM -u alice -x niri
machine: (finished: must succeed: pkill -TERM -u alice -x niri, in 0.28 seconds)
machine: waiting for failure: pgrep -u alice -x niri
machine # [ 419.556164] seatd[639]: 00:06:03.461 [INFO] [seatd/seat.c:158] No clients on seat0 to activate
machine # [ 419.572367] seatd[639]: 00:06:03.482 [INFO] [seatd/seat.c:290] Removed client 1 from seat0
machine # [ 419.577162] seatd[639]: 00:06:03.484 [INFO] [seatd/client.c:496] Client disconnected
machine: (finished: waiting for failure: pgrep -u alice -x niri, in 1.74 seconds)
machine: waiting for failure: find /run/user/1000 -maxdepth 1 -type s -name 'niri.*.sock' | grep -q .
machine: (finished: waiting for failure: find /run/user/1000 -maxdepth 1 -type s -name 'niri.*.sock' | grep -q ., in 0.23 seconds)
(finished: run the VM test script, in 423.52 seconds)
test script finished in 423.81s
cleanup
kill machine (pid 9)
qemu-system-x86_64: terminating on signal 15 from pid 6 (/nix/store/qwb5ygz9k8gs5ql9bpxbrsrv12r1icgm-python3-3.13.12/bin/python3.13)
kill vlan (pid 7)
(finished: cleanup, in 0.01 seconds)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment