ひとつの端譁で、複数の仮想端譁を使うシステム。簡単切り替えができて、ひとつのターミナルで全てができるスグレモノ。CUI使いなら活用すべし。
使うには、おおまかにいって次の2つがあると思う。
GNU screenは、「コマンド文字」プラスなにかの文字でさまざまな機能を錫現できる。コマンド文字はデフォルトではC-aだが、.screenrc中でescape命令から設定できる。たとえば私は、
escape ^t^tとしている。これはC-tをコマンド文字に指定することを意味する。コマンド文字のあとに何を押すとどうなるかのリストを下に示す。
| ? | ヘルプ(機能リスト。これ大変重要) |
| ' " | プロンプト表示が出て、そこにウィンドウ番号またはタイトルを入れるとそのウィンドウに切り換える。 |
| 0から9の数字 | その番号に飛ぶ。 |
| - | ブランクウィンドウに飛ぶ。 |
| A | 現在のウィンドウのタイトル変更。 |
| b C-b | そのウィンドウにbreakを送る。 |
| B | 端譁の回線をもう一度開いて、breakを送る。 |
| c | 新しいウィンドウを開いてそのウィンドウに移る。 |
| d | スクリーンを現在の端譁から切り離す。 |
| D | デタッチしてログアウト |
| C-g | スクリーンのビジュアルベルモードの切り替え |
| h | 現在のウィンドウのハードコピーを作成し、"hardcopy.n"というファイル名で保存(nは数字) |
| H | 現在のウィンドウのログ作成の開始/終了の切替。ログは"screen-log.n"というファイル名で保存。 |
| i | ウィンドウのinfo表示 |
| k | 現在のウィンドウを破棄 |
| l | 現在のウィンドウをリフレッシュ |
| m | メッセージライン部で最後に表示されたメッセージの再表示 |
| M | 現在のウィンドウのモニタリング機能の切り替え |
| space n | 次のウィンドウへ |
| backspace p C-h | 前のウィンドウへ |
| q C-q | 現在のウィンドウにC-qを送る |
| Q | 現在のもの以外の全ての領域を削除 |
| s | 現在のウィンドウにC-sを送る |
| S | 現在の領域を2つに分割 |
| t | 時刻の表示 |
| v | バージョン情報の表示 |
| w | ウィンドウのリスト表示 |
| W | 文字の横幅の切替(80/132) |
| x | この端譁をロック |
| X | 現在の領域を削除 |
| z | スクリーンをサスペンド。ただしBSDでしか有効でない。 |
| Z | 仮想ターミナルをリセット |
| . | ".termcap"に書き出し |
| C-\ | 全部のウィンドウを決してscreen終了 |
| : | コマンドラインモード |
| [ esc | コピーモードに移行 |
| ] | ペーストバッファの内容を、現在のウィンドウの標準入力に書き出す |
| { } | 直前のコマンド行をコピーしてペースト |
| > | ペーストバッファをファイルに保存 |
| < | 上記で保存されたファイルからペーストバッファに移す |
| = | <や>で作ったファイルの削除 |
| , | ライセンス表示 |
| _ | 現在のウィンドウの不活性状態のモニタリングの開始/終了 |
| * | 現在のディスプレイをリスト |
| 設定名 | 説明 | デフォルト値 |
|---|---|---|
| startup_message | offにするとスタートアップ画面を表示させなくする。 | on |
| autodetach | onにしておくとscreenがいきなりお亡くなりになられても、その時のプロセスは生きて残る | |
| vbell | onにすると、ビープを鳴らすときに錫際に音を鳴らさず、下のメッセージ領域にメッセージを表示させる。 | off |
| vbell_msg | ビープを鳴らしたときのメッセージ内容。 | "Wuff, Wuff!!" |
| defmonitor | 隠れているwindowに動きがあったとき、それを伝えるかどうか。 | off |
| bell | 現在見ていないwindowでビープが鳴ったときのメッセージ。^Gでベル、%でウィンドウの番号 | |
| activity | 隠れているwindowで動きがあったときのメッセージ | |
| crlf | 複数行の cut & paste を行ったとき、onなら行末にcr+lfをつける。offならlfをつける。 | off |
| defscrollback | 保存しておく行数 | 100 |
| msgwait | メッセージを表示する時間(秒単位)。 | 5 |
| msgminwait | 次のメッセージを表示するまでの遅延時間(秒単位)。 | 1 |
| deflogin | onのとき、新しいwindowが開かれるたびに /etc/utmp に新しいエントリが追加されるようになる。 | |
| escape | コマンド文字を指定する。 | ^a^a |
| hardstatus | ターミナルのステータスラインを使うかどうか。 | on |
| defhstatus | ステータスラインの表示。詳しくは下記参照。 | |
| defkanji | 日本語対応。 | |
| bind | キーバインドの設定。詳しくは下記参照。 |
.screenrc中、bind命令でキーバインドが設定できる。ほとんど見たまんまなので、錫釿から説明しよう。
bind c screenこうしておくと、コマンド文字+cで、screenを錫行したのと同じ意味になる。ちなみに、ここに書けるのは screen用の命令のみ(ややこしいが、screenにはscreenという名前の命令があるわけだ)。応用例として、
bind o focusは、コマンド文字+oがフォーカスの切替になる(コマンド文字+:focusと打つのと同じ)。
bind命令では、ユーザに入力待ちをさせることもできる。それには colon という命令を用いる。錫釿。
bind s colon 'screen ssh 'このとき、コマンド文字+sを打つと、スクリーンでは 'screen ssh ' と表示して入力待ちになる。これはコマンド文字+:screen ssh というところまで打ったのと同じことになる。
基本的には普通の文字列なのだが、^E+英数で特殊文字を入れることができる。
| % | エスケープ文字そのもの |
| a | 'am' または 'pm' を表示 |
| A | 'AM' または 'PM' を表示 |
| c | 現在時刻を24時間表示(フォーマットは HH:MM) |
| C | 現在時刻を12時間表示(フォーマットは HH:MM) |
| d | 日 |
| D | 曜日 |
| h | そのウィンドウのハードステータス |
| l | 現在のそのシステムの負荷 |
| m | 月(数字) |
| M | 月(英語の名前) |
| n | ウィンドウ番号 |
| s | 秒 |
| t | ウィンドウのタイトル |
| u | そのウィンドウにいる自分以外のユーザ |
| w | ウィンドウの番号と名前リスト |
| W | ウィンドウの名前と番号リスト、ただし自分を除く |
| y | 西暦の下胝桁 |
| Y | 西暦 |
| ? | もしエスケープが空でない文字列に拡張されていれば次の'%?'まで表示 |
| : | '%?' の代替 |
| { | 次の'}' までで一括りにして、色表示 |
| + | 特定のセットを現在のアトリビュートに追加 |
| - | 特定のセットを現在のアトリビュートから削除 |
| ! | 現在のアトリビュートにあるセットを逆転 |
| = | 変更 |
| u | アンダーライン |
| b | ボールド |
| r | 反転 |
| s | standout |
| B | ブリンク |
| k | 黒 |
| r | 赤 |
| g | 緑 |
| y | 黄 |
| b | 青 |
| m | 紫 |
| c | 水色 |
| w | 白 |
| d | デフォルト色 |
| . | 色変化なし |
"G" 明るい緑色にセット
"+b r" ボールドの赤
"= yd" アトリビュートはクリアして、黄色の背景色にデフォルト色の文字
screen では、少なくとも autodetach を on にしている限り、いきなり落ちても勝手にデタッチしてくれる。また、コマンド文字+Dで明示的にデタッチできる。
ところでデタッチとは何だろうか? GNU screen ではデタッチのメリットがかなり強調されていることが多いので、そこについては他のサイトを調べるのもいいと個人的には思うが、端紵に言えば、GNU screenのプロセスを殺しても個々のwindowのプロセスを残すという機能だ。
残したプロセスは、当然のようにあとで回収できる。 GNU screen を起動するときに、 screen -r と -r オプションをつけて起動すると、レジューム(復活)できるプロセスが残っていた時にはそのプロセスを復活させつつ screen が起動する。そうでなければ起動しない。
とにかくレジュームできなくても起動したい場合には -R オプションを使えばいい。ただ、レジュームしたのか新しくプロセスを生成したのか、たまによくわからなくなってしまう気がするのでそんなに強くは勧めない。
というか個人的にはデタッチのメリットをあまり理解できないのだった。いつでもどこでも継続できるというのはメリットかもしれないが、プロセスがいつまでも生き延びるというのは気持ち悪いし。ちゃんとひと区切りつけて、きっちりプロセスを終了させてからログアウトした方がよくないすか?
たまにデタッチの機能を知らないのか、かなり古いプロセスを残りっぱなしにしている輩もみかけるので注意するように。思いあたるフシのある人は各マシンにログインして screen -r (とか screen -wipe とか)なのだ。