Sua própria proposta não é ruim. Tal script poderia ser algo da forma
#!/bin/bash
# Get the program you wish to launch from arguments
PROGNAME="$1"
# Shift script arguments to use the remaining ones later
shift
# Check that a PROGNAME was provided
if [ -z "$PROGNAME" ]; then
echo "Usage: $0 <program> [program options]"
exit 1
fi
# Log in your home directory, one directory per program
LOGDIR="$HOME/logs/$PROGNAME"
# Create log directory if it doesn't exist yet
if [ ! -d "$LOGDIR" ]; then
mkdir -p "$LOGDIR"
fi
# Get the date now
DATE=$(date +'%Y%m%d%H%M%S')
# Start program with it's options and log into the logdir
eval "$PROGNAME" $@ >"${LOGDIR}/${PROGNAME}_${DATE}.log" 2>"${LOGDIR}/${PROGNAME}_${DATE}.err"
Agora você pode muito bem editar as entradas no menu de inicialização da área de trabalho para usar o wrapper sempre que iniciar um determinado programa.
Outra opção seria usar o sudo, que registra automaticamente no auth.log, mas o utiliza de tal forma que ele não lança os programas como root, ou seja:
sudo -u $USER firefox
que irá lançar o firefox como você mesmo, usando o sudo.
Por exemplo:
$ sudo -u $USER ksnapshot
# I kill the program
$ tail -1 /var/log/auth.log
Dec 28 08:20:07 jonah sudo: raphink : TTY=pts/1 ; PWD=/home/raphink ; USER=raphink ; COMMAND=/usr/bin/ksnapshot