Skip to content

fix(monitor): detect stranded outputs with no active scanout in omarchy-hyprland-monitor-modeless - #9110

Open
harshithnadig wants to merge 1 commit into
omacom:quattrofrom
harshithnadig:fix/monitor-modeless-scanout-check
Open

fix(monitor): detect stranded outputs with no active scanout in omarchy-hyprland-monitor-modeless#9110
harshithnadig wants to merge 1 commit into
omacom:quattrofrom
harshithnadig:fix/monitor-modeless-scanout-check

Conversation

@harshithnadig

Copy link
Copy Markdown

Problem

In #9078, omarchy-hyprland-monitor-modeless only checks if .width == 0 or .height == 0.

When an external output drops link during an atomic commit or loses its CRTC, it reports a valid mode in hyprctl monitors all -j but is absent from actively scanned-out displays in hyprctl monitors -j. Because the query returned 1 ("recovered"), the recovery loop in omarchy-hyprland-monitor-watch exited immediately, leaving the monitor dark indefinitely.

Solution

Compare actively scanned-out outputs against hyprctl monitors all to detect enabled non-mirrored outputs that have dropped scanout alongside 0x0 modes.

Fixes #9078

…hy-hyprland-monitor-modeless

'omarchy-hyprland-monitor-modeless' only checked whether an enabled monitor
had .width == 0 or .height == 0. When an output drops link during an atomic
commit (or loses its CRTC after DPMS off), it retains a valid mode in
'hyprctl monitors all' but is unassigned and absent from active scanout
('hyprctl monitors'), causing the recovery loop in 'monitor-watch' to abort
prematurely and leave the screen black.

Compare active scanout outputs with all connected outputs to detect
unassigned/stranded enabled monitors alongside 0x0 mode monitors.

Fixes omacom#9078
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

omarchy-hyprland-monitor-modeless tests the wrong condition, so an output that is dark but has a valid mode never gets recovered

1 participant