Управление системными блоками другого пользователя

10

Может ли один пользователь, или, может быть, root, управлять системными службами уровня пользователя другого пользователя?

Я пытался sudo -u <some user> systemctl --user restart <some service>, но он жалуется на DBUS: Failed to get D-Bus connection: Connection refused.

mkaito
источник

Ответы:

4

У меня была такая же проблема, когда я удаленно вошел в свой ящик gentoo через 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