【黑曜石】来自FSF的GNU自由软件Screen使用方法介绍和其在win10和WSL中的应用

2020-10-29   540 次阅读


前言概述

因为买了两个服务器,一个两个月的香港服务器一个一年的北京服务器,配置都差不多是1cpu or 2cpu以及2g内存。所以突然可以完成远程跑代码的需求了,就开始研究如何通过终端来进行关掉终端依旧工作的需求

稍微搜索了一下,好像提的人比较多的就只有nohup和screen,而nohup功能有点过于简单,且比较难恢复,所以先由screen入手进行学习。

Screen 基础快捷键

先介绍几个比较基本的功能

screen -S  *新屏名字*
screen -ls #查看有几个screen
screen -r  *屏名字或者uid* #打开存在的屏幕
-r [session]  Reattach to a detached screen process.
screen -x  *屏名字或者uid*# 连接在attached状态的屏幕
-x  Attach to a not detached screen. (Multi display mode).
#如果断网了就要用-D
-D (-r)       Detach and logout remote (and reattach here).
-D -RR        Do whatever is needed to get a screen session.
#断网了用-d也行
-d (-r) Detach the elsewhere running screen (and reattach here).
sudo kill *uid* #关闭存在的屏幕 or C-a k

#分屏
C-a S #上下分屏
C-a | #左右分屏
C-TAB #切换分屏
#分屏后要记的,同一屏中分的屏还是属于同一个屏。
#而且退出后再进入也无法回到分屏的界面,
#就只是能满足临时的有多屏查看需求,但是也挺不错了
#下面的screen配置文件有映射键的功能,可以使其更方便的自定义
#在screen内,有C-a当做命令字符,来进行操作

C-a d #屏幕暂存,先回到原屏
C-a n #到下一个屏幕(不包括原屏)
C-a ? #打开帮助
C-a \ #quit屏幕
C-a k #kill当前屏幕

Screen GNU官网说明文档

其实感觉GNU做的软件都挺全面细心的,这个screen甚至都有140多页的说明文档和特定的配置文件和花里胡哨的页面设置。

但是国内的网站上找不到很好的配置文件,所以还是读一下说明文档。在百度上这样设置关键词 : GNU screen 可以打开GNU的官网来查看screen的说明。
官网在这里了:gnu.org
这是screen的官网介绍,算是我目前发现的全网最全了:http://www.gnu.org/software/screen/

网页版说明文档在这里:http://www.gnu.org/software/screen/manual/screen.html
或者有pdf版:http://www.gnu.org/software/screen/manual/screen.pdf

screen配置文件

linux上所有人都用的配置是/etc/screenrc
单个用户自己用的配置是大概在~/中,但在我的电脑上没找到

在pdf版的说明文档的73页的bind key有对其进行配置的说明。
网上有些页面配置太花哨了,没有用而且大多用的是F12345键,我的联想笔记本需要使用Fn才能用,很麻烦,所以干脆不用网上那些配置自己来弄

bind [-c class] key [command [args]]
这就是在配置文件中绑定键的函数
至于command有什么,可以在screen的C-a ?中查看全部

bindkey

这是bindkey如何进行操作

If the ‘-d’ option is given, bindkey modifies the default table,
‘-m’ changes the copy mode table and with neither option the user table is selected. 

pdf版本的说明文档给了样例

bindkey -k F1 command
Make the F11 (not F1!) key an alternative screen escape (besides ‘C-a’).

但是在我的电脑连接服务器的操作中,没有成功

有两个可能性

  1. 没有找对screenrc位置
  2. 对WSL和服务器的兼容性不太好

先讨论第一个可能性:screenrc的位置问题,确实GNU提出的screenrc所在的位置跟在我电脑上发现的位置不太一样,但是我觉得只要改了一般就肯定应该有改变。
而且有个决定性的因子确定了不是screenrc位置错误,改了C-a作为命令字符后C-a失效,但其他的也无效
所以可能性更大的在于第二个可能

现在讨论第二个可能:Screen和WSL兼容性差

我在WSL的ubuntu端口也安装了Screen,正常安装
运行Screen -S screenTest,结果:
image.png

权限不够,于是用sudo运行一下,竟然运行成功了。
image.png

然后又在GNU对screen的说明文档中反复的看,结果发现我的认知有些错误的地方。

  1. 之前输入的都是'ss'而不是ss
  2. 没看懂meta,command,escape的具体意思

然后我又参考了例子,发现使用F1是可以转义命令字符的
但是把F1换成^s,却依旧失败

于是又试了试^x,发现成功转义
然后又设置了splite和split -v。

最后配置的是

escape ^xx
bind s split
bind i split -v

测试结论

应该是WSL保留了C-s快捷键,就像F11是放大缩小一样
还是兼容性不太好,但是已经差不多满足需求了

image.png

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

无论在未来前做什么,未来都会普通的到来