You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Multi-monitor mode: independent (default) or mirror. New MULTI_MONITOR_MODE config key. independent keeps the existing behavior —
each output runs its own driver and randomizes its own effect/logo. mirror
makes every output show the same effect: the launcher rolls one RNG seed
(and, when RANDOM_LOGO is on, picks one shared logo) and passes them to every
driver via argv (--seed/--logo), since niri msg action spawn runs in the
compositor's environment and would not inherit exported vars. Each driver seeds tte with SEED + window, where window = wall-clock-seconds / MIRROR_INTERVAL
(default 8s) — deriving the effect window from the shared wall clock, not a
per-process counter, is what keeps the monitors on the same effect at the
same time even though the surfaces spawn at different moments and animate for
different durations. tte's deterministic RNG then renders identical
animations on matched-resolution monitors; it degrades to "same effect,
different layout" when resolutions differ. Surfaced in the Noctalia plugin as a Multi-monitor mode dropdown in the Effects section. Only applies with more
than one output; single-monitor setups are unaffected.
Bar widget: left-click is now a smart toggle. Clicking the Noctalia bar
widget previously always launched the screensaver; it now stops it if it's
already running and launches it otherwise, so it no longer has to be killed
from a menu or the CLI. Backed by a new quiet niri-screensaver-launch is-running command (exit 0 if running, 1 if not; also forwarded by niri-screensaver-ctl) that the widget probes on click. Right-click still
opens the full Trigger / Stop / Toggle / Settings menu.
Bar widget: Quit and Reload menu items. The right-click menu gains Quit (stop the screensaver and disable it, so idle won't relaunch it
until re-enabled) and Reload (stop the screensaver, restart the Noctalia
shell so the systray reappears, and leave the screensaver enabled — a one-shot
fresh start, run detached so it survives qs kill).
Fixed
Multi-monitor: surfaces no longer collapse onto one output under focus-follows-mouse.niri-screensaver-launch previously spread one
Alacritty per output by cycling keyboard focus
(niri msg action focus-monitor-next) between spawns. With niri's input { focus-follows-mouse }, window placement follows the pointer, not
keyboard focus, and the pointer isn't parked until after the spawn loop — so
every surface opened on the cursor's monitor and the others stayed blank. The
launcher now enumerates outputs once up front and pins each spawned surface to
its target output by window id
(niri msg action move-window-to-monitor --id <id> <output>), which is
independent of pointer/keyboard focus. Outputs are enumerated a single time so
N>2 monitors and mid-launch hotplug are handled deterministically. A new NIRI_SCREENSAVER_SPAWN_PIN_TIMEOUT_SECS env var (default 2) bounds how long
the launcher waits for each surface to appear before moving on. Thanks to @landryjeanluc for the report and root-cause analysis (#11).
Multi-monitor: dismissing one screen now wakes all of them. Each output
runs its own driver in its own terminal, and a keypress only reaches the
focused one — so on a multi-monitor setup, dismissing the active screen left
the others still running the screensaver. The driver now broadcasts a
terminate to its sibling instances on dismiss (dismiss_all → terminate_sibling_drivers, which SIGTERMs the other niri-screensaver run
processes via a /proc scan that skips its own PID). Siblings exit through
the normal signal path and do not re-broadcast, so there is no signal storm.
Surfaced once #11's fix made surfaces actually spread across outputs.