Skip to content

Instantly share code, notes, and snippets.

@vwochnik
Last active January 30, 2022 12:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save vwochnik/a6c88f1e983f2aac131feb32a1902588 to your computer and use it in GitHub Desktop.
Save vwochnik/a6c88f1e983f2aac131feb32a1902588 to your computer and use it in GitHub Desktop.
Alarm clock in bash
#!/bin/bash
# add to sudoers
# username ALL = (root) NOPASSWD: /usr/sbin/rtcwake
DATE="$@"
SONG="$HOME/.usr/share/alarm.mp3"
if ! command -v mplayer &>/dev/null
then
echo "Can't play alarm. MPlayer needs to be installed."
exit 1
fi
if ! command -v rtcwake &>/dev/null
then
echo "Can't suspend machine. RTCwake needs to be installed."
exit 1
fi
if ! date -d "$DATE" >/dev/null 2>&1
then
echo "Invalid date: $DATE"
echo "Usage: $0 tomorrow 8:00"
exit 1
fi
CURRENT_EPOCH=$(date +%s)
TARGET_EPOCH=$(date -d "$DATE" +%s)
if (( $CURRENT_EPOCH > $TARGET_EPOCH ))
then
echo "Past date: $DATE"
exit 1
fi
dbus-send --type=method_call --dest=org.gnome.ScreenSaver /org/gnome/ScreenSaver org.gnome.ScreenSaver.Lock
sudo rtcwake -m mem -t $TARGET_EPOCH
CURRENT_EPOCH=$(date +%s)
while (( $CURRENT_EPOCH < $TARGET_EPOCH ))
do
SECONDS=$(( $TARGET_EPOCH - $CURRENT_EPOCH ))
if (( $SECONDS > 5 ))
then
SECONDS=5
fi
sleep $SECONDS
CURRENT_EPOCH=$(date +%s)
done
echo "Press ctrl+C to end alarm"
mplayer -loop 0 "$SONG" &>/dev/null
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment