screenとは?

UNIX用のソフトウェアです。

screenを使うとコンソールでもウィンドウシステムを使ってるかのように簡単に端末を生成・廃棄、端末間移動ができ並行して作業することができます。また端末間で文字のコピー・ペーストもでき、ログをとるのも簡単です。コンソールで作業している方には必須のソフトだと思います。

インストール

RPMとかdebとか使いこなしてる方はそれらのツールを使ってインストールして ください。ここではそれらのツールを使わないインストールの仕方を紹介します。

1.screen-version.tar.gzをゲットする

ftp://sunsite.sut.ac.jp/pub/archives/gnu/screen/
ftp://ftp.ring.gr.jp/pub/GNU/screen/
fresh meat

他のFTPサイトでも大体/pub/GNU/screenにあると思います。バージョンは最新の物を持ってこればいいのではないでしょうか。

2.展開する

gzip -d screen-version.tar.gz
tar xvf screen-version.tar

screen-version/が出来ると思います。中に移動してください。

3.コンパイル

./configure --help
オプションの確認。

./configure オプション(--prefix=/usr/localなど)
make
make install

少しまてばコンパイルが終わるはずです。bin/screenがscreen本体です。

コンパイルに失敗したら・・・よくあるのはincludeファイル関係の不都合です。その場合-Iでディレクトリ検索パスを増やしたり、ヘッダファイルを検索するディレクトリが重なって正しい方が隠れてないか調べたり、未宣言エラーが出る個所直前にincludeを書き足すとかする(未定義なIDが定義されてるファイルを/usr/includeからgrepで検索してincludeする)と上手くいくことが多いようです。

それでも無理な場合ディストリビューションを別の実験パーティションにインストールしてバイナリ(screen)を取ってくるという手があります。
(ダイナミックライブラリに注意してください)

screenで端末を渡り歩こう!

screenを実行すると変な画面が出てきますが、ENTERかSPACEを押せば 先に進むことができます。

まずは試しにemacsを起動して、その後^A(CTRLとA)を押してCを入力してください。
(^Aというキーバインドはemacs使いの人には気に入らないと思いますが 変更の仕方は後で書きますので、とりあえず^Aでテストしてみてください)

shellのコマンド待ち画面に戻りましたか?それはscreenが新しく画面(端末)を生成してshellを起動したからです。今度は^Aを押してpを入力してください。さっきのemacsの画面に戻ったでしょうか?

この様にscreenを使うとウィンドウシステムを使ってるかのように作業する画面を生成・廃棄でき平行して作業することができます。

基本的な操作としては以下があります。

キーバインド 効果 コマンド名
^A-c 画面(端末)の新規生成 screen bash
^A-p 前の画面に移動 prev
^A-n 次の画面に移動 next
^A-^A 直前作業していた画面に戻る other
^A-[0-9](^A-数字) 数字の画面に移動 select [0-9]
^A-w 画面の一覧の表示 windows

コマンドラインから「screen プログラム名」を打ち込むと画面を生成して プログラムを名実行できます。
(単に「screen」と打ち込むとシェルが起動します)

この時-tで画面に名前をつけることが出来ます。
(screen -t "working_shell" bashとか)

起動したプログラムが死ぬとその画面も死にます。

画面には数字が割り当てられていて(0〜9の10個まで)windowsコマンドで見ることができます。
*がある画面が現在作業中の画面です。その番号をselectコマンドで指定すれば好きな画面に移動できます。画面が多いときに便利です。prev, nextはこの番号を増減させてるだけです。otherはこの番号に関係なく直前作業していた画面に戻れるので 連続して使えば2つの画面の間をクルクル回ることができます。 普段はこれを使用することが多いでしょう。

とりあえず、これだけのコマンドで端末を渡り歩くことはできるように なったと思います。

.screenrcでscreenを自分好みにしよう! part.1

まずホームディレクトリに.screenrcを作成してください。

起動キーの変更例

escape ^Z^Z

^Aから^Zに変更

escape @@

@に変更

escape \\\\

\に変更

escape \033\033

ESC(ASCIIコードで8進数33のキー)に変更

キーバインドの変更

bind n screen -t "new term" bash

^A-nで新しい画面を生成してbashを実行。画面の名前はnew term。

bind e screen -t "memo" emacs $HOME/memo

^A-eで新しい画面を生成して「emacs $HOME/memo」を実行。画面の名前はmemo。 この様にコマンドをキーに割り当ててランチャーのようにも使えます。

bind o other

前の作業画面に戻るを^A-oに変更

bind b prev

画面番号一つ前に移動を^A-bに変更

bind ' ' select 0

画面0への移動を^A-スペースーに変更

キーバインドの変更2(bindkey)

bindは起動キーの後に押すキーにコマンドを割り当てられましたが、bindkeyでは直にコマンドを割り当てられます。ただし起動中のソフトにそのキーを送ることができなくなります。

bindkey a select 0

aを押すと画面0へ移動します。
(その画面のプログラムにはaを送ることができなくなります。)

bindkey -k k1 command

commandは実行されると起動キーを押した直後と同じ状態になります。つまりこの場合はF1を起動キーのように使うことができるようになります。

bindkey \033' ' command

(Meta-spaceを起動キーのように使う)

端末の壁を越えてコピー&ペースト!(ついでにヒストリ)

1.^A-[ (copyコマンド)でコピーモードにします。

カーソルを画面上好きなところに動かせるようになります。
(上に移動していけば今までの標準出力のヒストリを見ることもできます。)
コピーしたい文字の先頭に移動しましょう。初期設定ではviのキーバインドになってます
(h 左移動 l 右移動 ^A 行頭へ $ 行末へ ^U 上へスクロール ^D 下へスクロール)

2.リターンorスペースを押す

押したあとカーソルを動かすとコピーする部分が反転する様になります。

3.コピーのしたい部分の最後にカーソルを動かす。

4.リターンorスペースを押す

これでコピーができました。

5.挿入したい位置に移動して^A-] (pasteコマンド)でペーストする。

ペーストできましたか?結構凄いですね。もちろん別の画面に移動してからでもペーストできます。

キーバインドの変更例

bind c copy
bind p paste .

pasteのあとには.(ドット)が必要みたいです。これがないとレジスタを指定してくれと 毎回screenに言われます。

markkeys 'h=^B:l=^F:^A=^A:$=^E'

コピーモード時のカーソルの移動をemacsライクに変更

.screenrcでscreenを自分好みにしよう! part.2

startup_message off

起動時にでるメッセージを表示しないようにします。

hardstatus on

hardstatus alwayslastline "screen |%c %m/%d | %w"
最下部にステータスバーみたいなものをを表示します。書き込む内容は 好きにカスタマイズできます。非常に便利。
%cとかはマクロで

%c (time) %m (month) %M (month name) %d (day) %D (weekday) %w 画面一覧

という意味です。他にもたくさんあったのでman, infoやgoogleで調べてみてくださ い。

msgwait 秒

メッセージを表示する時間、表示する最低時間です。

shell bash(tcsh, zsh..)

「screen」のみ打ち込んだときに起動するシェルを設定します。

defscrollbask

標準出力を保存する長さを設定できます。
(コピーモードにしたときに戻れる大きさ)

defencondeing (eucJP...)

エンコーディングの指定を行えます。

logfile パス(ファイル名)

標準出力のログを保存するファイルを指定できます。 同名のファイルがある場合上書きじゃなく追加されていきます。
この中には%mなどのマクロも使えるので例えば

logfile "/home/hoge/log/screen%d_%m(%y).log"

とすれば日付ごとにログを保存していけます。

hardcopydir パス(ディレクトリ)

hardcopyで作成されるファイルを保存するディレクトリを設定できます。

その他のコマンド

kill

現在作業してる画面を消します。走ってるプログラムが制御不能になっても消せるの で重宝します。

redisplay

最描写です。

lockscreen

画面をロックします。

hardcopy

現在の画面の表示内容がhardcopy.[0-9](画面番号)という名前で保存されます。 そのままだとカレントディレクトリにファイルが作られますが 保存するディレクトリは前述のhardcopydirで変更することが出来ます。

log

標準出力のログをとり始めます。もう一度実行するとログを取るのを止めます。 これはキーにバインドするんじゃなくて .screenrcに書いてscreenが起動し始めると同時にログを とるようにしとくといいでしょう。 保存する場所は前述のlogfileで変更することが出来ます。

title

画面の名前を変更します。

colon

コマンド入力モードにします。プロンプトがでてくるので コマンドを打ち込むと実行できます。

clear

画面を消去します

detach

セッションの状態を保持したままscreenを停止します。復帰はコマンドラインからscreen -rです。(detach->logout->login->screen -rが可能)複数のセッションをdetachした場合screen -lsやpsでdetachされたscreenのPIDを調べてscreen -r PIDを実行すれば復帰できます。

split

ディスプレイを分割します。

focus

分割した別のディスプレイに移動。

remove

分割したディスプレイを消去。