Alarms in Ubuntu: update

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.

social