Repository navigation
Conversation
Mutter composites every frame Chromium presents, which runs on the CPU on non-GPU browsers. Openbox is a stacking, non-compositing WM that covers what the headful image needs: decorations, focus, stacking, and popup titlebars. Replace the WM readiness probe with an EWMH check on _NET_SUPPORTING_WM_CHECK so it works for any conforming WM. Paint the root window with a gradient before the WM starts, bounded by timeouts so a wedged X call cannot stall startup.
chruffins
marked this pull request as ready for review
October 16, 2026 22:48
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Swaps the headful X11 window manager from mutter to openbox.
Mutter composites every frame Chromium presents. On non-GPU browsers, that compositing runs on the CPU and adds significant overhead under rendering load. Openbox is a stacking, non-compositing WM that provides what the headful image needs (decorations, focus, stacking, popup titlebars) without compositing.
Benchmark
Measured on a private build of this change, not re-run on this repo's tree. 8 vCPU / 8 GiB / 2 GiB
/dev/shm/ 1920×1080,--disable-gpu --use-angle=swiftshader. Medians of 3 trials per arm (1 for idle), order-balanced, same image and flags in both arms. Per-process CPU from/proc/<pid>/stattick deltas at 1 Hz. All figures are percent of one CPU.Chromium's CPU and frame output are unchanged across arms, so this removes overhead without skipping work.
Changes
openboxinstead ofmutter. Addx11-utilsforxprop.kernel-lightopenbox theme andrc.xmlat/etc/xdg/openbox/. Titlebars are close-only. Minimize would unmap a popup with no taskbar to restore it.shared/set-desktop-background.sh) before the WM starts. Every stage is bounded bytimeout, so a wedged X call can't stall startup.x11.WaitForWindowManagerreads_NET_SUPPORTING_WM_CHECK(EWMH) instead of searching for a process name, so it works for any conforming WM.openapi.yaml, plus the matching description inoapi.go).Testing
go vet ./...andgo test -raceacross the server module, e2e excluded._NET_SUPPORTING_WM_CHECKis set on the root window, the background gradient samples at the expected corner colors (#123250,#1a4a79), and CDP/json/versionresponds.Known behavior differences
window.opensequences can open popups stacked under the opener. This is identical under mutter and predates this change.Note
Medium Risk
Changes the headful display boot sequence and window-manager behavior (CSD, resize reflow, live view CPU), though readiness is now WM-agnostic and startup paths are timeout-bounded.
Overview
Replaces mutter with openbox in the headful Chromium image to avoid CPU compositing overhead while keeping decorations, focus, and popup titlebars.
The image now installs openbox (plus
x11-utilsforxprop), shipskernel-lighttheme and/etc/xdg/openbox/rc.xml, and supervisord runsopenboxinstead of mutter. Before the WM starts, the wrapper runsset-desktop-background.shto paint the blue gradient on the X root; each stage istimeout-bounded so wedged X probes cannot block boot.x11.WaitForWindowManagerreplaces mutter-specific polling with an EWMH_NET_SUPPORTING_WM_CHECKprobe sochromium-launcherand the wrapper work with any conforming WM. Comments, e2e resize tests, and telemetry/OpenAPI examples are updated from mutter to openbox/generic “window manager”; unit tests coversupportingWindowIDparsing and stalled background-script probes.Reviewed by Cursor Bugbot for commit 3dc8a83. Configure here.