| ホーム >> | UNIX >> | screen |
参考: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を確認するには
[prefix] wとする。 ウインドウの最下部に数字とウインドウのタイトルが表示される。
0 tcsh 1- telnet 2* gnuplot*マークは現在開いているwindow、-マークは一つ前に開いたwindowを示す。
ウインドウが多くなってくると最下部に表示しきれなくなるが、
[prefix] "ですべて確認できる。
ウインドウの移動方法は、
[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 | 直前の検索を繰り返す |
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に割り当てることが出来る。 分割するには、
[prefix] S
とします。上下に分割されるので、その2つの領域間を移動するには
[prefix] [tab]
とする。分割した領域を1つにまとめる場合、
[prefix] Q ・・・現在の領域以外を消す [prefix] X ・・・現在の領域を消す
時間を表示するには、
[prefix]+t
ステータスラインを常駐させるには .screenrc に
hardstatus alwayslastline "%H[%n] [%w]"
と書きます。
参考:[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'
どの環境でも起こる訳ではないが、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が読み込まれ、そこで設定した環境変数はログインシェルから開いたシェルに引き継がれる。ところが、screenを起動しても.bash_profileに書かれている設定が反映されない。
これを避けるには.screenrcに
shell -bash または shell -$SHELLと書くとよい。
起動時に設定する場合は、
$ screen -s bashとすればよい。