Как настроить службу systemd для запуска пользователем не root в качестве демона пользователя?

Я только что закончил установку и настройку systemd на моей системе arch-linux (2012.09.07). Я удалил initscripts (и удалил конфигурационные файлы).

то, что я хочу сделать, это создать службу, которая может быть запущена и остановлена пользователем, не являющимся root. Служба должна запустить сеанс отсоединенного экрана под управлением rtorrent. Однако я хочу, чтобы каждый пользователь в системе, который установил эту службу для запуска (включен), запускал конкретный экземпляр специально для них. Как кто-нибудь займется этим?

Я помню, как читал, что systemd поддерживает пользовательские экземпляры служб, однако я не смог найти никакой информации о том, как это настроить, или связано ли это с тем, что я ищу.

служебный файл, который я использовал для system:

[Unit]
Description=rTorrent

[Service]
Type=forking
ExecStart=/usr/bin/screen -d -m -S rtorrent /usr/bin/rtorrent
ExecStop=/usr/bin/killall -w -s 2 /usr/bin/rtorrent

обновить#1:

после прочтения man-страницы здесь и здесь, я понимаю, как systemd работает немного лучше. В частности, что с помощью User= и WorkingDirectory= параметры позволяют запускать службу в сеансе пользователя. Однако вопрос все равно остается, что пользователь сам не может start,stop,enable или disable сервис. В Доступ запрещен ошибка выдается systemctl.

обновить#2:

во-первых, для упрощения и лучшего использования функции сеанса пользователя systemd (все еще несколько неполной), я использовал единицы сеанса пользователя sofar и последовал его совету конфигурации.

кажется, что в текущей версии DBus (1.6.4-1) есть ошибка, при которой не устанавливается переменная окружения DBUS_SESSION_BUS_ADDRESS значение с помощью systemctl --user командные ошибки с:

Failed to get D-Bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11

переменная должна выглядеть так:

DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/USERUID/dbus/user_bus_socket"

здесь USERUID должен быть UID данного пользователя.

22
задан Hans
24.11.2022 10:37 Количество просмотров материала 2843
Распечатать страницу

1 ответ

systemd обычно не позволяет обычным пользователям запускать Системные службы. Хотя он поддерживает предоставление доступа через polkit, этой части все еще не хватает, и вы пока не можете разрешить только одну конкретную услугу.

поскольку rtorrent на самом деле не является системной службой, и поскольку вы хотите, чтобы каждый пользователь имел свой собственный экземпляр rtorrent, поэкспериментируйте с режимом "пользователь" systemd.

при входе в систему система запустит user@<uid>.service системный блок, который будет запустите отдельный экземпляр systemd "--user". Новый user-systemd будет читать файлы модулей (начиная с default.target) от ~/.config/systemd/user/,/etc/systemd/user/ и /usr/lib/systemd/user/.

18
отвечен grawity 2022-11-25 18:25

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх