screen 高级应用

会话共享

还有一种比较好玩的会话恢复,可以实现会话共享。

假设在不同地点以相同用户登录一台机器,然后创建一个screen会话,可以在另一个的终端上命令:

screen -x

这个命令会将终端Attach到另一台电脑的Screen会话上,并且当前的终端不会被Detach。 这样就可以共享同一个会话了,如果当前又处于同一个窗口,那就相当于坐在同一个显示器前面,对方的操作会同步演示给对方。 当然,如果切换到这个会话的不同窗口中去,那还是可以分别进行不同的操作的。

会话锁定与解锁

  • Screen允许使用快捷键C-a s锁定会话。 锁定以后,再进行任何输入屏幕都不会再有反应了。 但是要注意虽然屏幕上看不到反应,但你的输入都会被Screen中的进程接收到。

  • 快捷键C-a q可以解锁一个会话。

  • 也可以使用C-a x锁定会话,不同的是这样锁定之后,会话会被Screen所属用户的密码保护,需要输入密码才能继续访问这个会话。

发送命令到screen会话

Screen会话之外,可以通过screen命令操作一个Screen会话,这也为使用Screen作为脚本程序增加了便利。 关 于Screen在脚本中的应用超出了入门的范围,这里只看一个例子,体会一下在会话之外对Screen的操作:

screen -S sandy -X screen ping www.baidu.com

这个命令在一个叫做sandyscreen会话中创建一个新窗口,并在其中运行ping命令。

屏幕分割

现在显示器那么大,将一个屏幕分割成不同区域显示不同的Screen窗口显然是个很酷的事情。

可以使用快捷键C-a S将显示器水平分割,Screen 4.00.03版本以后,也支持垂直分屏,快捷键是C-a |。 分屏以后,可以使用C-a <tab>在各个区块间切换,每一区块上都可以创建窗口并在其中运行进程。

可以用C-a X快捷键关闭当前焦点所在的屏幕区块,也可以用C-a Q关闭除当前区块之外其他的所有区块。 关闭的区块中的窗口并不会关闭,还可以通过窗口切换找到它。

C/P模式和操作

screen的另一个很强大的功能就是可以在不同窗口之间进行复制粘贴了。

  1. 使用快捷键C-a <Esc>或者C-a [可以进入copy/paste模式,这个模式下可以像在vi中一样移动光标,并可以使用空格键设置标记。
  2. 其实在这个模式下有很多类似vi的操作,譬如使用/进行搜索,使用y快速标记一行,使用w快速标记一个单词等。

关于C/P模式下的高级操作,其文档的这一部分有比较详细的说明。

一般情况下,可以移动光标到指定位置,按下空格设置一个开头标记,然后移动光标到结尾位置,按下空格设置第二个标记,同时会将两个标记之间的部分储存在copy/paste buffer中,并退出copy/paste模式。

在正常模式下,可以使用快捷键C-a ]将储存在buffer中的内容粘贴到当前窗口。

更多screen功能

同大多数UNIX程序一样,GNU Screen提供了丰富强大的定制功能。

可以在Screen的默认两级配置文件/etc/screenrc$HOME/.screenrc中指定更多 例如设定screen选项,定制绑定键,设定screen会话自启动窗口,启用多用户模式,定制用户访问权限控制等等。 如果愿意的话,也可以自己指定screen配置文件。

  1. 以多用户功能为例,screen默认是以单用户模式运行的,需要在配置文件中指定multiuser on来打开多用户模式
  2. 通过acl*(acladd,acldel,aclchg...)命令,可以灵活配置其他用户访问你的screen会话。
  3. 更多配置文件内容请参考screen的man页。