mirror of
https://github.com/kuhyx/wake-alarm.git
synced 2026-07-04 15:43:07 +02:00
- install.sh: install sleep-hook.sh to systemd-sleep hooks (step 3) and shutdown-wrapper.sh to /usr/local/bin/shutdown (step 5) - shutdown-wrapper.sh: new script that intercepts shutdown calls and redirects to rtcwake -m disk on alarm nights (Mon/Fri/Sat/Sun), pass- through for reboots and cancel commands - sleep-hook.sh: new systemd-sleep hook that restarts wake-alarm.service for each logged-in user after hibernate resume - setup_midnight_shutdown.sh: check wake-alarm day; if yes set RTC alarm and hibernate, otherwise fall back to systemctl poweroff
30 lines
1.3 KiB
Bash
Executable File
30 lines
1.3 KiB
Bash
Executable File
#!/bin/bash
|
|
# systemd-sleep hook: restart wake-alarm.service after resume from hibernate.
|
|
#
|
|
# Installed to /usr/lib/systemd/system-sleep/wake-alarm.sh by install.sh.
|
|
#
|
|
# When the PC hibernates (rtcwake -m disk) and resumes the next morning,
|
|
# the user session is restored but wake-alarm.service is in a stopped state
|
|
# (it ran at login the previous evening and exited with Restart=no).
|
|
# This hook restarts it so the alarm fires on the correct alarm day.
|
|
|
|
if [[ "$1" != "post" ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
logger -t wake-alarm-hook "Woke from sleep (type=$2) — restarting wake-alarm.service for active sessions"
|
|
|
|
# Start wake-alarm.service for every logged-in user that has a running session
|
|
# bus. Works with systemd >= 219.
|
|
while IFS= read -r uid; do
|
|
runtime_dir="/run/user/$uid"
|
|
[[ -d "$runtime_dir" ]] || continue
|
|
username=$(id -nu "$uid" 2>/dev/null) || continue
|
|
logger -t wake-alarm-hook "Starting wake-alarm.service for user $username (uid=$uid)"
|
|
XDG_RUNTIME_DIR="$runtime_dir" \
|
|
DBUS_SESSION_BUS_ADDRESS="unix:path=${runtime_dir}/bus" \
|
|
runuser -u "$username" -- \
|
|
systemctl --user start wake-alarm.service 2>/dev/null \
|
|
|| logger -t wake-alarm-hook "Failed to start wake-alarm.service for $username (non-fatal)"
|
|
done < <(loginctl list-sessions --no-legend 2>/dev/null | awk '{print $2}' | sort -u)
|