web-dev-qa-db-fra.com

Accéder au bus de session dbus à partir du script de démarrage

J'étais en train de me demander s'il est possible d'accéder au bus de session DBUS à partir d'un script upstart.

Le fond est ceci:
J'exécute une tâche upstart en mode utilisateur et remplace le fichier de configuration Upstart.conf dbus par celui du fichier upstart bzr dépôt.

Il souhaite maintenant accéder au trousseau de clés gnome de ce script de tâches à l'aide de gkeyring , qui doit accéder au bus de session initial de l'utilisateur. Par défaut, je viens d'obtenir le Gnome keyring not available.

Lorsque j'essaie d'exporter DBUS_SESSION_BUS_ADDRESS=... dans le script de mise à jour, la commande script/initctl se bloque, aucune sortie nulle part.

Cela me porte à penser que, puisque upstart utilise également DBUS, l’utilisation du bus de session est problématique. Est-ce que quelqu'un a une idée pour résoudre ce problème?

5
Marcus

cela pourrait fonctionner pour vous? ...

script
    export HOME="/home/puma"
    chdir /home/puma/apps/whatever/bin
    dbus_file=$(ls $HOME/.dbus/session-bus/ -t1 | head -1)
    . "$HOME/.dbus/session-bus/$dbus_file"
    export DBUS_SESSION_BUS_ADDRESS
    exec su -s /bin/sh -c 'export DBUS_SESSION_BUS_ADDRESS=$DBUS_SESSION_BUS_ADDRESS;exec /home/puma/apps/whatever/bin/appname' puma 
end script

j'espère que ça aide ?

2
P M

Si la même variable d'environnement DBUS_SESSION_BUS_ADDRESS _ est définie pour tous les processus souhaitant accéder au bus de session, vous ne rencontrerez aucun problème (voir le manuel ). Mais étant donné que les tâches en amont sont exécutées dans un " environnement restrictif ", vous n'aurez pas accès à cette variable dans un travail système ( par exemple ceux sous /etc/init). Toutefois, si vous deviez le faire en tant que travail de session (par exemple, sous /usr/share/upstart/sessions), vous aurez accès à beaucoup plus de variables d’environnement. De plus, ces travaux ne sont pas exécutés sous la forme root, mais en tant qu'utilisateur de la session. Par exemple:

start on started dbus
stop on stopping dbus

respawn
respawn limit 10 5

kill timeout 20

exec /PATH/TO/MY/JOB
0
Yan Foto