Керування системними підрозділами іншого користувача


10

Чи може один користувач або, можливо, root, контролювати системні послуги іншого користувача?

Я спробував sudo -u <some user> systemctl --user restart <some service>, але він скаржиться на dbus : Failed to get D-Bus connection: Connection refused.

Відповіді:


4

У мене була така ж проблема, коли я віддалено увійшов у свій gentoo box через ssh. У моєму випадку це було тому, що змінних середовища XDG_RUNTIME_DIRта DBUS_SESSION_BUS_ADDRESSсередовища не було. Виконайте такі команди та повторіть спробу:

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

Якщо це допоможе, ви можете помістити ці команди у свій .bashrc. Я думаю, має бути більш елегантне рішення, ніж .bashrc, але це залежить від вашого дистрибутива.

Ось де я знайшов це рішення.

Редагувати:

увійшовши як root, мені вдалося успішно запуститись systemctl --userяк інший користувач, використовуючи suнаступне:

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

або використовуючи sudo(зауважте, мені довелося чітко додати відповідний UID користувачів (1000) до шляху '/ run / user /', але якщо ви запускаєте його з скрипту bash, ви можете використовувати замість $ SUDO_UID):

sudo -u username XDG_RUNTIME_DIR="/run/user/1000" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus" systemctl --user status

1
Я маю саме це в /etc/profile.d/dbus.sh. Я думаю, що sudoпотрібні ті, що містяться у списках, оскільки це очищає середовище за замовчуванням. Я не впевнений, чи це просто передасть поточний користувач часу виконання режиму.
mkaito
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.