Considerando o seu requisito de executar um trabalho quando você faz login no Unity e não em outros logons, um trabalho de sessão Upstart parece perfeito.
Você deve ter notado: os processos executados após o login na GUI estão sob um segundo initprocesso. Esse inité um init Upstart adequado e você pode iniciar e interromper trabalhos de sessão com base nos eventos emitidos por ele. Não são necessários privilégios de root. Melhor ainda (ou pior, dependendo da perspectiva), isso ainda não é completamente suportado por sistemas sem cabeça. Um login SSH não iniciou o init do usuário a partir de um teste rápido que eu fiz agora.
Para criar um trabalho de sessão, crie um novo .confarquivo ~/.config/upstart. Esse é o diretório principal padrão dos trabalhos de sessão Upstart ( $XDG_CONFIG_HOME/upstart), crie-o se não existir. Aqui está um exemplo de trabalho:
tee ~/.config/upstart/myjob.conf <<EOF
description "My job"
start on desktop-start
stop on desktop-end
script
firefox 'http://upstart.ubuntu.com/cookbook/#session-job'
end script
EOF
Você pode controlá-lo manualmente:
start myjob
# or
initctl start myjob
O servicecomando é usado para controlar os trabalhos do sistema (aqueles em /etc/init.dou /etc/init). Para controlar trabalhos de sessão, é necessário usar o initctlcomando, usado para interagir com o Upstart.
Veja man upstart-eventspara mais eventos que você pode usar.