In Alarms in Ubuntu, I published a script that lets you set an alarm from the command line, nice and easy. One thing was lacking though: visual notification of the alarm, so if you happen to be away from the computer when the alarm sounds you'll still see the dialog box. To achieve that I've modified the script, added an extra one, so here's the new and shinier alarm script.
First, the alarm script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#!/bin/bash if [ "$1" = '' ] then echo "No arguments for for alarm! Supply with time and optionally message example: alarm 7:45 alarm 19:59 alarm '3pm + 3 day' alarm 2010-09-18 alarm 'now + 5 minutes' 'go do ... stuff' " exit 1 else message="alarm time reached" [ "$2" = '' ] && message=$2 if `echo aplay -q /home/fake51/Downloads/gqold.wav \&\& ddisplay \"$message\" | at $1 2>\&1 > /dev/null` then exit 0 else echo "Setting alarm failed" exit 1 fi fi
Now, the major difference to the previous script lies in the script
accepting a message, setting a default message, and then using ddisplay
to display a message box.
Now, ddisplay is not a linux command - it's the second part of this scripting excercise.
1 2 3 4 5 6 7 8 9
#!/bin/bash if [ "$1" = "" ] then exit 1 else export DISPLAY=:0 zenity --warning --text="$1" exit 0 fi
This script makes use of the zenity command - which basically displays
GTK+ dialogs. The 'warning' option makes zenity display a normal dialog
box on top of everything, while the 'text' option is obviously the text
to display. Hence, pass a text string to ddisplay and you'll get a
dialog box with it - and that's what the first script does, thus playing
the alarm sound and popping up a dialog box when the sound is done.
The reason for adding the extra script is that 'at' schedules commands to run - so putting the dialog box code in a function in the alarm script isn't an option. One could try sticking the zenity command straight in the 'echo' piped to 'at', but to run 'zenity' from a script, you typically need to set a few environment variables (these are set if you run zenity straight from the command line, but not necessarily if run by cron or at). On the plus side, ddisplay can be reused for other scripts as well, simplifying them.