网上很多地方都说TmuxGNU Screen要好用,不过无意间看到这篇Switching from tmux to GNU Screen之后,我发现GNU Screen的窗口/区域概念更好,至少是更适合我(虽然相对Tmux有不少小缺点)。

优点1: GNU Screen的窗口/区域/布局概念更适合某些场景

Tmux里面的窗口概念是: 程序是跑在pane里面的,每个window可切分成多个pane,一般我们会并行开多个window.这样每个window多半用于不同的事情.这种方式要把一个window里面的某个pane移动到另外一个windows

GNU Screen的窗口与区域关系更接近Emacs里面buffer与window的关系:

  • gnu screen里面的region相当于tmux里面的pane,而screen的window更类似于跑在tmux pane里面的程序;
  • 与tmux不同的是,一般情况下程序/窗口是隐藏的,每次只把一个程序/窗口切换到当前region来(tmux里面一般情况下所有程序都会在某个window的某个pane里面显示者,除非有其它pane被最大化导致当前pane被隐藏了)

GNU Screen里面没有tmux里面的window那样的东西,它的layout倒是跟tmux的window有点像,虽然我们可以从一个layout切换到另外一个layout,但layout只是region的容器,而不是window的容器,两个layout里面是可以查看同一个应用(window)的.

不实际操作一下的话,不一定能感受到上面的差异.网上找到两个图说明两者概念的不同,也许对读者有所帮助(来自Differences between tmux vs screen - Wesley Tanaka )

gnu screen:

tmux:

这样的好处是:

  1. 一旦确定了一个layout,剩下的大部分时候都是切换到不同的程序来工作,而不需要切换到不同程序工作时来回调整当前窗格的大小(因为我们很多时候都想让当前程序占据比较大的面积,但又未必是全屏-比如一个窗口看代码,一个窗口调试,还一个窗口查文档).
  2. 两个人(或者两个显示器)可以attach到同一个session,然后各自工作在自己的"视图"上(即可以跟不同的程序交互)-之前在windows上用putty连到开发用机的时候,我总找不到一个好方法让tmux充分利用两个显示器(putty最大化不能占据两个显示器,自己拖又麻烦,就算拖大了,有时从其它单显示器机器连上来tmux的宽度又缩回去了)

不过有几个小地方需要注意:

  1. 在当前region下,切换到一个window时,window不会自动根据当前region大小调整窗口(因为它也有可能在另外一个region里面显示),需要用 C-a F调整一下.对应命令是 fit (change the window size to the size of the current region).
  2. 要attach到一个session的话,需要用命令screen -r,但一旦这个session已经被attach了,其它客户端要attach上来,得用screen -x

优点2: zmodem集成

跟远程机器打交道时比较烦人的一个事情是上传下载文件,尤其是要传送文件的源目录或者目标目录在一个较深的路径的时候.zmodem提供一个比较便捷的方法.

至于具体用法,官方的文档Zmodem - Screen User's Manual讲得很语焉不详,这篇GNU Screen and Zmodem | Adam Monsen 写得很详细:

Send a file from the remote host to the local host:

  1. start a Screen session on the local host
  2. configure Screen to “catch” zmodem traffic (CTRL-A:zmodem catch)
  3. execute sz FILE from the command line
  4. hit when Screen brings up the default receive command (:!!! rz -vv -b -E)
  5. bam, the file is available on the local host!

Send a file from the local host to the remote host:

  1. start a Screen session on the local host
  2. configure Screen to “catch” zmodem traffic (CTRL-A:zmodem catch)
  3. execute rz from the command line (no need to specify filename)
  4. add local filename when Screen brings up the default send command(:!!! sz -vv -b), then hit
  5. bam, the file is available on the remote host!

从描述上来看,从远端发送一个文件到screen这边还算比较方便,因为大多数情况下我们在远端机器上已经进入了文件所在的目录,只需要直接发起 sz FILE 就可以了,screen接收后就存放在它的"当前目录";不过从screen发送一个文件就有点不爽,因为这里要输入待发送文件的全路径,这里并没有一个浏览文件的功能.

其它小问题

纵向分割

网上很多比较gnu screen和tmux的文章都列了一个理由是gnu screen不支持纵向分割.不过4.2.0版本(Apr/17/2014)已经支持了( /'-v' parameter to 'split' command for vertical splits/ ).

另外有一点提醒一下: 在漫长的4.1.x时代,一些发行版集成了一个第三方补丁来支持纵向分割,当时实现的纵向分割命令是vert_split(而4.2.0版本里面实现的是split -v).如果你的screen不支持split -v,那么可以试试有没有vert_split这个命令.

鼠标

mousetrack on命令即可开始鼠标支持(用C-a :输入,或者放入~/.screenrc),开启后可以用鼠标切换region.

但它没有tmux的鼠标能力强,不能mouse-select-window的功能(即使你将hardstatus配置为显示window列表,也不行),也不能mouse-resize-pane

~/.screenrc 里面加入 termcapinfo screen*|term* ti@:te@ 可以让screen支持用鼠标滚轮来回滚scroll buffer(注意设置此选项需要重启screen session,而即时通过C-a :来输入是不行的),但与tmux不同的是它不会自动进入copy-mode, 也就是说需要用C-a[进入copy-mode后鼠标滚轮才有作用. 对于上述配置的详细解释请参看Using the scrollwheel in GNU screen - Stack Overflow

Emacs用户

如果你是emacs用户,要设置以下几个选项:

  • escape ^Bb 将热键改为C-b, 按C-b b的时候才向里面的应用程序发送C-b.因为默认的C-a在Emacs和命令行里面用的还是比较多的如果这个
  • vbell off 不想在C-g的时候看到什么闪屏,就设置这个吧
  • defflow auto 不想让C-s把屏幕锁住,就需要这个,具体请查看: Flow Control - Screen User's Manual
  • 如果你在Emacs里面用了F12, F9这些功能键的话,不要用ubuntu的byobu(除非你愿意去修改某一方的快捷键)

参考资料

基本入门

gnu screen 与 tmux 比较

速查卡

从Tmux 转到GNU Screen的更多相关文章

  1. GNU Screen Usage

    分屏: 1.在终端输入screen命令 2.Ctrl+a 然后shift+s 上下分屏,切换到下方Ctrl+a tab然后新建一个window(Ctrl+a c) 3.切换到上方,Ctrl+a tab ...

  2. GNU Screen使用入门

    前些天开始学习使用GNU Screen程序,发现这个工具在管理服务器时候确实挺方便的,于是写一篇文章总结一下,顺便介绍Screen的基本使用方法. 简介 GNU Screen是 一个基于文本的全屏窗口 ...

  3. GNU Screen使用

    基本使用 SSH时可以方便地resume工作 # open new screen session screen # restore screen -r  Steps Using GNU Screen ...

  4. gnu screen的用法

    在使用ssh或者telnet登录远程主机后执行一些耗时的命令, 如果此时ssh或者telnet中断, 那么远程主机上正在执行的程序或者说命令也会被迫终止. screen能够很好地解决这个问题, scr ...

  5. tmux/screen里面如何用鼠标滚轮来卷动窗口内容

    tmux里面用鼠标滚轮来卷动窗口内容 在 tmux里面,因为每个窗口(tmux window)的历史内容已经被tmux接管了,所以原来console/terminal提供的Shift+PgUp/PgD ...

  6. tmux frequently asked questions

    tmux frequently asked questions How is tmux different from GNU screen?     tmux and GNU screen have ...

  7. 在tmux会话之间共享窗口(Windows & Panes)

    去年写过一篇 从Tmux 转到GNU Screen,理由是我可以 在两个显示器上通过PuTTY连接到同一个GNU Screen会话,但两个显示器可以显示不同的窗口(用GNU Screen的术语来说,是 ...

  8. tmux的使用

    tmux的使用 1: tmux的介绍     tmux是一个优秀的终端多路复用软件,类似GNU Screen,但来自于OpenBSD,采用BSD授权.使用它最直观的好处就是,通过一个终端登录远程主机并 ...

  9. 谁需要GUI?快看Linux 终端生存之道

    完全在 Linux 终端中生存并不容易,但这绝对是可行的. 处理常见功能的最佳 Linux shell 应用 你是否曾想像过完完全全在 Linux 终端里生存?没有图形桌面,没有现代的 GUI 软件, ...

随机推荐

  1. Java 第一课

    怎么去学习java: 1,课前预习,加深对课上学习的吸收! 2,课后预习,让我们能够对所学内容的掌握! 3.通过画流程图,锻炼逻辑思维能力,学会从程序员的角度去看到问题,摒弃以前的惯性的思维方式!

  2. Cocos2d-x Application Wizard for Visual Studio User Guide

    0. Overview Cocos2d-x-win32's project can be generated by Wizard. Wizard supports Visual Studio 2008 ...

  3. PHP通过文件存储来实现缓存

    在一些数据库数据记录较大,但是服务器有限的时候,可能一条MySQL查询就会好几百毫秒,一个简单的页面一般也有十几条查询,这个时候也个页面加载下来基本要好几秒了,如果并发量高的话服务器基本就瘫痪了,造成 ...

  4. libqrencode 3.4.3 发布,二维码的C解析库

    libqrencode 3.4.3 的命令行增加了 --rle 参数,修复了开发库和命令行工具的一些小 bug. libqrencode (QRencode) 是一个用C语言编写的用来解析二维条形码( ...

  5. 个性二维码开源专题<基础篇>

    二维码原理介绍: 二维码为什么是黑白相间的?黑色表示二进制的“1”,白色表示二进制的“0” “我们之所以对二维码进行扫描能读出那么多信息,就是因为这些信息被编入了二维码之中.”黄海平说,“制作二维码输 ...

  6. 用c#开发微信(2)扫描二维码,用户授权后获取用户基本信息 (源码下载)

    本文将介绍基于Senparc.Weixin微信开发框架来实现网页授权来获取用户基本信息.先生成包含授权及回调url信息的二维码:用户用微信扫描之后,被要求授权以获取Ta的用户基本信息:用户授权后,通过 ...

  7. 跟我一起学WCF(9)——WCF回调操作的实现

    一.引言 在上一篇文章中介绍了WCF对Session的支持,在这篇文章中将详细介绍WCF支持的操作.在WCF中,除了支持经典的请求/应答模式外,还提供了对单向操作.双向回调操作模式的支持,此外还有流操 ...

  8. Asp.Net MVC Filter 实现方式和作用范围控制

    MVC中的Filte 简单又优雅的实现了AOP ,在日志,权限,缓存和异常处理等方面用的比较多.但本文不是讨论Filter这些功能点,而是总结Filter实现的方式.说实现也不太准确,也就是它的呈现方 ...

  9. 【shell脚本】显示文件的偶数或奇数行

    # Dispaly the odd line. awk 'NR%2==1' file

  10. 选择哪种方式进行SharePoint的备份

    关于SharePoint的备份还原功能,大家可能都有所了解.但是SharePoint一共有多少种备份方式呢,哪种备份方式是更适合你的呢,本文主要为大家梳理,并且深入的研究一下常见的几种备份方式,以便大 ...