# Force-fullscreen output teardown regression Run only in the private headless session created by this fixture. It never changes the live desktop's inputs, outputs or plugins. Requires the custom stitched-output Wayfire build, Alacritty, D-Bus, C++ compiler and Wayfire headers. As root, prepare the fixture for the desktop user: ```sh python3 prepare.py --user ecsfwxvr ``` The command prints a stage directory under `/var/tmp`. Run the staged script as the ordinary user, replacing `` with that exact path: ```sh runuser -u ecsfwxvr -- env -u XDG_RUNTIME_DIR dbus-run-session -- \ python3 /reproduce.py --plugins /plugins \ --mode forced --cycle --clients 3 --cycles 3 --order 213 --return-order 321 runuser -u ecsfwxvr -- env -u XDG_RUNTIME_DIR dbus-run-session -- \ python3 /reproduce.py --plugins /plugins \ --mode forced --cycle --clients 3 --inhibit --pause 0 runuser -u ecsfwxvr -- env -u XDG_RUNTIME_DIR dbus-run-session -- \ python3 /reproduce.py --plugins /plugins \ --mode forced --clients 3 --unload --inhibit ``` `--order` and `--return-order` each accept any permutation of `123`. `--pause 0` removes the inter-event delay to exercise rapid power switching. `--inhibit` sets the same output inhibition flag used by session locking; it does not start a real lock screen. `--mode window` and `--mode native` provide controls. To test a candidate without installation, pass `--plugin /path/to/libforce-fullscreen.so` to `prepare.py`. Cycle tests verify that the compositor and clients remain alive with all three outputs gone, fullscreen transforms are removed, the combined output returns, and the original windows are mapped onto it. Multiple cycles re-enable forced fullscreen to exercise newly created per-output plugin instances. Unload tests verify plugin cleanup, reload and subsequent fullscreen activation. The fixture prints its private runtime path containing logs, view snapshots and `result.json`. The original affected plugin crashes on the first removal with forced fullscreen; the iterator-only fix leaves stale transforms when output actions are inhibited. The packaged fix covers both cleanup paths.