Skip to content

[Quattro] Idle screensaver-to-lock transition flashes the password prompt #9184

Description

@ClGratton

System details

Omarchy 4.0.1 Quattro, Hyprland 0.56.2, Quickshell 0.3.1, NVIDIA RTX 3080 Ti, and two 2560×1440 DisplayPort outputs at 180 Hz and 200 Hz.

Problem

At the idle lock deadline, Omarchy removed the fullscreen screensaver while the native session lock was still creating surfaces. Depending on output timing, this exposed either the password view or the desktop before real DPMS standby.

Cause

omarchy-system-lock removed the terminal screensaver before ext-session-lock reported the multi-output lock secure. When composed with the compositor-side dismissal monitor from #7780, disabling that monitor at the lock deadline could also emit an active-state callback and tear the screensaver down through the input-dismiss path.

Verified solution

PR #9632 adds an idle-only concealed lock entry point. The lock surfaces paint black without loading the wallpaper or authentication field, the pointer is hidden during mapping, and synthetic pointer initialization cannot reveal the view. The idle service keeps the fullscreen screensaver mapped over the desktop until ext-session-lock reports secure, then performs the existing lock cleanup and real delayed DPMS standby.

The verified local composition also rejects #7780's dismissal callback after the idle cycle enters locking.

Verification

Focused idle, lock, fingerprint, password-layout, and system-lock tests pass. On the dual-output hardware test, the normal splash transitioned into genuine monitor standby without a password or desktop flash. Wake restored the synchronized lock views.

Scope

This fix changes only the normal idle screensaver-to-lock handoff. Suspend and hibernate remain separate in #9231.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions