From 7b395da7de8b26e1e8673e1b7fe628f6ef6e998f Mon Sep 17 00:00:00 2001 From: Noah Date: Thu, 3 Sep 2026 14:25:24 -0600 Subject: [PATCH] qemu: tee the UI log to the console A scenario driving the VM from outside can only see the console, and the UI's own log was going to a file inside the guest -- reachable only after the process exited. That made a whole class of question unanswerable while the UI was still running: what the UI thought it was doing at the moment a screenshot looked wrong. It paid for itself immediately: a dashboard fullscreen that kept reverting was a full UI rebuild firing 553 ms after the tap, which the console showed outright (flare-edge: the applier's first-tick rebuild). Co-Authored-By: Claude Opus 5 (1M context) Claude-Session: https://claude.ai/code/session_01T2D2KtdgwbhbF6Mo64eUrn --- qemu/rootfs/sbin/init | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/qemu/rootfs/sbin/init b/qemu/rootfs/sbin/init index 600e2fe..af442a4 100755 --- a/qemu/rootfs/sbin/init +++ b/qemu/rootfs/sbin/init @@ -106,7 +106,11 @@ if [ -x /usr/bin/warden-ui ] && [ -c /dev/fb0 ]; then # is one grep away for any scenario driving the VM from outside, and the # signal or status that caused it is on the line. ( - /usr/bin/warden-ui > /tmp/warden-ui.log 2>&1 + # tee, not a plain redirect: the UI's own log (LV_LOG_USER and friends) + # is the most useful thing there is when a scenario does not do what it + # should, and a scenario driving the VM from outside can only see the + # CONSOLE. The file is kept as well so the exit dump below still works. + /usr/bin/warden-ui 2>&1 | tee /tmp/warden-ui.log rc=$? echo "init: warden-ui EXITED rc=$rc" # 128+n is a signal death (139 = SIGSEGV); dump the tail so the