Você pode usar o diário de atividades para rastrear arquivos abertos. Não tenho certeza se existe algo para rastrear aplicativos abertos.
Esta é provavelmente uma solução desonesta e trabalhosa, mas você pode usar ícones da área de trabalho para executar os aplicativos usando scripts. No script, você pode adicionar uma linha a um arquivo de log.
Algo como ...
#!/bin/sh
echo 'date' "Firefox Started" >> /home/username/logs/apps-activity.log
firefox
echo 'date' "Firefox Stopped" >> /home/username/logs/apps-activity.log
Desculpe minhas habilidades bash ainda são bastante rudimentares, mas acho que você entendeu a ideia. Não é uma boa solução, mas talvez lhe dê algumas ideias. No que diz respeito ao uso do ps, cada aplicativo pode ter alguns processos envolvidos, então seria bastante complexo, acho que isso funcionaria corretamente.
Se usarmos o exemplo do firefox, recebo dois processos em execução quando uso o comando ps. Por exemplo.
$ ps aux | grep firefo[x]
username 5302 11.2 3.5 1391936 564016 ? Sl Jul08 553:26 /usr/bin/firefox.real
username 15351 0.8 0.2 482268 47040 ? Sl Jul09 29:21 /opt/firefox/plugin-container /usr/lib/flashplugin-nonfree/libflashplayer.so -greomni /opt/firefox/omni.ja -appomni /opt/firefox/browser/omni.ja -appdir /opt/firefox/browser 5302 true plugin