Release sleep inhibitor after locking (#6436)

This commit is contained in:
David Heinemeier Hansson
2026-07-29 23:21:45 -04:00
committed by GitHub
parent 8554801537
commit e47d895ffe
2 changed files with 142 additions and 8 deletions
+36 -8
View File
@@ -4,8 +4,6 @@
# omarchy:group=system
# omarchy:hidden=true
monitor_command='exec dbus-monitor --system "type='\''signal'\'',sender='\''org.freedesktop.login1'\'',interface='\''org.freedesktop.login1.Manager'\'',member='\''PrepareForSleep'\''"'
consume_sleep_events() {
local line sleep_lock
sleep_lock="$OMARCHY_PATH/bin/omarchy-system-sleep-lock"
@@ -13,15 +11,45 @@ consume_sleep_events() {
while IFS= read -r line; do
if [[ $line == *"boolean true"* ]]; then
"$sleep_lock"
exit 0
return 0
fi
done
}
if [[ ${1:-} == "--consume" ]]; then
consume_sleep_events
exit 0
fi
monitor_sleep_events() {
local monitor_fd monitor_pid status
coproc SLEEP_EVENTS {
exec dbus-monitor --system \
"type='signal',sender='org.freedesktop.login1',interface='org.freedesktop.login1.Manager',member='PrepareForSleep'"
}
monitor_fd=${SLEEP_EVENTS[0]}
monitor_pid=$SLEEP_EVENTS_PID
cleanup_monitor() {
kill "$monitor_pid" 2>/dev/null || true
wait "$monitor_pid" 2>/dev/null || true
}
trap cleanup_monitor EXIT
consume_sleep_events <&"$monitor_fd"
status=$?
cleanup_monitor
trap - EXIT
return "$status"
}
case ${1:-} in
--consume)
consume_sleep_events
exit 0
;;
--inhibited)
monitor_sleep_events
exit 0
;;
esac
sleep_monitor="$OMARCHY_PATH/bin/omarchy-system-sleep-monitor"
@@ -30,4 +58,4 @@ exec systemd-inhibit \
--mode=delay \
--who=Omarchy \
--why="Lock screen before suspend" \
bash -lc "$monitor_command | \"$sleep_monitor\" --consume"
"$sleep_monitor" --inhibited