理工系研究者のための Mac OS X, Windows, Linux メモ
 
ホーム >> UNIX >> Screen
このエントリーをはてなブックマークに追加

screenの使い方

更新日:2014.8.8
  1. はじめに
  2. エスケープキーの設定
  3. ターミナルの漢字コード設定
  4. 起動・終了
  5. windowを切り替える
  6. カット&ペースト
  7. Detach と Attach
  8. windowの分割
  9. 設定
    1. 保存する行数の設定
    2. 時刻の表示
  10. トラブルシューティング
    1. Delete キーが働かない
    2. 起動時にウインドウサイズが変化するのを抑制
    3. .bash_profileを読み込ませるには

はじめに

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

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

エスケープキーの設定

screenで使うコマンドを入力するには,エスケープキーを押した後に入力する必要がある。 エスケープキーの設定は~/.screenrcに記述するか,コマンドによって変更することもできる。

エスケープキーにはEmacsのコマンド等と重ならないものと使った方がいいので,例えばControl-tにするには

escape ^t^t
とする。^tを2つ重ねているのは,エスケープキーのControl-tを打つ必要がある場合に,Control-tを2回連続で打てば良いことを示している。

Screenの起動中にエスケープキーを再設定するには,エスケープキーControl-tを押した後,:escape ^z^zのようにコロンの後にエスケープキーの設定コマンドを打てばよい。

Screenを二重に起動してしまい,さらに二重のScreenのエスケープコマンドが同じだと,内側のScreenをデタッチできなくなって困ることがある。 この場合には,起動中のエスケープキー再設定を行って一方のエスケープキーを変更してやると良い。

ターミナルの漢字コード設定

Screenの漢字エンコーディングを設定するにはdefencoding,encodingを使う。 例えばutf-8の設定するには,~/.screenrc

defencoding utf-8
encoding utf-8
と書いておく。

バージョン3.9以前のScreenでは漢字コードの設定にdefkanji, kanjiを使っていたが今では使われていない。

起動・終了

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] "
ですべて確認できる。

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

  • [prefix] p | ^p・・・前のwindowに移動
  • [prefix] n | ^n・・・次のwindowに移動
  • [prefix] [space]・・・次の番号のwindowに移動
  • [prefix] [数字]・・・その番号のwindowに移動
  • [prefix] ^T・・・一つ前に開いたwindowに移動
また、各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 ・・・現在の領域を消す

設定

保存する行数の設定

保存する行数を1000行に変更するには ~/.screenrc に次のように書く。

defscrollback 1000

時刻の表示

時間を表示するには、

[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 /usr/bin/bash
と書くとよい。

または,起動時に

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

参考サイト・参考文献