How to run tmux/screen with systemd > 230?

19,333

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 tmuxone 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

RemainAfterExit=

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.

Share:
19,333

Related videos on Youtube

WoJ
Author by

WoJ

Updated on September 18, 2022

Comments

  • WoJ
    WoJ over 1 year

    I run 16.04 and systemd now kills tmux when the user disconnects (summary of the change).

    Is there a way to run tmux or screen (or any similar program) with systemd 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
      MvanGeest over 7 years
      That'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's systemd-230-2, so it'll probably be reverted in Ubuntu soon too.
    • mirabilos
      mirabilos almost 7 years
      mirbsd.org/~tg/Debs/dists/jessie/wtf/Pkgs/mirabilos-support has prevent-systemd-* packages that allow you to install and use sysvinit as earlier
  • WoJ
    WoJ over 7 years
    Thanks. 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
    Rinzwind over 7 years
    doubt 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
    kasperd over 7 years
    This answer needs more detail such as where to use that setting.
  • Rinzwind
    Rinzwind over 7 years
    Sure but the answer is going to be a copy/paste of the manual page ;-)
  • Debilski
    Debilski over 7 years
    @WoJ You can make an alias for tmux to start as systemd-run --remain-after-exit tmux (or maybe even with --scope --user flags).
  • sarnold
    sarnold over 7 years
    This is neat but I can't for the life of me figure out why you'd use it! :)
  • WoJ
    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
    Julia Path over 6 years
    How is the proper solution to a problem specific to one unit to set some system wide setting?
  • JdeBP
    JdeBP over 6 years
    Because, 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
    Adrian Günter almost 6 years
    You just need to enable lingering for the user via loginctl enable-linger <user>. From man 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
    taneli over 5 years
    Unfortunately, this appears to no longer work in 18.10 cosmic.
  • Pa_
    Pa_ about 5 years
    Ubuntu 18.04 here. This does not work, not even after reboot. Enabling lingering does not either.
  • 0xC0000022L
    0xC0000022L over 3 years
    @taneli what doesn't work?