Comment exécuter tmux / screen avec systemd> 230?

19

Je lance 16.04 et systemdtue maintenant tmuxlorsque l'utilisateur se déconnecte ( résumé du changement ).

Existe-t-il un moyen d'exécuter tmuxou screen(ou tout programme similaire) avec systemd230?J'ai lu toutes les discussions animées sur les avantages et les inconvénients du comportement, mais aucune solution n'a été suggérée.

(Je vois aussi le comportement en 229)

WoJ
la source
1
C'est étrange - je l'ai systemd-229-4ubuntu7(de xenial-updates) et je ne vois pas ce comportement. Quoi qu'il en soit, ce comportement a déjà été inversé dans Debiansystemd-230-2 , donc il sera probablement bientôt inversé dans Ubuntu.
MvanGeest
mirbsd.org/~tg/Debs/dists/jessie/wtf/Pkgs/mirabilos-support a des packages prevent-systemd- * qui vous permettent d'installer et d'utiliser sysvinit comme précédemment
mirabilos

Réponses:

1

En utilisant Ubuntu 18.04 avec la version 237 de systemd , aucune des solutions suggérées n'a fonctionné pour moi.

La solution qui a fonctionné pour moi était de

  • modifier le /etc/systemd/logind.conf
  • décommenter KillExlcudeUsers
  • ajouter une liste d'utilisateurs séparés par des espaces (par exemple, KillExlcudeUsers=root user1 user2)
peur
la source
19

La bonne solution consiste à désactiver le comportement systemd incriminé à l'échelle du système.

Modifier /etc/systemd/logind.conf( vous devez sudo , bien sûr) et définir

KillUserProcesses=no

Vous pouvez également mettre ce paramètre dans un fichier séparé, par exemple /etc/systemd/logind.conf.d/99-dont-kill-user-processes.conf.

Redémarrez ensuite systemd-logind.service.

sudo systemctl restart systemd-logind
Michael Hampton
la source
4
Comment est la bonne solution à un problème spécifique à une unité pour définir un paramètre à l'échelle du système?
jpath
Parce que, comme vous pouvez le voir en ne lisant que la question, sans parler de toutes les autres discussions ailleurs à ce sujet auxquelles la question fait indirectement référence, ce n'est pas spécifique à une application. C'est un point qui est même en gras dans la question.
JdeBP
Il vous suffit d'activer la persistance pour l'utilisateur via loginctl enable-linger <user>. De man loginctl: "S'il est activé pour un utilisateur spécifique, un gestionnaire d'utilisateurs est généré pour l'utilisateur au démarrage et conservé après la déconnexion. Cela permet aux utilisateurs qui ne sont pas connectés d'exécuter des services de longue durée."
Adrian Günter
Ubuntu 18.04 ici. Cela ne fonctionne pas, même après le redémarrage. L'activation de la persistance ne l'est pas non plus.
Pa_
11

Sur la base de la réponse de @ Rinzwind et inspiré d'une description d'unité, le mieux que j'ai pu trouver est d'utiliser TaaS (Tmux as a Service) - une instance générique détachée d' tmuxun qui se rattache.

# cat /etc/systemd/system/[email protected]

[Unit]
Description=tmux default session (detached)
Documentation=man:tmux(1)

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/tmux new-session -d -s %I
ExecStop=/usr/bin/tmux kill-server
KillMode=none

[Install]
WantedBy=multiplexer.target

# systemctl start [email protected]
# systemctl start [email protected]
# tmux list-sessions

instanceone: 1 windows (created Sun Jul 24 00:52:15 2016) [193x49]
instancetwo: 1 windows (created Sun Jul 24 00:52:19 2016) [193x49]

# tmux attach-session -t instanceone

(instanceone)#
WoJ
la source
C'est bien mais je ne peux pas pour la vie de moi comprendre pourquoi vous l'utilisez! :)
sarnold
5
@sarnold: pour pouvoir contrôler les applications qui démarrent avec une console, mais qui sont supposées s'exécuter au démarrage. Minecraft en est un exemple.
WoJ
5

RemainAfterExit =

Prend une valeur booléenne qui spécifie si le service doit être considéré comme actif même lorsque tous ses processus sont sortis. Par défaut à no.

Rinzwind
la source
Merci. J'ai accepté et +1 votre réponse car elle fournit le cœur de la solution. Savez-vous s'il est utilisable en mode interactif (en le lançant de manière tmuxinteractive, contrairement à ma réponse)?
WoJ
j'en doute. systemd ne se souciera probablement pas de votre tmux à moins que vous ne disiez à systemd qu'il devrait: publié. N'hésitez pas à accepter le vôtre et / ou à développer le vôtre ;-) Je n'ai pas besoin du représentant>: - D
Rinzwind
3
Cette réponse a besoin de plus de détails, comme l'endroit où utiliser ce paramètre.
kasperd
1
Bien sûr, mais la réponse va être un copier / coller de la page de manuel ;-)
Rinzwind
1
@WoJ Vous pouvez créer un alias pour tmuxcommencer en tant que systemd-run --remain-after-exit tmux(ou peut-être même avec des --scope --userindicateurs).
Debilski
2

Vous devez définir le Typeservice sur forking, comme expliqué ici .

Supposons que le service que vous souhaitez exécuter screens'appelle minecraft. Ensuite, vous ouvrez minecraft.servicedans un éditeur de texte et ajoutez ou modifiez l'entrée Type=forkingsous la section [Service].

Robin Hartmann
la source
0

Selon /unix//a/287282/117599 invoquant en tmuxutilisant

systemd-run --user --scope tmux

devrait également faire l'affaire.

phk
la source
Malheureusement, cela ne semble plus fonctionner en 18.10 cosmique.
taneli