Je viens de terminer le processus d'installation et de configuration de systemd sur mon système arch-linux (2012.09.07). J'ai désinstallé initscripts
(et supprimé les fichiers de configuration).
Ce que je veux faire, c'est créer un service qui puisse être démarré et arrêté par un utilisateur non root. Le service doit démarrer une session d'écran séparée exécutant rtorrent. Cependant, je souhaite que chaque utilisateur du système qui a configuré ce service pour qu'il démarre (activé) ait une instance particulière démarrée spécifiquement pour eux. Comment pourrait-on s'y prendre?
Je me souviens avoir lu que systemd prenait en charge les instances d'utilisateurs de services, mais je n'ai trouvé aucune information sur la manière de configurer cela, ni de savoir si cela se rapportait à ce que je cherchais.
Fichier de service que j'ai utilisé pour le système:
[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
MISE À JOUR # 1 :
Après avoir lu les pages de manuel ici et ici , je comprends comment systemd fonctionne un peu mieux. Plus précisément, l'utilisation des options User=
et WorkingDirectory=
permet de démarrer le service dans la session d'un utilisateur. Cependant , la question reste pas moins que l'utilisateur ne peuvent pas eux - mêmes start
, stop
, enable
ou disable
le service. Une erreur d' accès est refusée est donnée par systemctl
.
MISE À JOUR # 2 :
Tout d'abord, pour simplifier et utiliser au mieux la fonctionnalité de session utilisateur de systemd (encore un peu incomplète), j'ai utilisé les unités de session utilisateur de sofar et suivi ses conseils de configuration.
Il semble qu'il y ait un bogue dans la version actuelle de DBus (1.6.4-1) dans lequel il est impossible de définir la variable d'environnement, DBUS_SESSION_BUS_ADDRESS
ce qui signifie que la systemctl --user
commande error out est exécutée avec:
Failed to get D-Bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
La variable devrait ressembler à ceci:
DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/USERUID/dbus/user_bus_socket"
où USERUID doit être l'UID de l'utilisateur donné.
sudo
les utilisateurs et les laisser, comme mentionné dans mon commentaire ci-dessus, contrôler leur propre fichier de service. Cependant, cette solution permettrait également à l'utilisateur de contrôler la plupart des autres services ...
sudo
la documentation , cela ne serait pas le cas - sudoers (5) contient de nombreux exemples de restriction des arguments d'une commande.