Here is my rough wrapper script:
#!/bin/sh
CALENDAR_CMD=/usr/bin/gpe-calendar
ALERT_SND=/opt/kdepim-2.2.7/kdepim/korganizer/koalarm.wav
PLAY_CMD=/usr/bin/play
PLAY_REPEAT=3
REPEAT_PAUSE=3
AT_SPOOL=/var/spool/at
CALL_CALENDAR=$(pwd)/$0
$CALENDAR_CMD
COUNTER=1
ALERT_CMD="$PLAY_CMD $ALERT_SND"
while [ $COUNTER -lt $PLAY_REPEAT ]; do
ALERT_CMD="$ALERT_CMD && sleep $REPEAT_PAUSE && $PLAY_CMD $ALERT_SND"
let COUNTER=COUNTER+1
done
ATFILES=$(find $AT_SPOOL/ -name "*-0")
for FN in $ATFILES; do
if [ -n "$(cat $FN | grep gpe-calendar)" ]; then
AFN=$(echo $FN | awk '{ print substr($1,0,length($1)-2); }')
echo "#!/bin/sh" > $AFN
echo "" >> $AFN
echo "export DISPLAY=:0" >> $AFN
echo "$ALERT_CMD &> /dev/null &" >> $AFN
echo "sleep 3" >> $AFN
echo "$CALL_CALENDAR &> /dev/null &" >> $AFN
echo "" >> $AFN
echo 'rm -f $0' >> $AFN
rm $FN
chmod 755 $AFN
echo >$AT_SPOOL/trigger
fi
done
Just adjust the settings at top to suit yourself, and run this instead of gpe-calendar directly, and you have alarms!
What it does: runs gpe-calendar, then when finished, tidies up any atd scripts created (that are incomplete and won't work). It replaces these with ones that play a sound and open the calendar. Obviously you can change this to do something else if you prefer. Watch out as I discovered atd silently fails unless output is redirected and commands are disconnected (' &> /dev/null &' works every time).
Disclaimer: only tested with latest gpe-calendar in Xromer's feed (oldbetas), probably won't work with other versions, use at your own risk, etc. Although the worst that can happen is that alarms still don't work...
Edit: added an extra sleep line which seems to help when running calendar on wakeup from suspend...