Zarządzanie jednostkami systemowymi innego użytkownika

10

Czy jeden użytkownik, a może root, może kontrolować usługi systemowe na poziomie użytkownika innego użytkownika?

Próbowałem sudo -u <some user> systemctl --user restart <some service>, ale skarży się na dbus: Failed to get D-Bus connection: Connection refused.

mkaito
źródło

Odpowiedzi:

4

Miałem ten sam problem, kiedy zdalnie zalogowałem się do mojego Gentoo Box poprzez ssh. W moim przypadku było to spowodowane brakiem zmiennych środowiskowych XDG_RUNTIME_DIRi DBUS_SESSION_BUS_ADDRESS. Uruchom następujące polecenia i spróbuj ponownie:

export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

Jeśli to pomoże, możesz umieścić te polecenia w swoim .bashrc. Myślę, że musi być bardziej eleganckie rozwiązanie niż .bashrc, ale to zależy od twojej dystrybucji.

Tutaj znalazłem to rozwiązanie.

Edytować:

zalogowałem się jako root, udało mi się pomyślnie uruchomić systemctl --userjako inny użytkownik, używając su:

su -c 'XDG_RUNTIME_DIR="/run/user/$UID" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status' username

lub używając sudo(uwaga, musiałem jawnie dodać odpowiedni identyfikator użytkownika (1000) do ścieżki „/ run / user /”, ale jeśli uruchamiasz go ze skryptu bash, możesz zamiast tego użyć $ SUDO_UID):

sudo -u username XDG_RUNTIME_DIR="/run/user/1000" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status
Odwilż
źródło
1
Właśnie to mam /etc/profile.d/dbus.sh. Sądzę, że sudopotrzebuje tych na białej liście, ponieważ domyślnie czyści środowisko. Nie jestem jednak pewien, czy po prostu przeniesie katalog wykonawczy bieżącego użytkownika.
mkaito