How to run tmux/screen with systemd > 230?
Solution 1
Using Ubuntu 18.04 with systemd version 237, none of the suggested solutions worked for me.
The solution that worked for me was to
- edit the
/etc/systemd/logind.conf
- uncomment
KillExlcudeUsers
- add a space separated list of users (e.g.,
KillExlcudeUsers=root user1 user2
)
Solution 2
The proper solution is to disable the offending systemd behavior system-wide.
Edit /etc/systemd/logind.conf
(you must sudo, of course) and set
KillUserProcesses=no
You can also put this setting in a separate file, e.g. /etc/systemd/logind.conf.d/99-dont-kill-user-processes.conf
.
Then restart systemd-logind.service
.
sudo systemctl restart systemd-logind
Solution 3
Based on @Rinzwind's answer and inspired by a unit description the best I could find is to use TaaS (Tmux as a Service) - a generic detached instance of tmux
one reattaches to.
# 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)#
Solution 4
Takes a boolean value that specifies whether the service shall be considered active even when all its processes exited. Defaults to no.
Solution 5
According to https://unix.stackexchange.com/a/287282/117599 invoking tmux
using
systemd-run --user --scope tmux
should also do the trick.
Related videos on Youtube
WoJ
Updated on September 18, 2022Comments
-
WoJ over 1 year
I run 16.04 and
systemd
now killstmux
when the user disconnects (summary of the change).Is there a way to run
tmux
orscreen
(or any similar program) withsystemd
230? I read all the heated disussion about pros and cons of the behavious but no solution was suggested.(I see the behaviour in 229 as well)
-
MvanGeest over 7 yearsThat's odd - I have
systemd-229-4ubuntu7
(from xenial-updates) and I don't see this behaviour. Anyway, this behaviour has already been reverted in Debian'ssystemd-230-2
, so it'll probably be reverted in Ubuntu soon too. -
mirabilos almost 7 yearsmirbsd.org/~tg/Debs/dists/jessie/wtf/Pkgs/mirabilos-support has prevent-systemd-* packages that allow you to install and use sysvinit as earlier
-
-
WoJ over 7 yearsThanks. I accepted and +1 your answer as it provides the core of the solution. Would you know if it is usable in an interactive mode (by launching
tmux
interactively, as opposed to my answer)? -
Rinzwind over 7 yearsdoubt it. systemd probably will not care about your tmux unless you tell systemd it should :-P (their approach to this is rather single-minded.... it seems like it is their way or no way.) You need a unit description like you posted. Feel free to accept yours and/or expand yours ;-) I dont need the rep >:-D
-
kasperd over 7 yearsThis answer needs more detail such as where to use that setting.
-
Rinzwind over 7 yearsSure but the answer is going to be a copy/paste of the manual page ;-)
-
Debilski over 7 years@WoJ You can make an alias for
tmux
to start assystemd-run --remain-after-exit tmux
(or maybe even with--scope --user
flags). -
sarnold over 7 yearsThis is neat but I can't for the life of me figure out why you'd use it! :)
-
WoJ over 7 years@sarnold: to be able to control applications which start with a console, but which are suppose to be running at boot time. Minecraft is one example.
-
Julia Path over 6 yearsHow is the proper solution to a problem specific to one unit to set some system wide setting?
-
JdeBP over 6 yearsBecause, as you can see from even only reading the question, let alone all of the other discussion elsewhere about this that the question indirectly references, this is not specific to one application. This is a point that is even in boldface in the question.
-
Adrian Günter almost 6 yearsYou just need to enable lingering for the user via
loginctl enable-linger <user>
. Fromman loginctl
: "If enabled for a specific user, a user manager is spawned for the user at boot and kept around after logouts. This allows users who are not logged in to run long-running services." -
taneli over 5 yearsUnfortunately, this appears to no longer work in 18.10 cosmic.
-
Pa_ about 5 yearsUbuntu 18.04 here. This does not work, not even after reboot. Enabling lingering does not either.
-
0xC0000022L over 3 years@taneli what doesn't work?