Se os programas NÃO forem executados em um terminal, por exemplo cron, você deve certificar-se de que determinadas variáveis de ambiente estejam configuradas em seu script antes de emitir comandos.
Também comandos devem ter o caminho completo ou seus caminhos devem ser definidos no PATH no seu script.
Eu criei este pequeno script de exemplo para mostrar uma notificação por 10 segundos quando o script é iniciado pelo cron:
$ ls -l DoSomething
-rwxrwxr-x 1 willem willem 286 May 31 12:12 DoSomething
$ crontab -l
# m h dom mon dow command
* * * * * /home/willem/DoSomething > /tmp/DoSomething.log 2> /tmp/DoSomething.err
$ cat DoSomething
#!/bin/bash
eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME xfce4-session)/environ)";
echo "Setting vars..."
export DISPLAY=:0
export XAUTHORITY=/home/willem/.Xauthority
echo "Calling notify..."
/usr/bin/notify-send "Hello, world !" -t 10000
echo "Done !"