web-dev-qa-db-fra.com

Systemd, démarrer l'unité de niveau utilisateur avec accès Sudo

J'ai un paquet Debian qui installe mon logiciel et il doit démarrer deux applications dans le script de post-installation. Le premier est un démon et le second est un processus d'arrière-plan, les deux sont gérés avec systemd. Le problème est que je lance Sudo dpkg -i ..., et il ne parvient pas à démarrer l'unité de niveau utilisateur avec l'erreur suivante: Failed to connect to bus: No such file or directory. Il est normal de démarrer des scripts après l'installation, mais les droits Sudo me permettent de démarrer mon script. Peut-être que je manque quelque chose. Quelqu'un sait comment surmonter ce problème?

La commande utilisée pour démarrer le script: systemctl --user start test.service. Lorsqu'il est exécuté à partir du programme d'installation, il devient en fait Sudo systemctl --user start test.service. (La même chose ne fonctionne pas depuis le terminal).

1
durkmurder

Ok, j'ai réussi à résoudre le problème. Ce n'était pas un problème pour commencer, juste mon manque de connaissances sur les sessions DBus et comment elles fonctionnent. J'espère que ma réponse aidera quelqu'un.

Quand vous ouvrirez le terminal et exécuterez systemctl --user command unit tout ira bien, mais lorsque vous essaierez de le faire sous Sudo ou basculerez vers un autre utilisateur à l'aide de la commande su, vous échouerez avec l'erreur que j'ai eue:

Failed to connect to bus: No such file or directory.

Le problème est que systemctl pour se connecter aux sessions utilisateur utilise l'adresse de session dbus qui est définie dans DBUS_SESSION_ADDRESS variable env. Lorsque vous faites Sudo ou su vous obtenez un environnement très limité, il vous manque simplement DBUS_SESSION_ADDRESS et d'autres variables env. Ainsi, lorsque vous obtenez des erreurs similaires, vérifiez votre environnement, peut-être qu'il manque quelque chose d'important.

1
durkmurder