Acabei de concluir o processo de instalação e configuração do systemd no meu sistema arch-linux (2012.09.07). Eu desinstalei o initscripts
(e removi os arquivos de configuração).
O que eu quero fazer é criar um serviço que possa ser iniciado e interrompido por um usuário não-root. O serviço é iniciar uma sessão de tela desanexada executando o rtorrent. No entanto, quero que todos os usuários do sistema que definiram este serviço para iniciar (habilitado) tenham uma instância específica iniciada especificamente para eles. Como alguém faria isso?
Lembro-me de ler que o systemd suporta instâncias de usuários de serviços, no entanto, não consegui encontrar nenhuma informação sobre como configurá-lo ou se ele está relacionado ao que estou procurando.
Arquivo de serviço que usei para o sistema:
[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
UPDATE # 1 :
Depois de ler as páginas man aqui e aqui , eu entendo como o systemd funciona um pouco melhor. Especificamente, o uso das opções User=
e WorkingDirectory=
permite que o serviço seja iniciado na sessão de um usuário. No entanto, o problema ainda é que o próprio usuário não pode start
, stop
, enable
ou disable
o serviço. Um erro Acesso negado é dado por systemctl
.
UPDATE # 2 :
Primeiro, para simplificação e para melhor uso do recurso de sessão do usuário do systemd (ainda um pouco incompleto), usei
unidades de sessão e seguiu o seu conselho de configuração.
Parece que há um bug na versão atual do DBus (1.6.4-1) no qual ele não configura a variável de ambiente DBUS_SESSION_BUS_ADDRESS
, o que significa usar os erros do comando systemctl --user
com:
Failed to get D-Bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
A variável deve ficar assim:
DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/USERUID/dbus/user_bus_socket"
onde USERUID precisa ser o UID do usuário especificado.