Impossible d'utiliser `systemctl --user` Parce que "n'a pas réussi à obtenir une connexion D-bus: La résolution refusée »

J'essaie de configurer le service au niveau de l'utilisateur en utilisant
https://serverfault.com/a/906224
sur une question similaire. J'ai créé les fichiers nécessaires et redémarré.

Je suis de préférence progressé parce que maintenant je reçois "Impossible d'établir une connexion D-bus: La résolution est rejetée "quand il était" n'a pas réussi à établir une connexion D-bus: La connexion est rejetée ", mais je suis dans une impasse, parce que je ne sais pas quel objet il essaie d'avoir accès (déposer? prise?) Et donc ne peut même pas vérifier les autorisations actuelles. Des idées?

Pendant que j'ai ajouté:

loginctl enable-linger userservice

/usr/lib/systemd/user/dbus.service (-rw-r - r - racine)

[Unit]
Description=D-Bus User Message Bus
Requires=dbus.socket

[Service]
ExecStart=/usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation
ExecReload=/usr/bin/dbus-send --print-reply --session --type=method_call --dest=org.freedesktop.DBus / org.freedesktop.DBus.ReloadConfig

[Install]
Also=dbus.socket

/usr/lib/systemd/user/dbus.socket (-rw-r - r - racine)

[Unit]
Description=D-Bus User Message Bus Socket

[Socket]
ListenStream=%t/bus
ExecStartPost=-/bin/systemctl --user set-environment DBUS_SESSION_BUS_ADDRESS=unix:path=%t/bus

[Install]
WantedBy=sockets.target
Also=dbus.service

/home/uservice/.config/systemd/user/uservice.service

[Unit]
Description=Test user-level service

[Service]
Type=dbus
BusName=com.wtf.service
ExecStart=/home/userservice/userservice.py
Restart=on-failure

[Install]
WantedBy=default.target

Pas de liens ailleurs ajoutés ...

De sorte qu'il a échoué:

systemctl --user status

Changement 2018-10-25:

Ajoutée

export XDG_RUNTIME_DIR=/run/user/$(id -u)

à

.bashrc

. La variable est installée et maintenant je reçois:

Failed to get D-us connection: no such file or directory

. Curieusement assez

man systemctl

n.

systemctl --help

mention

--user

Option, tandis que les deux mentionnent

--system

et spécifiez que cette valeur par défaut (Quels sont les autres paramètres).

Utilisant RHEL 7.4 (de

systemd 219

comme signalé

systemctl --version

) par SELinux.
Invité:

Blanche

Confirmation de:

Donc, il y a un problème de longue date quand

XDG_RUNTIME_DIR

La variable d'environnement n'est pas définie correctement ou n'est pas du tout installé lorsque les utilisateurs sont connectés et ne peuvent donc pas accéder à l'utilisateur. D-Bus. Cela se produit lorsque l'utilisateur entre dans le système à l'aide d'une méthode différente, à l'exception de la console graphique locale.

Vous pouvez le contourner en ajoutant à l'utilisateur

$HOME/.bashrc

:

export XDG_RUNTIME_DIR=/run/user/$(id -u)

Puis allez vous connecter à nouveau.

Catherine

Confirmation de:

J'ai remarqué que le serveur tableau Les usages --user systemd services - Ils ont même une note à ce sujet dans leurs documents:
https://help.tableau.com/curre ... r.htm
Service utilisateur systemd Utilisé pas aussi souvent qu'un gestionnaire de processus réguliers systemd. Red Hat Service utilisateur handicapé systemd dans RHEL 7 (Et donc dans toutes les distributions RHEL, tel que CentOS, Oracle Linux 7, Amazon Linux 2). mais RedHat assuré Tableau, que lancez le service utilisateur systemd Pris en charge jusqu'à ce que le service soit réactivé.

Comment font-ils (Exemple avec l'ID utilisateur 29575)

# cat /etc/systemd/system/user@29575.service
[Unit]
Description=User Manager for UID %i
After=systemd-user-sessions.service
# These are present in the RHEL8 version of this file except that the unit is Requires, not Wants.
# It's listed as Wants here so that if this file is used in a RHEL7 settings, it will not fail.
# If a user upgrades from RHEL7 to RHEL8, this unit file will continue to work until it's
# deleted the next time they upgrade Tableau Server itself.
After=user-runtime-dir@%i.service
Wants=user-runtime-dir@%i.service

[Service]
LimitNOFILE=infinity
LimitNPROC=infinity
User=%i
PAMName=systemd-user
Type=notify
# PermissionsStartOnly is deprecated and will be removed in future versions of systemd
# This is required for all systemd versions prior to version 231
PermissionsStartOnly=true
ExecStartPre=/bin/loginctl enable-linger %i
ExecStart=-/lib/systemd/systemd --user
Slice=user-%i.slice
KillMode=mixed
Delegate=yes
TasksMax=infinity
Restart=always
RestartSec=15

[Install]
WantedBy=default.target

Après avoir créé ce fichier:

systemctl daemon-reload
systemctl enable user@29575.service
systemctl start user@29575.service

Et vous devrez installer XDG_RUNTIME_DIR dans env Cet utilisateur est autour bashrc Ou similaire:

[ -z "${XDG_RUNTIME_DIR}" ] && export XDG_RUNTIME_DIR=/run/user/$(id -ru)

J'ai testé la dernière version RHEL 7.8, Et elle travaille, comme prévu, après cela, je peux courir "systemctl --user status" comme mon utilisateur.

Pour répondre aux questions, connectez-vous ou registre