2013
Apr
06

screen 簡介

Screen 是一個 Linux 系統上的一個軟體,可以讓使用者在 linux 中建立多個視窗,每視窗都是一個新的 Tab ,而且每個都是一個獨立的程序,在程式開發上會是很棒的功能,你可以想像瀏覽器上多個 Tab 的功能,就如同 screen 可以開多個視窗來切換工作內容,工程師能建立多個視窗,並設定每個視窗的工作目錄,或是在每個不同的視窗中,打開不同的程序,能夠同時多工,例如我習慣開一個 Tab 來寫程式,然後再開一個 Tab 來執行程式,這樣程式在執行的過程中,我就可以切換回寫程式的 Tab ,不用停在原來視窗等待程式執行。

screen 安裝

unix-like 系統可以用 yum 或 apt-get 來安裝 screen。

  • sudo yum install -y screen
  • sudo apt-get install -y screen

如果裝不成功的話,還可以自已 Compile source code ,方式如下:

  • 下載: ftp://ftp.gnu.org/gnu/screen/screen-4.0.3.tar.gz
  • 解壓 tar -zxvf screen-4.0.3
  • 進行該資料夾,開始安裝
  • ./configure --prefix=/home/program/screen --bindir=/usr/local/bin --enable-colors256
    • --enable-colors256 : 支援 256 色
  • make && sudo make install

最後輸入 "screen -RU s1" :啟用 screen ,最好先行設定 .screenrc 這個檔案 ,否則肉眼看不出 screen 切換視窗的功能, "U" 的意思是說,我要使用 UTF8 編碼,如果沒有加上 U 這個設定,有時候 screen 會出現亂碼。

.screenrc 設定

每個 Linux User 都能夠建立自已的 .screenrc ,screen 可以針對不同的 User ,而産生不同配色,以及不同的 UI 呈現方式。

.screenrc 檔案的目錄在每個 User 主目錄底下,輸入指令 vim ~/.screenrc (/home/username/.screenrc) 就能夠編輯,接下來提供一些我常用的設定內容。

熱鍵 bindkey

增加熱鍵 「Alt+z」 , 「Alt+x」切換視窗,使用這兩個快捷鍵來切換左右視窗。

  • bindkey ^[z prev
  • bindkey ^[x next

增加熱鍵 「Ctrl+左方向鍵」 , 「Ctrl+右方向鍵」切換視窗,因為每一個編輯器對快捷鍵的定義不同,所以會有下列三種設定。

  • bindkey ^5D prev # xshell
  • bindkey ^5C next #xshell
  • bindkey ^[[D prev # putty
  • bindkey ^[[C next #putty
  • bindkey ^[[1;5D prev # Cygwin , chrome ssh
  • bindkey ^[[1;5C next # Cygwin , chrom ssh

MacBook 的 Virtual Terminal 按鍵輸出有點不同,設定方式要增加下列兩種。

  • bindkey \033[5D prev
  • bindkey \033[5C next

MacBook iterm2

  • bindkey ^[[1;5D prev #Mac iterm2
  • bindkey ^[[1;5C next #Mac iterm2

在 .screenrc 中 ^[" 這個符號 代表 Escape也就是 ESC 這個鍵,它的 hex code 是 \x1b,每種 SSH Terminal 它的按鍵都有不同的定義,所以我才會針對 xshell, putty, cygwin 等提供不同的 keymap ,若是你不知道組合鍵的對應 hex code,那麼你可以下載 https://www.puritys.me/filemanage/blog_files/keys.pl 這個檔案,執行這個 perl 程式 "perl keys.pl",然後再按你的組合鍵,程式就會印出組合鍵的 hex code。

Example
  1. > perl keys.pl
  2. press 'x' to exit
  3. \x1b\x5b\x31\x3b\x32\x44

上面這個範例中,我輸入 "Alt +a",結果印出 \x1b\x5b\x31\x3b\x32\x44 ,接著你從 1 按到 10 ,再從 a 按到 z ,就會知道所有按鍵的 hex code 。

hex code key
\x1b ESC
\x5b [
\x31 1
\x3b ;
\x32 2
\x44 D

最後整個組合鍵在 .screenrc 是代碼就是 : ^[[1;2D

其它的設定

Google Chrome SSH Client 切換視窗時,切換成功的提示訊息會擋住 screen Tab ,所以加入 bell_msg 的設定,並設為空白,這樣就不會看到沒什麼用的切換提示訊息。

  • bell_msg ""

指定 screen 使用 utf8 編碼。

  • defencoding utf8

設定 screen 可以往上卷的行數 (scroll back)

  • defscrollback 10000

.screenrc 檔案內容

File ~/.screenrc
  1. # Start message
  2. startup_message off
  3. bell_msg ""
  4.  
  5. # Set default encoding using utf8
  6. defutf8 on
  7.  
  8. # Refresh the display when exiting programs
  9. altscreen on
  10.  
  11.  
  12. # Dynamic title
  13. shelltitle '$ |bash'
  14.  
  15. # hotkey win
  16. bindkey ^[z prev
  17. bindkey ^[x next
  18. # for Xshell
  19. bindkey ^5D prev
  20. bindkey ^5C next
  21. # for putty
  22. bindkey ^[[D prev #ctrl + left , move to previous window
  23. bindkey ^[[C next # ctrl+ right , move to next window
  24.  
  25. #mac
  26. bindkey \033[5D prev #ctrl + left , move to previous window
  27. bindkey \033[5C next # ctrl+ right , move to next window
  28. shell -bash
  29.  
  30. bind s
  31. #ban掉鎖定預設熱鍵
  32.  
  33.  
  34. defencoding utf8
  35. caption always "%{.KW} %-w%{.mW}[%n] %t%{.KW}%+w"
  36. hardstatus alwayslastline "%{R}[ %{w}%1` %{R}]%=%{M}%e %{G}%H %{Y} %c %{R} %d/%m/%Y %{K} Load: %l %{w}"
  37.  
  38. #term screen-256color
  39. attrcolor b ".I"
  40. termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'
  41. defbce on
  42.  
  43. screen 0
  44. select 0
  45. exec ssh-agent screen
  46. exec true
  47. source $HOME/.ssh/screen_agent

screen 使用方式

切換 window

  • 先按一下『Ctrl+a』,再按『"』,這時會進入 screen window list ,你可以使用方向鍵去選擇你要進入的 window,如果你已經有設定上個階段教你的 .screenrc ,那使用快捷鍵切換速度會快很多的!

screen 之間的 window ,如何從 A window 複製文字到 B window 呢?

  • 先按一下『Ctrl+a 』,再按『[』進入 Copy Mode。
  • 使用方向鍵移動到你要復製的文字開頭,按下『空白鍵』,這時你會看到第一個字母已經被反白。
  • 再度使用方向鍵移動到復製的結尾,按下大寫『Y』,這樣 screen 就會將你選取的內容,存到 screen buffer。
  • 切換到 B window ,先按一下『Ctrl+a 』,再按『]』,即完成貼上。

我個人比較喜歡用滑鼠來複製,比較簡單使用。

暫存 copy 內容

  • 『Ctrl+a 』,『 > 』:存下目前 copy 的內容到 screen-exchange buffer。
  • 『Ctrl+a 』,『 < 』:讀取目前 screen-exchange buffer 的內容,並存到 Copy mode buffer,之後用來貼上。
  • 『Ctrl+a 』,『 = 』:移除目前 screen-exchange buffer 的內容。
  • 『Ctrl+a 』,『 ] 』:貼上。

視窗切割

screen 除了可以建立多個 Tab 之外,還可以將視窗切割成上,下兩個,讓你一次看到兩個不同的視窗。

  • 『Ctrl+a 』,『 S 』:將原視窗分割出上、下兩個。
  • 『Ctrl+a 』,『 X 』:移除一個視窗。

Screen 預設熱鍵說明


回應 (Leave a comment)