複数のマシンで相互に、コマンドシェルを共有したりウィンドウシステムを導入に画面を分割したりするなど、コマンドシェル環境を飛躍的に向上。複数人で同時に同じ画面(コンソール)を共有できるマルチアタッチ機能が秀逸。
# wget http://ftp.gnu.org/gnu/screen/screen-4.2.1.tar.gz # tar zxvf screen-4.2.1.tar.gz # cd screen-4.2.1 # ./configure # make # make install
※ここは、好みに応じて。 Ctrl+aと組み合わせて様々なコマンドを発行するのが基本だが、Ctrl+aはhomeキーとして利用しているため、Ctrl+zに変更する
vi ~/.screenrc # prefix キーの設定(Ctrl+aからの変更) escape ^z^z # otherコマンドがうまくうまく動かなかったので、明示的に設定してみた bind ^z other # 最終行にwindow一覧を表示 hardstatus alwayslastline "[%02c] %`%-w%{=b bw}%n %t%{-}%+w"
$ vi ~/.bashrc ... ScreenNumber="" if test "$TERM" = "screen" then ScreenNumber=" [$WINDOW]" fi PS1="\u@\h \W$ScreenNumber $ "
$ screen
で起動。
全てのwindowを閉じるとscreenが終了 ※screenでは仮想画面のことをwindowと呼びます。
接続が切れたscreenにつなぎ直すには
$ screen -r
# vi ~/.screenrc escape ^z^z bell_msg "^G" defkanji utf-8 defencoding utf-8 encoding utf-8 utf-8 autodetach on scrollback 10000 defscrollback 10000 startup_message off #hardstatus alwayslastline "%{=bB Bw}%Y/%02m/%02d [%02c] %`%-w%{=b bw}%n %t%{-}%+w" caption always "%{= wb} %-w%{=bu dr}%n %t%{-}%+w %= %{=b wk} [%l] %{=bwb}%y/%m/%d(%D) %{=b wm}%c" defhstatus "^En:^Et ^Ec" bind w windowlist -b bind r eval 'echo "Resize window"' 'command -c resize' bind -c resize ^] command bind -c resize j eval 'resize +1' 'command -c resize' bind -c resize k eval 'resize -1' 'command -c resize' bind c copy bind h prev bind j next bind s split bind S remove
※よい captionとhardstatus の例:http://yskwkzhr.blogspot.jp/2012/05/effectively-to-use-gnu-screen.html
※以下はエスケープを^Zに変更した状態での説明です。
仮想端末作成(Create) | ^Z c | |
現在のウィンドウを次の仮想端末に切り替える(Next) | ^Z n または ^Z [space] | |
現在の仮想端末の一覧表示(Window List) | ^Z w | |
指定した数字のwindowに移動 | ^z <数字> | |
現在の仮想端末ウィンドウに名前を設定する(Assign) | ^Z A | (Aは大文字) |
ウィンドウ分割(Split) | ^Z s | .screenrcで設定を変更してある |
ウィンドウ削除(kill) | ^Z k | |
ウィンドウ分割解除(Quit) | ^Z Q | (Qは大文字) |
ウィンドウ間の移動 | ^Z [TAB] | |
コピーモードに移行 | ^Z [esc] | モード終了は [esc] |
コピースタート | [space] | |
コピーエンド | [space] | |
コピーされたテキストをペースト | ^Z ] | |
screenをバックグランドで稼動させる(デタッチ) | ^Z d | screen -r で復活 |
ウィンドウサイズ変更モードに移行 | ^Z r | .screenrcに定義したコマンド |
サイズを1行分大きく | j | |
サイズを1行分小さく | k | |
終了はどのキーでもOK | [any] |
screen起動時に、コマンドを指定することができます。
$ screen [コマンド] ex) $ screen top
また、-t オプションを付けることでタイトルをつけれます。上記と組み合わせると便利です。
$ screen -t [タイトル] [コマンド] ex) $ screen -t top top
* | 現在のwindow |
- | 直前のwindow |
! | ベルが鳴ったwindow |
画面スクロールは、通常 Shift+PageUp Shift+PageDown で出来ますが、以下の方法も使い勝手が良いです。
^z [ESC] or ^z [ | コピーモード |
screenを一端抜け、後で続きを再開するには、 デタッチしたあとに、アタッチ操作をします。
^z ^d or ^z d | デタッチ(これでscreenから抜けます) |
そして、screen再開時に -r を付けます。
$ screen -r
なお、複数のscreenがデタッチしている場合、
$ screen -ls
で確認し、
$ screen -r [プロセス番号]
とします。
他の端末から強制的にデタッチさせることができます。 (職場でデタッチを忘れ、自宅から作業を継続したい場合)
$ screen -d [プロセス番号]
なお、「-D」オプションにすると、元の接続をログアウトさせれます。
また、同時にscreenに(複数で)接続することもできます。
$ screen -x [プロセス番号]
メインPCとノートPCでの同時接続など便利です。