Files
omarchycn/bin/omarchy-system-sleep-monitor
T

62 lines
1.2 KiB
Bash
Executable File

#!/bin/bash
# omarchy:summary=Monitor sleep preparation and lock before suspend
# omarchy:group=system
# omarchy:hidden=true
consume_sleep_events() {
local line sleep_lock
sleep_lock="$OMARCHY_PATH/bin/omarchy-system-sleep-lock"
while IFS= read -r line; do
if [[ $line == *"boolean true"* ]]; then
"$sleep_lock"
return 0
fi
done
}
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"
exec systemd-inhibit \
--what=sleep \
--mode=delay \
--who=Omarchy \
--why="Lock screen before suspend" \
"$sleep_monitor" --inhibited