Hyprland lets any client take over a held lock, so a second shell started beside the desktop judged the real shell's live lock stranded, took it, and then exited, leaving the session behind the failsafe while the real shell still reported itself secure. Recovery now waits while any other Quickshell or hyprlock runs, and gives up if one never exits. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
20 lines
808 B
Bash
Executable File
20 lines
808 B
Bash
Executable File
#!/bin/bash
|
|
|
|
# omarchy:summary=Returns true when the compositor holds a session lock no other locker is alive to own
|
|
# omarchy:args=<own-pid>
|
|
# omarchy:hidden=true
|
|
|
|
# Hyprland lets any client take over a held lock (misc:allow_session_lock_restore),
|
|
# so a shell that recovers a lock it merely sees can take the live lock screen of
|
|
# another shell, and strand it when it exits. A lock is stranded only while no
|
|
# other Quickshell or hyprlock is running; until then the answer is undetermined,
|
|
# so the caller keeps asking until that locker exits or it gives up.
|
|
#
|
|
# Exits 0 stranded, 1 unlocked, 2 undetermined. The caller passes its own pid,
|
|
# as a crash re-execs the shell in place.
|
|
omarchy-hyprland-session-locked || exit
|
|
|
|
if pgrep -u "$UID" -x 'quickshell|qs|hyprlock' | grep -qvxF "$1"; then
|
|
exit 2
|
|
fi
|