Могу ли я управлять пользовательской системой с помощью "systemctl --user" после sudo su - myuser?
У меня есть служба, которую я хочу начать с запуска системы. Я создал определение ap @.service для него как шаблона, потому что может быть много экземпляров.
Определяется в корневой системе d, это хорошо работает и запускает и останавливает службу в системе. Экземпляр службы устанавливается с systemctl enable [email protected]
, как и следовало ожидать. Root также может запускать и останавливать обслуживание без проблем. Служба работает в своей учетной записи (myuser), а не в корне, управляемой пользователем = myuser в шаблоне ap @.service.
Но я хочу, чтобы пользователь "myuser" мог запускать и останавливать свой собственный сервис без ущерба для безопасности системы.
Я переключился на использование пользовательской системы d и включил затяжку с помощью loginctl enable-linger myuser
. Затем я включаю службу, определенную в каталоге ~ myuser/.config/systemd/user. Служба теперь запускается и полностью останавливается с системой, как и было предусмотрено. Если я вхожу в терминал в качестве "myuser", systemctl --user start [email protected]
и systemctl --user stop [email protected]
работают отлично.
Однако, если я вхожу в систему как другой пользователь (user2) и выполняю sudo su - myuser
в терминале, тогда команды systemctl --user
теперь терпят неудачу с сообщением об ошибке "Не удалось получить соединение D-Bus: нет такого файла или каталога".
Как включить systemctl --user
для работы после команды sudo su - myuser
для переключения пользователя?
Ответы
Ответ 1
Я нашел ответ на другом сайте с дальнейшим поиском с использованием разных терминов.
Необходимыми решениями были предоставление оболочке информации для получения правильного DBUS для пользователя.
Добавляя следующие переменные среды в оболочку перед запуском systemctl --user
, проблема DBUS устраняется, а systemctl работает правильно.
export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
Чтобы гарантировать, что DBUS_SESSION_BUS_ADDRESS доступен в оболочке sudo, я добавил переменные среды в ~/.bash_profile целевого идентификатора пользователя. Для этого необходимо создать оболочку входа (sudo su - myuser
или sudo -l myuser
), чтобы создать правильную среду.
В качестве альтернативы добавьте создание переменных среды в ~/.bashrc(или эквивалент для других оболочек). Затем среда будет создана заново для всех созданий оболочки.