理工系研究者のための Mac OS X, Windows, Linux メモ
 
ホーム >> UNIX >> screen

screenの使い方

  1. はじめに
  2. 起動方法、初期設定
  3. windowの管理
  4. カット&ペースト
  5. Detach と Attach
  6. windowの分割
  7. その他(Tips)
  8. トラブルシューティング
    • Deleteキーが働かない
    • 起動時にウインドウサイズが変化するのを抑制
    • .bash_profileを読み込まない

参考:screen memo
  :もうscreenが無ければ生きてゆけない
  :screenのススメ
  :screenの覚書
  :screenを使う(仮題)


はじめに

screenコマンドを使うと、一つの端末の中に仮想的な端末を作ることができる。screenコマンドで「セッション」を作成し、その上に複数の「ウインドウ」を開くことができる。

もう一つの重要な機能は、セッションを切断できること。ある端末で作業をしていて、一度中断したとする。その後、別の端末からリモートログインして、そのセッションに接続し直して作業を続けることができたりする。

起動方法、初期設定

screenコマンドの各ユーザー毎の設定ファイルは ~/.screenrcなので、このファイルを作成し次の様に書き込む。

defkanji utf8
kanji utf8
escape ^t^t

1,2行目はシェルで使う漢字コードをEUCするための設定。 3行目はscreen機能の呼び出しキーをControl-t(C-t)に設定する。 他のアプリケーション等でC-tを使いたいときは、C-t C-t と押せばよい。 以下、Controlキーを押しながらtを押すときは「^T」と表記する。 またscreen機能呼び出しキー(ここでは^T)を[prefix]と表記する。

screenを起動するには、

$ screen
とする。 screenのを起動したシェルから
$ screen command
とすると、新しいwindowを開いてコマンド(command)を実行する。 新しいwindowを開くにはシェル上で[prefix] cとする。

windowを閉じるには、シェルの場合は exit する。強制的に閉じるには[prefix] Kとする。

windowを切り替える

開いているwindowを確認するには

[prefix] w
とする。 ウインドウの最下部に数字とウインドウのタイトルが表示される。
0 tcsh  1- telnet  2* gnuplot
*マークは現在開いているwindow、-マークは一つ前に開いたwindowを示す。

ウインドウが多くなってくると最下部に表示しきれなくなるが、

[prefix] "
ですべて確認できる。

ウインドウの移動方法は、

また、各windowのタイトルを変更するには、次の様にキーを押す。

[prefix] A

カット&ペースト

シェル上の文字をコピーする場合には、まずコピーモードに入る。

[prefix] [ または [prefix] [esc]
カーソルをvi式にhjklキーで動かしてコピーの始点で[space](または[return])を押す。 そしてコピーの終点で2回目の[space](または[return])を押す。 2回押すとコピーモードを抜けるので、ペーストしたい場所にカーソルを持って行き、
[prefix] ]
と押す。 途中でコピーモードを抜けるには、[esc]を押す。

その他コピーモード内で利用できるコマンドの一部をまとめる。

0 / $ 行頭移動/行末移動
g / G 先頭行に移動/最終行に移動
^u / ^d 半画面づつ上/下にスクロール
^b / ^f 一画面づつ上/下にスクロール
^s / ^r 前方/後方検索
n 直前の検索を繰り返す

Detach と Attach

screen を起動した状態で、

[prefix] d または [prefix] ^D
とする。すると、screenを起動する前のシェルに戻る。 screenはバックグランドで動いている。これを「デタッチ」と言いう。デタッチしたセッションを確認するには、

$ screen -ls
とする。すると、次の様に表示される。

~[161]% screen -ls
There is a screen on:
        924.ttyp1.hostname       (Detached)
1 Socket in /tmp/uscreens/S-username.

数字の924がセッション番号。 この後、ログアウトしたとしてもセッションは維持される。 デタッチされたセッションを呼び出すには、

$ screen -r 924
とする。 924の部分はセッション番号を書く。 セッションをscreen -lsで確認したときに1つだけしかなければ、セッション番号は省略できる。

別の場所でアタッチされているセッションに接続する時にはあらかじめデタッチする。 オプション -d を付けると接続が切れる。

$ screen -d 924
$ screen -r 927

アタッチされているセッションに、さらにアタッチすることもできる。

$ screen -x 924

windowの分割

シェルを上下に分割し、それぞれを別のwindowに割り当てることが出来る。 分割するには、

[prefix] S

とします。上下に分割されるので、その2つの領域間を移動するには

[prefix] [tab]

とする。分割した領域を1つにまとめる場合、

[prefix] Q ・・・現在の領域以外を消す
[prefix] X ・・・現在の領域を消す

その他

時間を表示するには、

[prefix]+t

ステータスラインを常駐させるには .screenrc に

hardstatus alwayslastline "%H[%n] [%w]"

と書きます。

トラブルシューティング

Delete キーが働かない

参考:[tlinux-users-j:02802]便利な shell いろいろ

ターミナル rxvt を使っていると、screenを起動した時にdeleteキーがうまく働かない。 普通は deleteキーが backspace になっているが、screen上では「~」になっていた(ビープ音を伴う)。

まず C-v delete を打って何が表示されるか確認する。 screen を起動していないときは「^?」だが、screen を起動していると「^[[3~」になっていることが分かる。 cshの場合は bindkey で修正できます。

% bindkey '^[[3~' backward-delete-char

また他のキーバインドを確認するには、単に

% bindkey

する。

bashでは bindkey の代わりに bind を使う。

$ bind '"^[[[3~":backward-delete-char'

起動時にウインドウサイズが変化するのを抑制

参考:SCREEN SETTINGS

どの環境でも起こる訳ではないが、FreeBSD上で起こることがあった。screen を起動すると

Aborted because of window size change

というメッセージと共にウインドウの横幅が小さくなる。これを避けるには ~/.screenrc に

termcapinfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'

を書いておとよい。理由はよく分からない。

.bash_profileを読み込ませるには

ログインシェルを開くときには.bash_profileが読み込まれ、そこで設定した環境変数はログインシェルから開いたシェルに引き継がれる。ところが、screenを起動しても.bash_profileに書かれている設定が反映されない。

これを避けるには.screenrcに

shell -bash または shell -$SHELL
と書くとよい。

起動時に設定する場合は、

$ screen -s bash
とすればよい。