20

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

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

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

Сервисный файл, который я использовал для системы:

[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:

Прочитав страницы руководства здесь и здесь, я понимаю, как 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 данного пользователя.

1 ответ1

19

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .