Repository navigation
feat: add configurable session-lock backgrounds and unlock overlays - #163
Merged
Merged
Conversation
Owner
|
thanks! LGTM! |
bea4dev
marked this pull request as ready for review
October 29, 2026 07:27
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
I built the initial version for my own Quickshell lock screen: a live wallpaper, or a separate screensaver client, sits underneath the password form; after authentication, a shader reveals the unlocked desktop. This draft extracts the compositor support into an application-independent API on current main (
44e8ce9), extending the already merged output-overlay API from #120.API and behavior
COMPOSITOR.session.configureLockBackground({ windowIds, layerIds })selects exact current runtime IDs and returns the actual protocol lock state. Empty by default; no application IDs, layer namespaces, wallpaper engines, passwords or built-in wave shaders in native code.placement: "unlock"to output overlays. Require an active protocol lock, a snapshot input, nonpersistent mode and a native deadline <= 3000 ms. Ordinary overlays still close on lock; pause, DPMS and lifecycle/output changes close effects.The locker owns authentication and releases its protocol lock only after successful authentication and capture readiness. Capture must run from detached tasks so an awaited compositor callback cannot block the next frame. The configuration chooses the shader and reduced-motion fallback. The API itself never authenticates, locks or unlocks.
Security and scope
This is an explicit opt-in visibility policy for trusted configuration. Selecting an application's root exposes that client's pixels, including any UI it draws in that surface tree, while locked. It is not a separate sandbox. The normal blank fallback remains when no roots are selected or the locker disappears. The documentation covers the handoff and remaining review requirements.
No personal Quickshell configuration, IPC service, MateEngine integration, wallpaper decoder or player/library memory patches are included. Configuring by exact runtime IDs avoids hard-coding client names and unintentionally selecting another instance by application ID.
Validation and draft status
The earlier application-specific implementation was built and installed in my local desktop. After correcting a self-deadlock caused by holding the output LayerMap guard across a helper that acquires it again, the user confirmed the animated-wallpaper and screensaver modes worked. This draft keeps that guard released before rendering roots.
That local result does not validate this generic API or the port to current main. I inspected the connected source and diff, but have not run builds, tests, typechecking or graphical/authentication/DPMS checks for this version. A focused native ID-validation/runtime-ownership check is included but has not been run. The installed local compositor has not been replaced by this draft.
Opening for API/security review first. Pending checks include locker death and recovery, wrong/correct authentication, input isolation, startup lock, reload, VT pause, DPMS, multi-output/rotation/hotplug, selected background frame cadence, and snapshot cleanup.