# screen

##### screen 常用指令

```
啟用 screen
#> screen
or
#> screen -S <session-name>

列出所有 session
#> screen -ls

取回 (resume) 某個 session
#> screen -r <session-id>

無法取回 session 時，先 deattach 在 resume
#> screen -D <session-id>
#> screen -r <session-id>

強制終止 session
#> screen -X -S <session-id> kill

結束 screen 的 session
#> exit

進入複製模式，可複製視窗上指定的文字，操作方式：
使用方向鍵任意移動游標，按一次 space 開始標記游標的文字，再按一次 space 結束標記文字並離開複製模式。
Ctrl-a + [
要貼上剛複製的內容
Ctrl-a + ]  

重新載入設定但不重啟
Ctrl-a + :source ~/.screenrc
```

##### screen 用來連接 RS232

```shell
screen /dev/ttyACM0 115200
```

TIP: 如果出現 *screen is terminating*，須改用 sudo。

##### 環境配置檔

~/.screenrc：

```
# Start message
startup_message off

# Disable vbell
vbell off

# Set hardstatus always on
hardstatus alwayslastline " %-Lw%{= Bw}%n%f %t%{-}%+Lw %=| %M %d %0c:%s "

# Set default encoding using utf8
defutf8 on

# 
term xterm

# Set the number of scrollback lines
#defscrollback 10000

# Add Keyborad bindings
bind , title

# Fix termcapinfo for xterm to allow column resizing
# xterm emulation is used by PuTTY
# Uncomment the line below if running on CentOS 6.x/7.x 
#termcapinfo  xterm Z0=\E[?3h:Z1=\E[?3l:is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l

# Fix termcapinfo for cleaning the terminal after detach
# Uncomment the line below if running on AIX 7.x
#termcapinfo xterm*|rxvt*  te=\E[?1049l:ti=\E[?1049h:
```

> TIPs:
> 
> start\_message 關閉開啟後的提示訊息
> 
> vbell 關閉可以避免按 tab 出現閃畫面
> 
> hardstatus 在畫面下方固定顯示視窗編號，非常實用的功能
> 
> defscrollback 回捲內容的行數

#### 進入 screen 模式後指令

##### 基本操作

離開 screen 但不中止 session (deattach)

Ctrl-a + d

離開 screen 並中止 session

Ctrl-a + k

##### 複製模式

進入複製模式，可複製視窗上指定的文字，操作方式：  
使用方向鍵任意移動游標，按一次 space 開始標記游標的文字，再按一次 space 結束標記文字並離開複製模式。

Ctrl-a + \[

貼上剛複製的內容

Ctrl-a + \]

##### 多視窗操作

水平切割 &lt;Ctrl-a&gt; + |

垂直切割 &lt;Ctrl-a&gt; + S

切換視窗 &lt;Ctrl-a&gt; + tab

目前視窗最大化 &lt;Ctrl-a&gt; + Q

移除目前視窗 &lt;Ctrl-a&gt; + X ;這不會終止 session

##### 多個終端機操作

新增一個 screen 終端機

&lt;Ctrl-a&gt; + c

或者是在目前的 screen 終端機再執行一次 screen  
NOTE：如果已經 deattach，再執行 screen 時，會開啟另一個不同的 screen 終端機

- 每新增一個視窗，新的編號會從最小且沒有在使用的號碼開始，例如： 
    - 現有 #0, #1, #2，新增後的編號為 #3
    - 現有 #0, #2, #3，新增後的編號為 #1
- 不管新增多少個視窗，只要沒有做 deattach，所有開啟的視窗都屬於同一個 screen 終端機

檢視目前已開啟的所有視窗

&lt;Ctrl-a&gt; + w

- 視窗編號從 0 開始依序
- 顯示 ＊ 符號為目前使用的視窗編號

移動至前一個或後一個終端機

&lt;Ctrl-a&gt; + p 前一個 (視窗編號減一)

&lt;Ctrl-a&gt; + n 後一個 (視窗編號加一)

&lt;Ctrl-a&gt; + 視窗編號

#### Q &amp; A

##### 用 Putty 連線，每次 attach 時，視窗都會自動縮回預設大小

將設定檔以下這行移除註解

```
termcapinfo  xterm Z0=\E[?3h:Z1=\E[?3l:is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l 
```

##### 用 tab 時，畫面都會閃一下，該如何解決

在 $HOME 目錄內新增 .screenrc

```
vbell off
```

##### 如何很快的確認，目前是否在 screen 終端機內

Ctrl + a + a

- 如果已經 deattach 終端機，畫面不會有任何變化。
- 如果是在 screen 終端機內，有多個開啟視窗時，會切換到前一個視窗；只開啟一個視窗時，畫面會出現 'No other window'。