首页 > 解决方案 > 如何使服务器上的屏幕保持与离开时相同的状态(拆分完好)?

问题描述

我一直在使用“screen”命令从我大学的服务器上分离一个正在运行的程序。但是每次我重新打开屏幕时,我都必须在屏幕中重新创建水平和垂直分割。即使在我关闭服务器连接后,有没有办法让它们保持原位?

标签: linux

解决方案


使用tmuxwithtmux-resurrecttmux-continuumplugins,你可以拥有一些非常强大的环境。

不仅您的会话保持tmux服务器退出,而且通过正确的设置,它们甚至可以保持系统重新启动,并且可以达到ssh保存会话的程度。这是我对这些插件的设置片段。因此,就我而言,我要求tmux-continuum每 5 分钟保存一次会话,并且我希望ssh程序能够持续tmux退出并重新启动系统。我也有设置来保持我的vimneovim会话恢复。

# TPM settings

set -g @plugin 'tmux-plugins/tmux-resurrect'
set -g @resurrect-capture-pane-contents 'on'
set -g @resurrect-processes 'ssh'
# for vim
set -g @resurrect-strategy-vim 'session'
# for neovim
set -g @resurrect-strategy-nvim 'session'

set -g @plugin 'tmux-plugins/tmux-continuum'
set -g @continuum-restore 'on'
set -g @continuum-save-interval '5'

tmux-resurrect 你可以在这里这里阅读更多tmux-continuum

在旁注中,您可以使用不同的窗口和窗格组合启动时想要创建的默认布局,tmux然后在每个窗格中运行不同的程序。

这是一个非常简单的 shell 脚本,我用于我的某个项目。

#!/bin/sh
tmux new-session  -s "dev" -n "home" \; \
        split-window -v -p 40 \; \
        split-window -h -p 60 \; \
        new-window -n 'py37' \; \
        send-keys 'cdp3' C-m  'c' C-m \; \
        split-window -v -p 30 \; \
        send-keys 'cdp3' C-m 'c' C-m \; \
        split-window -h -p 75 \; \
        send-keys 'cdp3' C-m 'c' C-m \; \
        select-pane -t 1 \; \
        new-window -n 'py2' \; \
        send-keys 'cdp2' C-m 'c' C-m \; \
        split-window -v -p 30 \; \
        send-keys 'cdp2' C-m 'c' C-m \; \
        split-window -h -p 75 \; \
        send-keys 'cdp2' C-m 'c' C-m \; \
        select-pane -t 1 \; \
        select-window -t 1 \; \
        select-pane -t 1 \

split-window将当前窗口水平或垂直拆分为窗格,高度宽度以百分比指定

new-window将在会话中创建新窗口。

select-pane将选择具有指定窗格 ID 的窗格

无论您看到什么,send-keys都是您要在该窗格中运行的实际命令或程序。

准备好这个脚本后,我所要做的就是执行它,我将拥有一个tmux具有预定义布局的新会话。您可以根据需要尽可能地扩展它。

希望这有助于您从传统screen解决方案转向现代且更灵活的解决方案tmux


推荐阅读