Teniendo en cuenta su requisito de ejecutar un trabajo cuando inicia sesión en Unity y no para otros inicios de sesión, un trabajo de sesión Upstart parece perfecto.
Es posible que lo hayas notado: los procesos que ejecutas después de un inicio de sesión de GUI están bajo un segundo initproceso. Este inites un inicio de inicio adecuado, y puede iniciar y detener trabajos de sesión en función de los eventos emitidos por él. No se necesitan privilegios de root en absoluto. Mejor aún (o peor dependiendo de la perspectiva), esto aún no es completamente compatible con los sistemas sin cabeza. Un inicio de sesión SSH no inició el inicio del usuario desde una prueba rápida que hice justo ahora.
Para crear un trabajo de sesión, cree un nuevo .confarchivo en ~/.config/upstart. Ese es el directorio primario predeterminado para los trabajos de sesión Upstart ( $XDG_CONFIG_HOME/upstart), créelo si no existe. Aquí hay un ejemplo de trabajo:
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
Puedes controlarlo manualmente:
start myjob
# or
initctl start myjob
Los servicecomandos se utilizan para controlar los trabajos del sistema (aquellos en /etc/init.do /etc/init). Para controlar los trabajos de sesión, es necesario usar el initctlcomando, que se usa para interactuar con Upstart.
Vea man upstart-eventspara más eventos que puede usar.