Linux screen标题显示screen id(即pid)

      screen是一个很不错的工具,有一个功能非常吸引我,就是可以保留shell终端和多屏幕,比如从自己PC ssh到远程Linux工作,突然间网断了,或者自己PC重启了,重新ssh到远程Linux之后再attach到之前的screen就可以继续之前未完成的工作了。家里网络经常抽风,正在写代码时突然网就断了,screen的这个功能对我非常有用,如果没有这个之前的工作可能就会因为断网而丢失了。再比如,在公司电脑ssh到自己的vps写一些东西,如果启了screen,那下班回家ssh上去再attach到之前的screen就可以继续之前的工作了。还有一个比较不错的功能是在screen里面Ctrl+a c就可以创建多个屏幕,相当于多个ssh终端了,如果用putty的话就可以不用启一堆putty窗口而只需要一个就可以了。但有时候我也比较喜欢启多个screen,每个screen里面只做一个比较专一的工作,这个工作可能持续比较长时间,工作一多时间一长之后可以就会启了很多screen,比如下图:


        attach到id为810的这个screen(命令: screen -dr 810)


        上图中的caption title(即标题)的信息比较有用,特别是screen id,当正在写代码 网络抽风重新attach时就需要screen id,那这个显示screen id(pid)是怎么配置的呢,当然是跟配置文件有关啦。配置(路径:/etc/screenrc或者/usr/etc/screenrc或者~/.screenrc)如下:

caption always "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%H %Y-%m-%d %c %p"
        其实就是在caption中配置%p,但是,只有screen-4.2.1以上才支持,screen-4.0.3不支持。起初我是在我的ubuntu vps里用apt-get安装了screen,怎么配置就是不显示screen id,关键是不知道screen id对应caption的哪个配置项,无奈只能下载源码来瞧瞧(幸好下载的是最新版),grep一通之后,找到了解析的代码(在screen.c的函数MakeWinMsgEv函数里面):


        找到了这个代码之后就很确信要显示screen id(其实就是pid,上面的getpid()也很显然,screen id是一个比较抽象的说法)就得在caption中配置%p了,但是用apt-get安装的screen怎么搞都无法显示,看一下apt-get安装的不是最新的版本而是screen-4.0.3,再次下载screen-4.0.3源码下来看的确是没有解析%p,这下明白了,只能源码编译安装最新版本了。源码编译安装screen-4.2.1之后screen id也能显示了,这个问题终于解决掉了,但新问题又来了,一是vim配色无效,二是screen -ls不显示创建screen的时间,如下图:

        对比一下之前的图就可以发现vim里颜色不对,也是花了点时间google才知道需要在configure的时候要加入--enable-colors256才支持vim的配色,这个问题也解决了。那最新版的screen -ls为什么不显示screen启动时间呢,apt-get安装的版本是可以显示的啊,其实这个问题不影响使用可以不用管,但遇到问题不解决掉心里不踏实,还是花点时间研究一下吧。起初我以为是命令行参数可以控制是否显示启动时间,但是man里面也没有说,还是从代码里找原因吧。当执行命令screen -ls的时候,核心函数是FindSocket(在socket.c文件中),从最新版的FindSocket函数来看的确是跟时间没有什么关系,那apt-get安装的版本为什么能显示呢,需要对比一下代码,apt-get source screen下载好代码对比之后发现原来是这个版本打了补丁,那想要显示screen启动时间就好办了,把能显示启动时间的FindSocket函数相关代码拷贝过来替换一下就可以了。这个需求量应该不大,代码不贴了。

        最后,贴一下我的screenrc配置:

#
# Example of a user's .screenrc file
#

# This is how one can set a reattach password:
# password ODSJQf.4IJN7E    # "1234"

# no annoying audible bell, please
vbell off
vbell_msg "   Wuff  ----  Wuff!!  "

term screen-256color

startup_message off

pow_detach_msg "Screen session of \$LOGNAME \$:cr:\$:nl:ended."

defscrollback 10000
hardstatus off
termcapinfo xterm*|linux*|rxvt*|Eterm* OP
termcapinfo xterm* 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'

termcapinfo xterm 'vi=\E[?25l:ve=\E[34h\E[?25h:vs=\E[34l'
termcapinfo wy75-42 xo:hs@
termcapinfo wy* CS=\E[?1h:CE=\E[?1l:vi=\E[?25l:ve=\E[?25h:VR=\E[?5h:VN=\E[?5l:cb=\E[1K:CD=\E[1J
termcap  vt100* ms:AL=\E[%dL:DL=\E[%dM:UP=\E[%dA:DO=\E[%dB:LE=\E[%dD:RI=\E[%dC
terminfo vt100* ms:AL=\E[%p1%dL:DL=\E[%p1%dM:UP=\E[%p1%dA:DO=\E[%p1%dB:LE=\E[%p1%dD:RI=\E[%p1%dC
termcapinfo linux C8

attrcolor b ".I"
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E38;5;%dm'
defbce "on"

bind ^k
bind ^\
bind \\ quit
bind K kill
bind I login on
bind O login off
bind } history

register [ "\033:se noai\015a"
register ] "\033:se ai\015a"
bind ^] paste [.]

hardstatus string "%h%? users: %u%?"

defnonblock 5

altscreen on
caption always "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%H %Y-%m-%d %c %p"


参考:

http://tiku.io/questions/134277/vim-colorschemes-in-screen-putty

http://blog.csdn.net/xocoder/article/details/9173845

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值