Three root causes prevented Electron frames from reaching the compositor:
1. --disable-gpu killed Chromium's rendering pipeline, preventing the
'paint' event from firing in offscreen mode. Replaced with
--use-gl=swiftshader so Chromium can composite internally while the
native wo_dmabuf module handles GPU buffer allocation separately.
2. DISPLAY=:0 with no X server caused Electron to fail silently on
pure Wayland sessions (Ly/logind). Replaced with
--ozone-platform=headless which lets Chromium's OSR pipeline work
without any display server connection.
3. WO_DRM_RENDER_NODE was never set, so the native wo_dmabuf.node
module always defaulted to /dev/dri/renderD128 regardless of which
GPU the compositor actually opened. Now resolved via sysfs
(card1 -> renderD128, card2 -> renderD129, etc.) and passed through
to Electron.
Also: retry EACCES/EPERM as transient during DRM device open (logind
session activation can lag behind libseat's is_active() flag on Ly).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>