我注意到,从我的 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