如何在分离/重新附加 GNU 屏幕后保持窗口拆分

Ces*_*sar 49 gnu-screen

我在 Ubuntu 服务器中使用屏幕。

我的屏幕分为四个区域,每个区域显示一个不同的窗口。

问题是当我分离(或者可能重新连接)一个得到四个窗口但只有一个区域时,我必须重新做C-a S一遍?

重新连接时如何保持屏幕分裂?

小智 84

我发现如果你已经设置了一些窗口并且你想保存它们,你可以这样做:

Ctrl-a
:
layout save default
Run Code Online (Sandbox Code Playgroud)

然后,当您分离并重新附加到会话时,应该恢复布局。

适用于 Screen 版本 4.00.03jw4 (FAU) 2-May-06 (Ubuntu 12.04 & 12.10)

此外,您可能希望创建一个守护进程:

$> screen -dmSU mysession
Run Code Online (Sandbox Code Playgroud)

然后通过调用使其始终可用:

$> screen -r mysession
Run Code Online (Sandbox Code Playgroud)

  • 更好的解决方案。这应该是公认的答案。(我知道为什么我总是向下滚动XD) (6认同)

小智 15

只需将此行添加到您的~/.screenrc

# This line makes Detach and Re-attach without losing the regions/windows layout
layout save default
Run Code Online (Sandbox Code Playgroud)


小智 14

在 git 版本中,layout引入了新功能。

从屏幕(1):

布局新 [title]

创建新布局。屏幕将变为一整个区域并切换到空白窗口。从这里,您可以根据需要构建区域和它们显示的窗口。新布局将以最小的可用整数编号,从零开始。您可以选择为新布局命名。否则,它将具有“布局”的默认标题。您可以随时使用命令布局标题更改标题。

即使您分离了屏幕会话,布局也会记住区域是如何分割的。

例如,屏幕开始跟随配置。

layout new
split
split -v
screen 0
focus next
screen 1
focus bottom
screen 2
detach
Run Code Online (Sandbox Code Playgroud)

并重新连接此会话,您将能够返回到(上次选择的)具有 3 个分割区域的布局。


Dar*_*all 13

屏幕常见问题解答

(隐含的问题是,“我如何将拆分窗口保持在分离状态?”)

简而言之,答案是你不能。更长的答案是你可以伪造它。

拆分是您的显示器的属性。管理屏幕会话的进程并不真正了解它们;只有显示会话的单个进程才可以。因此, screen 会话无法记住拆分,因为它不知道它们,并且一旦您分离,知道它们的进程就会退出。

黑客是使用嵌套的屏幕会话。启动一个会话并给它一些你不会使用太多的转义序列(或者只是完全禁用它的转义字符)。将您常用的分离键序列绑定到此屏幕会话。现在,开始或附加到您的主屏幕会话。您的所有工作都将在内部会话中完成,您可以拆分显示。但是,当您分离时,分离的是外部会话,因此您在内部会话中的拆分将被保留。

假设您使用默认转义字符 Ca,您的备用 screenrc 应包含:

escape ""
bindkey ^ad detach
Run Code Online (Sandbox Code Playgroud)

  • 新功能,即`layout`,使这个答案无效! (17认同)

小智 6

看来tmux确实如此。这是一个新的多路复用器项目,受到 screen 的启发,但从头开始并在 BSD 许可下编码。

(对不起,如果我的英语读起来不舒服:-°)