CUIのためのウィンドウマネージャ
概要 †
GUIのウィンドウ・マネージャはいろいろあるが、これをコンソールでも同じような働きをさせることができるコマンド。 通常、対話型のシェルは ssh 等のコネクションを切断すると終了してしまうが、 実行時間の長い処理をさせたい場合や、バックグラウンドで処理を続けていたい場合には コネクションを維持しなければならず、常に起動しておく必要があるなど端末側の負担が大きい。
このため、仮想的な端末を通して表示やキー入力を行い、その仮想端末の接続と切断を自由に することで端末側の負担を減らすことができる。
コンソールで操作することのメリットとして、ローカル側のIMEを使えることもありがたい。
セッションとウィンドウとリージョン †
- 実端末から screen コマンドを起動すると「セッション」ができる
- 仮想端末から screen コマンドを起動すると「ウィンドウ」ができる
- 仮想端末から画面を分割すると「リージョン」ができる
アタッチとデタッチ †
- 仮想端末を実端末で操作している状態を「アタッチ」
- 仮想端末と実端末を切り離して仮想端末上のソフトがバックグラウンドで動作している状態が「デタッチ」
Tips †
実端末から
内容 | コマンド |
セッション一覧 | screen -ls |
セッションに接続 | screen -r |
アタッチされているセッションでも強制接続 | screen -d -r |
仮想端末内のキー割り当て
内容 | キー割り当て |
セッションをデタッチ | C-a C-d |
履歴コピーモードに入る | C-a ESC |
履歴コピーモードを出る | ESC |
リージョン作成(水平分割) | C-a S |
リージョン作成(垂直分割) | C-a | |
現在のリージョン以外を削除 | C-a Q |
ハードコピー | C-a h |
ファイルへログ | C-a H |
問題点 †
- ハードコピーを取ると日本語の部分が化ける
- プロンプトにscreenのセッション名やウィンドウ番号が出ているとうれしい
- $STY や $WINDOW といった変数がセットされるので、プロンプトに出せばよい?
- $HOME/.screenrc に hardstatus on ... を書いておくと、実端末ソフトのタイトルに出る
- セッションやウィンドウをあらかじめ決まった方法で一括作成させたい
- $HOME/.screenrc に書いておく
- C-a c コマンドで新しいウィンドウを作っても hardstatus に出ない
- 仮想コンソール上でさらに仮想コンソールにつないでしまった場合、デタッチが困難
- 別のshellから強制デタッチすれば復帰できるが面倒
- Sakuraのレンタルサーバーの方にも screen コマンドがあればうれしいのだが、入っていないようだ
リファレンス †
- Screen User's Manual
- Man page of SCREEN - バージョン 4.0.2 向け日本語版