防止注销杀死 tmux 会话

防止注销杀死 tmux 会话

我注意到,从我的 X 用户会话中注销(注销)将终止tmux我启动的任何会话,甚至是我使用sudo tmux类似命令运行的会话。我确信以前不会发生这种情况,但最近的一些变化影响了这种行为。

即使在结束 X 会话后,我如何维持这些tmux(或)会话?screen

答案1

这个“功能”systemd以前就已经存在了,但是开发systemd人员决定更改默认值,启用注销会话时终止子进程的设置。

logind.conf您可以在( )中恢复此设置/etc/systemd/logind.conf

KillUserProcesses=no

您还可以tmux使用systemd-run如下包装器运行:

systemd-run --scope --user tmux

对于这些系统,您可能只想为tmux(或screen) 命令命名:

alias tmux="systemd-run --scope --user tmux"

答案2

缺失的一点可以在SU上找到:

第一:$USER注销后保持 SystemD 实例运行:

sudo loginctl enable-linger $USER

第二:重启。man loginctl此设置仅在下次启动时生效。)

第三:在SystemD实例tmux的控制下启动:$USER

systemd-run --scope --user tmux

就是这样。

无需/etc/systemd/logind.conf为此进行更改。

笔记:

  • 仅对于不这样做的用户才需要root
  • 如果你tmux直接启动(而不是通过systemd-run),它就会被杀死。
  • 因此,要么使用别名,要么使用包装脚本,如下所示:
#!/bin/bash

[ -x /usr/bin/systemd-run ] &&
dbus-send --print-reply / org.freedesktop.DBus.Peer.Ping &&
/usr/bin/systemd-run --scope --user -- /bin/true &&
exec /usr/bin/systemd-run --scope --user -- /usr/bin/tmux "$@"
exec /usr/bin/tmux "$@"

我安装它是为了chmod +x "$HOME/bin/tmux"避免.bashrc在您的个人资料重置后编辑可能会消失。

更新:/usr/bin/systemd-run --scope --user -- /bin/true需要测试X11 并行活动时在上下文systemd-run中是否可用。ssh在这里,要运行 permanent tmux,您显然需要从 X11 会话运行它,而不是ssh.

更新 2:需要重新启动并且可以找到linger状态

ls -al /var/lib/systemd/linger

相关内容