fix(idle): #127 — input wakes the screen compositor-side; revert the clamshell skip
All checks were successful
Check / eval (push) Successful in 3m33s
All checks were successful
Check / eval (push) Successful in 3m33s
The idle brick was never DPMS. Hyprland ships misc:key_press_enables_dpms
and misc:mouse_move_enables_dpms OFF, so hypridle's on-resume was the ONLY
caller of `dpms on` in the session — an idle daemon with the display held
hostage behind it. hypridle then deadlocks on an unfixed upstream bug
(hyprwm/hypridle#171, "Disconnected from pollfd id 1", open since 2025-09,
absent from 0.1.7 and main) and hangs WITHOUT exiting, so Restart=always
never fires and systemd still reports it active (running). Blank + deadlock
= a black seat no keypress can escape. That was the brick: two mundane bugs,
not one exotic DRM state. 19 disconnects in 11 days on the dev box, incl.
the incident day; the compositor is healthy through all of them.
Both options on, so the wake lives in the compositor where no daemon can
lose it — a dead hypridle now costs auto-lock, not the machine. The #127
clamshell DPMS-off skip (060bf52) is therefore reverted: idle blanks again
in every dock/lid state, and the 27" panels stop being held lit all night
under a static lock screen. #135 (an option to opt back in) is retired
unbuilt — there is nothing left to opt into.
TEST B's first run was invalid and nearly bought the wrong answer: it ran
`hyprctl dispatch dpms off` by hand, which no wake path watches, so "input
did not wake it" was guaranteed on any hardware. The undocked control
returning the SAME result — where the theory demanded a difference — is what
exposed it. Driven through hypridle instead, input wakes it in all three
configurations, including clamshell-docked on the sole live output.
Filed from the diagnosis: #146 (hypridle dies silently, systemd calls it
healthy — the surviving bug) and #147 (a re-login leaves session units dead;
graphical-session.target never re-enters, which is why Waybar already runs
from exec-once).
V3 on the incident hardware (AMD dev box, clamshell): hypridle deliberately
stopped, `dpms off` -> keypress woke it in 6s; the identical test before the
options stayed black the full 45s. V1: nix flake check, checks.option-docs,
checks.clamshell-logind, checks.docking-ux, checks.display-profiles; read the
emitted hyprland.conf/hypridle.conf rather than the source.
V3 pending: the fix is proven via runtime `hyprctl keyword`, not yet from our
own Nix — HARDWARE-QUEUE re-checks it after nomarchy-home + relogin.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1097,6 +1097,20 @@ in
|
||||
# instead of compositor black — on light themes the black flash
|
||||
# reads as a glitch (item 28c, seen in the capture harness).
|
||||
background_color = rgb c.base;
|
||||
|
||||
# #127, and the whole answer to it. Hyprland ships both of these
|
||||
# OFF, so nothing in the compositor turned a blanked screen back
|
||||
# on: hypridle's on-resume was the ONLY caller of `dpms on` in the
|
||||
# session — an idle daemon as a single point of failure with the
|
||||
# display behind it. hypridle then deadlocks on an unfixed upstream
|
||||
# bug (hyprwm/hypridle#171: "Disconnected from pollfd id 1", open,
|
||||
# not in 0.1.7 or main) and hangs WITHOUT exiting, so Restart=always
|
||||
# never fires and systemd still reports it active. Blank + deadlock
|
||||
# = a black seat no keypress could escape. That was the brick.
|
||||
# These put the wake in the compositor, where no daemon can lose it;
|
||||
# a dead hypridle now costs auto-lock, not the machine.
|
||||
key_press_enables_dpms = lib.mkDefault true;
|
||||
mouse_move_enables_dpms = lib.mkDefault true;
|
||||
};
|
||||
|
||||
# First boot of every installed image was showing "Hyprland updated to
|
||||
|
||||
Reference in New Issue
Block a user