62 lines
1.2 KiB
Bash
Executable File
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
|