web-dev-qa-db-fra.com

Comment exécuter un script sur la connexion / déconnexion d'Unity?

J'ai deux scripts - un pour monter des dossiers sur SSHFS - et un pour démonter.

Je voudrais lancer le script de montage lorsque mon bureau Ubuntu par défaut est lancé (après que je me suis connecté à la console graphique) - et le script de démontage lorsque je me "déconnecter ..." de la roue dentée en haut à droite de le bureau.

S'il vous plaît quelqu'un peut-il me dire comment y parvenir? Quels sont les hooks/standards les plus pratiques pour exécuter des commandes lors du lancement/de la sortie du bureau?

8
aSteve

La solution consistait à utiliser les tâches les plus récentes. J'avais besoin de deux tâches - une déclenchée lors de l'initialisation du poste de travail pour un utilisateur; la seconde lorsque la session des utilisateurs expire. Les deux scripts suivants fonctionnent pour moi sous Ubuntu 14.04.

Dans ~/.config/upstart/desktopOpen.conf

description "Desktop Open Task"
start on desktop-start
task
script
# Commands to mount sshfs go here as Shell-script.
end script

Dans ~/.config/upstart/desktopClose.conf

description "Desktop Close Task"
start on session-end
task
script
# Commands to unmount sshfs go here as Shell-script.
end script

Mes doigts se croisent pour dire que ces événements continueront de répondre aux exigences des futures versions d'Ubuntu. J'ai pensé que cela valait la peine de publier ma solution ici - au cas où elle serait utile à d'autres.

1
aSteve

Étant donné que vous devez exécuter un travail lorsque vous vous connectez à Unity et non pour d’autres connexions, un programme Upstart travail de session semble parfait.

Vous l'avez peut-être remarqué: les processus que vous exécutez après une connexion à l'interface graphique sont soumis à un second processus init. Cette init est une init Upstart appropriée et vous pouvez démarrer et arrêter des travaux de session en fonction des événements émis par celle-ci. Aucun privilège root nécessaire. Mieux encore (ou pire selon la perspective), cette solution n'est pas encore totalement prise en charge pour les systèmes sans tête. Une connexion SSH n'a pas démarré l'utilisateur init à partir d'un test rapide que je viens de faire.

Pour créer un travail de session, créez un nouveau fichier .conf dans ~/.config/upstart. C'est le répertoire principal par défaut pour les travaux de session Upstart ($XDG_CONFIG_HOME/upstart), créez-le s'il n'existe pas. Voici un exemple de travail:

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

Vous pouvez le contrôler manuellement:

start myjob 
# or
initctl start myjob

Les commandes service permettent de contrôler les travaux système (ceux de /etc/init.d ou /etc/init). Pour contrôler les travaux de session, vous devez utiliser la commande initctl , qui permet d’interagir avec Upstart.

Voir man upstart-events pour plus d'événements que vous pouvez utiliser.

9
muru