linux - 如何使服务器上的屏幕保持与离开时相同的状态(拆分完好)?
问题描述
我一直在使用“screen”命令从我大学的服务器上分离一个正在运行的程序。但是每次我重新打开屏幕时,我都必须在屏幕中重新创建水平和垂直分割。即使在我关闭服务器连接后,有没有办法让它们保持原位?
解决方案
使用tmux
withtmux-resurrect
和tmux-continuum
plugins,你可以拥有一些非常强大的环境。
不仅您的会话保持tmux
服务器退出,而且通过正确的设置,它们甚至可以保持系统重新启动,并且可以达到ssh
保存会话的程度。这是我对这些插件的设置片段。因此,就我而言,我要求tmux-continuum
每 5 分钟保存一次会话,并且我希望ssh
程序能够持续tmux
退出并重新启动系统。我也有设置来保持我的vim
和neovim
会话恢复。
# 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
。
推荐阅读
- c# - 如何通过引号和逗号开头或结尾的引号进行解析?
- c++ - “ActivationsSource”不是类或命名空间名称
- excel - 在列中的数据更改后插入空白行
- mysql - 更改列值取决于出现次数
- python - 使用 Google Compute Engine 默认服务帐号签署 Google Cloud Storage URL
- c# - Unity 网络管理器不会在网络起始位置生成对象
- go - 对 gqlgen GraphQL API 的 curl POST 请求的正确形状是什么?
- swift - 在 Swift 中过滤 ManagedObject FetchResults 数组
- python - 如何在字典python列表中设置默认值?
- python - python,如何在范围循环中跳过行