仮想端末 screen -*- Text -*- screenはVT100/ANSI端末をエミュレートするスクリー ンマネージャである。screenを使うと、一つの端末で複 数の仮想端末を切り替えて扱うことができる。つまり、 キャラクタ端末で複数の端末を操作できるのである。ま た、画面に出力されたものをヒストリバッファに保存し ておいて、後で、copy-and-pasteをすることができる。 また、作業途中に回線が切れてしまっても、screen上で 作業しておけば、その作業を後で再開することができる。 今回は、このscreenについて説明しよう。 screenのインストール とりあえず、screenのインストールについては、最近 のものなら普通のGNUのツールと同じように、まず、 ./configure を実行して、その後、 make を実行すればよい。もしコンパイルが成功したら、 make install を実行すれば、しかるべきディレクトリにコマンドや マニュアルがインストールされる。 また、昔、fj.sources に東北大学・応情研の金子 裕 さんが作った日本語対応patch が流れていたのでそれも 当てておくとよいだろう。ただ、ドキュメントにも書い てあるとおり、完璧に対応しているわけではないので 時々文字化けなどもおこることがある。が、再表示すれ ば大抵大丈夫なので、とりあえず問題ないであろう。 screenの起動 screenを起動するには基本的には、単にコマンドラインから % screen とすればよい。こうすると例えば図1のようなメッセージ が表示される。 -----------------図1はじめ------------------------ screenの起動メッセージ -------------------------------------------------- iScreen version 3.02.00(j0. 4) b (FAU) 10/28/92 Copyright (c) 1991 Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) Copyright (c) 1987 Oliver Laumann This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 1, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program (see the file COPYING); if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. [Press Space or Return to end.] -----------------図1おわり------------------------ この後、スペースかリターンを押せば、画面が消去され てシェルのプロンプトが表示される。 ここで起動されたシェルはscreenの中で動いているシェ ルである。ちなみに ps をとってみると、図2のように なっている。つまり新たに ttyq0 がオープンされて、 そこに新しい仮想端末が生成されている。 -----------------図2はじめ------------------------ screenを起動した時のプロセス -------------------------------------------------- ukai@gobou:~$ ps PID TT STAT TIME COMMAND 2755 co IW 0:00 screen 2757 q0 IW 0:00 zsh 2767 q0 R 0:00 ps ukai@gobou:~$ ■ -----------------図2おわり------------------------ この状態で、この端末は普通の vt100端末と同じよう に扱うことができる。実際の端末が vt100 とは違うエ スケープシーケンスを解釈するものであっても、screen が termcap をみて、vt100をエミュレートしてくれる。 したがって、386BSDのconsole (pc3)のように一部のエ スケープシーケンスがないような端末でも vt100として 使うことができるようになる。したがって、screenを使 えば386BSDのconsoleで uum なども動かすことができる ようになる。 screenを終了する場合には、とりあえず仮想端末のシェ ルから exit してしまえばよい。すると、図3のように screen から抜けることができる。複数の仮想端末を開 いている場合でも、すべての仮想端末のプログラムを終 了してしまえば、screenも勝手に終了してしまう。 -----------------図3はじめ------------------------ screenの終了 -------------------------------------------------- ukai@gobou:~$ exit [screen is terminating] ukai@gobou:~$ ■ -----------------図3おわり------------------------ screen内のコマンドをすべて終了すれば、screenを終 了するのだが、「C-a C-\」(quit)としてもscreenを終 了することができる。 また、screen自体をsuspendすることもできる。 suspendする場合には、「C-a z」(suspend)とすればよ い。screenがsuspendされる。もとに戻るには、普通と 同じく fg などでもどすことができる。 screenはsuspendする以外にも、端末を一旦切り離す こともできる。「C-a d」(detach)とすれば、端末から screenを切り離して、バックグラウンドで動くようにな る。この操作をdetachという。この時、切り離した screenは実際には終了はしていない。detachしたscreen を元に戻すには、screen を起動する時に -r オプショ ンを付ける。そうすると、以前detachしたscreenでの作 業を再開することができる。複数のscreenをdetachして ある場合には、再開するときどのscreenを再開するかが わからないため、起動時に -r オプションとともに ど のscreenかを指定する。例えば、複数のscreenをdetach してある時に screen -r とすると図4のようになる。 -----------------図4はじめ------------------------ screenを複数detachしておいた時 -------------------------------------------------- ukai@gobou:~$ screen -r There are several screens on: 2811.console.gobou (Detached) 2835.ttyp0.gobou (Detached) Remove dead Sockets with 'screen -wipe'. Type "screen [-d] -r [pid.]tty.host" to resume one of them. ukai@gobou:~$ ■ -----------------図4おわり------------------------ このように detachしたscreenが、 「2811.console.gobou」と、「2835.ttyp0.gobou」の2 つがあることがわかる。console のほうのscreenを再開 する場合には図5のようにすればよい。 -----------------図5はじめ------------------------ consoleの方を再開する時 -------------------------------------------------- ukai@gobou:~$ screen -r 2811.console.gobou -----------------図5おわり------------------------ このようにして望みのscreenの再開を指定することがで きる。 detachしていなくても、端末が死んだりしてホストと の回線が切れてしまった時も、screenは勝手にdetachし た状態になっている。したがって、この時ももう一度回 線を接続しなおして、screen -r で再開すれば回線が切 れたところから作業を続けることができる。 detachと同じような動作をするのに、「C-a D」 (pow-detach)がある。これはほとんど detach と同じな のだが、detachする際に、screenの親プロセスにシグナ ルSIGHUPを送る点が違う。screenの親プロセスがlogin シェルの場合、SIGHUPを受けるとログアウトするので、 detachして一気にログアウトするような場合に使うこと ができる。 screen内で使えるコマンド screenには簡単なオンラインヘルプがついてくる。オ ンラインヘルプを見るためには、C-a ? (Controlを押し ながらAを押して、その後 ? を押す)を入力すればよい。 すると図6のような画面があらわれる。 -----------------図6はじめ------------------------ screenのオンラインヘルプ -------------------------------------------------- Screen key bindings, page 1 of 1. Command key: ^A Literal ^A: a select0 0 help ? readbuf < select1 1 histnext } redisplay ^L l select2 2 history { removebuf = select3 3 info ^I i reset Z select4 4 kill ^K k set select5 5 lastmsg ^M m shell ^C c select6 6 license , suspend ^Z z select7 7 lockscreen ^X x termcap . select8 8 log H time ^T t select9 9 login L vbell ^G aka A monitor M version ^V v clear C next ^@ ^N sp n width W colon : other windows ^W w copy ^[ [ paste ^] ] wrap ^R r detach ^D d pow_detach D writebuf > flow ^F f prev ^P - p xoff ^S s hardcopy ^H h quit ^\ xon ^Q q [Press Space or Return to end; ^A to begin a command.] -----------------図6おわり------------------------ ここで、スペースもしくはリターンを入力すれば元の画 面にもどる。 screenは基本的に、C-a で始まるシーケンスをscreen に対するコマンドにしている。ただ、C-a は、Emacs な どでは beginning-of-line に割りあてられていて結構 使うので、他のキーに割りあてておいたほうが使いやす いだろう。ちなみに筆者は C-] にしている。なお、 screenのコマンドキーを入れ替えるのには、screenの起 動時に図7のようにすればよい。 -----------------図7はじめ------------------------ コマンドキーの変更 -------------------------------------------------- ukai@gobou:~$ screen -e^]] -----------------図7おわり------------------------ このようにすれば、defaultのC-aの変わりにC-]がコマ ンドキーとなる。起動時に毎回 -e オプションを付ける のが面倒な人は ~/.iscreenrc に図8のように設定してお けばよい。 -----------------図8はじめ------------------------ ~/.iscreenrcでの書き方 -------------------------------------------------- escape ^]] -----------------図8おわり------------------------ ただし、このように C-] をコマンドキーにした場合、 そのままでは C-] を仮想端末内のプログラムに入力で きないので、telnet などを使うときに若干面倒になる ことを注意しておく。なお、コマンドキーを仮想端末内 のプログラムに入力するときは、-e オプションもしく は、.iscreenrcのescapeで指定したものを入力すればよ い。default では escape ^Aa なので、C-a a を入力す れば仮想端末内のプログラムにC-aを入力することがで きる。 それでは、screenのオンラインヘルプを見ながらscreen のコマンドについて簡単に解説する。 まず、上にある Command key: ^A Literal ^A: a は、screenの現在のコマンドキーおよびそのコマンドキー をわたす場合のキーである。この場合、^A (C-a) がコ マンドキーである。Literal はコマンドキーの後にその キーを入力すればコマンドキーを仮想端末内のプログラ ムに入力できることを表す。この場合では、コマンドキー である C-a の後に a を入力すれば、C-a を仮想端末内 のプログラムに入力できるのである。 その下には、screenのコマンドがたくさん並べられてい るがよく使うものから解説する。 新しい仮想端末を開く(shell) ヘルプの中の shell のキー(default は C-c or c)で 新しい仮想端末を開くことができる。すなわち、screen 内で C-a c と入力すると画面が消去されてシェルのプ ロンプトがでてくる。実はこれが新しい仮想端末の中の シェルなのである。試しに ps をとってみると、図9の ようになる。 -----------------図9はじめ------------------------ 仮想端末2つあけたところ -------------------------------------------------- ukai@gobou:~$ ps PID TT STAT TIME COMMAND 2755 co IW 0:00 screen 2757 q0 S 0:00 zsh 2822 q1 S 0:00 zsh 2830 q1 R 0:00 ps ukai@gobou:~$ ■ -----------------図9おわり------------------------ このように新に ttyq1 が開かれてその中で新しいシェ ルがおきているのがわかる。 このように仮想端末一つごとに一つのシェルを起動で きるので、同時に複数の作業をすることが可能になるの である。もちろんsuspendしていけばscreenを使わなく ても同時に複数の作業をすることもできるが、screenを 使えば、window system上の別々のterminal emulator上 で作業するかのごとく作業することができるのである。 ちなみに、最初に開いでいるのは仮想端末0 で、 shellなどで新たに開いでいくごとに、仮想端末1、仮想 端末2 というふうに番号が割り当てられていく。この仮 想端末の番号は、仮想端末を切り替える時に使われる。 仮想端末はこのように複数開けることができるが、あ まり開けすぎると仮想端末ごとにシェルが起きるので、 システムを圧迫するのでよくない。あまりたくさん開け てもどの仮想画面でどの作業をしていたか混乱してくる のであまり開けてしかたないだろう。 仮想端末の切り替え (next, prev, select[0-9]) それではshellで開けた仮想端末を切り替えるのには どうすればいいか? それはヘルプで next, prev および select0 から select9 で選択することができる。 とりあえず次の仮想端末にうつるためには next で指 定されているキーを使えばよい。default では、^@、^N、 スペース、n となっている。従って、例えば 「C-a ス ペース」と入力すれば次の仮想端末に画面が切り替わる。 仮想端末はリング状に並んでいるので、最後の仮想端 末で「C-a スペース」(next)を入力すれば、一番最初の 仮想端末に切り替わる。例えば今 3つの仮想端末を開い ているとして、現在仮想端末2が画面に表示されている 時、「C-a スペース」で次の仮想端末にうつった場合 画面は仮想端末0を表示することになる。(図10) -----------------図10はじめ------------------------ 仮想端末の切り替え -------------------------------------------------- +--> 仮想端末0 ---> 仮想端末1 ---> 仮想端末2 --+ | | | | +-------------------------------------------------+ -----------------図10おわり------------------------ prev「C-a p」は next と逆順で仮想端末を切り替え る。 また select0〜select9 を使えば直接どの仮想端末に うつるかを指示することができる。例えば、仮想端末0 での作業にうつる場合には select0 の「C-a 0」を入力 すればよい。すると即座に画面は 仮想端末0 になる。 なお、開いていない仮想端末を select しようとすると 画面の一番下の行に現在の仮想端末の状態を表示する。 例えば、仮想端末9 が開いていない時に「C-a 9」とす ると図11のような情報が画面最下行に表示される。 -----------------図11はじめ------------------------ 仮想端末情報の表示 -------------------------------------------------- 0- zsh 1* zsh -----------------図11おわり------------------------ 仮想端末0,1 両方とも zsh が動いていて、現在仮想端 末1 が画面に表示されている。"*" が現在の表示されて いる仮想端末を表す。"-" は以前表示していた仮想端末 である。他にも "$" がついているところは、"log in" しているところ、"!" はバックグラウンドの仮想端末で ベルがなったところ、"@"はバックグラウンドでなにか 変化があったところ、"(L)"はログを出力しているとこ ろである。なお、この情報は、「C-a w」(windows)でも 見ることができる。 copy-and-paste (copy, paste, readbuf, writebuf, removebuf) screenが画面に表示されたものをある程度バッファに 蓄えておいて、後でそれをcopy-and-pasteすることがで きる。つまり、scrollしていった内容を後で見たり、そ れをcopyしてきたり、また別の仮想端末でそれを入力し たりすることができる。 screenでcopyするためには、まずcopyモードに入る。 copyモードに入るたまには、「C-a [」とする。すると、 画面の下に、図12のように表示されてcopyモードに入る。 -----------------図12はじめ------------------------ copyモードに入ったところ -------------------------------------------------- Copy mode - Column 53 Line 1(+100) (80,30) -----------------図12おわり------------------------ copyモードではviのようなキーバインドでカーソルを移 動させることができる。カーソルを移動させてまずmark をセットする。するとその位置からカーソルを移動させ るとmarkからカーソルの間が反転表示される。もう一度 markすると、markの間の文字列がcopyされる。 まず、copyモードでのキーバインドは次のようになっ ている。 copyモードでのキーバインド 移動 まずカーソルの移動は vi と同じである。つまり、 h, j, k, l で左、下、上、右にカーソルを移動するこ とができる。もちろん、vi と同じように前に数字を入 れれば、その分だけカーソルは移動する。 画面の一番上でさらにカーソルを上に移動させようと すると、画面がスクロールし過去に表示した画面が現れ てくる。 また vi と同じく 「0」で行頭、「$」で行末にカー ソルが移動する。 さらに、「H」で画面の一番上の行の行頭に、「M」で 画面の真中の行の行頭に、「L」で画面の一番下の行の 行頭にカーソルが移動する。 また、「+」で下の行に、「-」で上の行にカーソルを 移動できる。 「G」を入力すると、バッファの一番下に移動する。 ただし、vi と同じく数字をその前に与えると、その行 にカーソルが移動する。つまり、「1G」と入力すると、 バッファの先頭に移動することができる。また、「g」 でもバッファの先頭に移動することができる。「数字%」 はバッファ内の指定したパーセンテージのところに移動 することができる。すなわち、「50%」とするとバッファ の真中に移動する。 「数字|」で、数字で指定した桁にカーソルを移動す ることができる。 「w」、「b」、「e」も vi と同じく単語ごとの移動 ができる。「w」で次の単語の先頭に、「b」で前の単語 の先頭に、「e」でその単語の最後に移動できる。 「C-u」、「C-d」では、画面の半分ずつのスクロール ができる。「C-u」で画面の上に、「C-d」で画面の下に スクロールする。 -----------------図13はじめ------------------------ copyモードでのカーソル移動 -------------------------------------------------- h j k l ← ↑ ↓ → 0 行頭 $ 行末 H 画面の一番上 M 画面の真中 L 画面の一番下 - 上の行 + 下の行 G バッファの最後 g バッファの先頭 数字G 指定した行に移動 数字% 指定したパーセンテージのところに移動 数字| 指定した桁に移動 w 次の単語の先頭 b 前の単語の先頭 e その単語の最後 C-u 上に半分スクロール C-d 下に半分スクロール -----------------図13おわり------------------------ mark copyモードでは二つのmarkの間がcopyされる。 基本的には、スペースを入力すれば一つのmarkがカーソ ル位置にセットされる。 「Y」は一行まるごとを単にmarkする時に使う。つま りcopyしたい行にカーソルを移動させて、「Y」を入力 すればその行がcopyされcopyモードを抜ける。 「y」はその行の先頭からmarkを付ける。 「W」は単語一つだけをmarkする時に使う。 -----------------図14はじめ------------------------ copyモードのmarkコマンド -------------------------------------------------- スペース markセット Y 一行全部をmark y その行の先頭にmarkを付け、行末に移動 W 単語一つをmark -----------------図14おわり------------------------ Repeat count vi と同じように以上の任意のコマンドはその前に数 字で繰り返す数を指定することができる。例えば、 「5Y」とするとカーソル位置から5行ぶんをcopyするこ とになる。 その他 screenでは、viと違って、矩形をcopyすることができ る。「c」で矩形の左端を、「C」で矩形の右端を指定で きる。その前に数字を与えておくと、(例えば「10c」) その桁に矩形の端がセットされる。もし指定がない場合 は、すなわち単に「c」とか「C」とした場合は、現在の 桁が矩形の端にセットされる。 「J」は行の連結だが、次の3つのモードを切り替える のである。最初は、「Multiple Lines」モードで、行は 改行文字(LF)で区切られている。「J」を入力すると次 は「Lines joined」になって、行はそのまま連結される。 さらに「J」を入力すると「Lines joined with blanks」 となって、改行は空白に置き換えられて連結される。さ らに「J」を入力すると最初の「Multiple Lines」に戻 る。 「v」は vi で ":set numbers" をしている人のため のものである。つまり ":set nu" した vi からcopyす る時に行番号のある左端をcopy領域に含まないようにな るのである。もう一度「v」を入力すればもとに戻る。 「a」を二つめのmarkのためのスペースの前に入力し ておくと、copyバッファに追加されるようになる。「a」 を入力しなかった場合は、前のcopyバッファは破棄され て、新しくmarkした間のテキストがcopyバッファに入れ られる。 「A」は、「a スペース」とした時と同じようように 動作する。すなわち現在位置でmarkをセットしてmark間 の領域をcopyバッファに追加する。 「>」は、二つめのmarkをセットしてcopyバッファの 内容を screen-exchangeファイル(defaultでは、 /tmp/screen-exchange)に書き出す。 「?」は、現在の行、桁がいくつかを表示する。 また、「q」でcopyモードを抜けることができる。 -----------------図15はじめ------------------------ copyモードのその他のコマンド -------------------------------------------------- c 矩形の左端の指定 C 矩形の右端の指定 J 行の連結 v vi の ":set nu" 対策 a 追加モード A 追加モードにしてmarkをsetする。 > copyバッファにcopyして、それをファイルに 書きだす。 ? 行、桁についての情報表示 q copyモードの終了 -----------------図15おわり------------------------ 以上で説明したcopyモードで、過去の画面からcopyし てきたり、単に過去の画面を見てみたりすることができ る。つまり、X window system の xterm のスクロール バーでスクロールするみたいなことがキー操作によって 行なうことができるのである。 copyモードでcopyしたテキストをpasteするためには、 pasteの「C-a ]」を入力する。すると現在の仮想端末で 動いているプログラムの標準入力に、copyバッファの内 容が送りこまれる。つまり、現在の仮想端末の foreground job にcopyバッファの内容が、まるでキー ボードから入力したかのように入力される。 copyモードでcopyした内容をファイルに書出すには、 writebuf「C-a >」を使う。「C-a >」とすると現在の copyバッファの内容が、screen-exchange ファイルに出 力される。defaultでは、screen-exchange ファイルは /tmp/screen-exchanges である。 逆に screen-exchangeファイルの内容をcopyバッファ に読み込むには readbuf 「C-a <」を使う。writebuf、 readbuf を使うことで、同じホストで作業している他の ユーザとcopyバッファのやりとりなどをすることができ るようになる。 screen-exchangeファイルを消去するには、 remove_buf 「C-a =」とすればよい。 擬似history (history) screenでは、cshなどを使っているような場合、擬似 historyが利用できる。例えば、シェルのプロンプトが 表示されている時に、「C-a {」と入力するとその前に 実行したコマンドを現在の行にcopyしてくる。 また、コマンドの先頭を何文字が入力すると、それと 一致するコマンドをさがしてきて、現在のコマンドライ ンにcopyしてくる。 画面のハードコピー (hardcopy) 現在の画面のハードコピーをとるためには、「C-a h」 とする。こうすると、現在表示している画面をファイル "hardcopy.数字"に書出してくれる。数字は仮想端末の 番号である。 ログ (log) screenでは、画面出力のログをとっていくこともでき る。「C-a H」とした時からの出力がログファイル "screenlog.数字"に出力されていく。数字は仮想端末の 番号である。既に同名のファイルがあるとログはそのファ イルに追加出力される。もう一度、「C-a H」とすると ログをとるのをやめてしまう。 ログイン (login) 「C-a L」とすると、現在の仮想端末でloginしている /していないを /etc/utmp ファイルに書きこむことで切 り替えることができる。/etc/utmp でログインしている となっている場合は、「C-a w」(windows)で、その仮想 端末のところに "$" が付く。 モニタリング (monitor) 現在の仮想端末の変化を監視する/しない を切り替え る。もしモニタリングしていて、バックグラウンドでそ の仮想端末になんらかの変化があった場合に screenが しらせてくれる。これを使えば、裏の仮想端末でコンパ イルしておいて、それが終了したら即座に、画面でその 仮想端末で変化があったことを知らせてくれるので便利 である。モニタリングしていて、なんらかの変化があっ た仮想端末は、「C-a w」(windows)で "@" が付けられ る。すべての仮想端末は最初はモニタリングしない。 端末の状態設定 screenの中の仮想端末はvt100をエミュレートしてい るが、次のようなコマンドで変更できる。 例えば、「C-a f」(flow)とすると、現在の仮想端末 のフロー制御のやり方が変更される。screenのフロー制 御のやり方には "automatic" -flow(auto) "on" +flow "off" -flow の3種類の方法があり、これらを切り替えることができる。 「C-a q」(xon) を入力すると、現在の仮想端末のプロ グラムに xon (Control-q)を送ることができる。また、 「C-a s」(xoff) は、xoff(Control-s)を送ることがで きる。 「C-a C-g」(vbell)は、ビジュアルベルにするかどう かを切り替える。ビジュアルベルとはビープを鳴らすか わりに画面を一瞬フラッシュさせることである。端末自 体にビジュアルベルの機能がないときには、 "vbell-message" で指定したメッセージが一番下の行に 表示されるようになる。 「C-a r」(wrap)で、現在の仮想端末画面のラインラッ プ機能を切り替えることができる。 「C-a l」(redisplay)とすると現在の仮想端末の画面 を再描画する。jis-patch を当ててあっても、漢字を含 んだテキストを表示している時など、時々化けることが あるので、そういう時は「C-a l」で再描画してみると よい。 「C-a C」(clear)は、現在の仮想端末の画面の消去を 行う。 ロック (lock) UNIXでは、席をはずす時などに、端末のロックしてお いたほうがいい。普通は lock コマンドを使えばいいの だが、screenを使っている場合は現在の仮想端末のlock はできても仮想端末を切りかえられてはロックしている ことにならない。また、仮想端末全てでlockするのも現 実的ではない。そこで、screenでは screen自体がロッ ク機構をもっている。具体的には、「C-a x」とすると、 ロックされる。「C-a x」でロックすると次のようにな る。 -----------------図16はじめ------------------------ lock -------------------------------------------------- Screen used by Ukai Fumitoshi . Password: -----------------図16おわり------------------------ こうしておくと、password を入力するまで端末をロッ クしておくことができる。作業を再開する時は、 password を入力すればよい。 仮想端末の削除(kill) 仮想端末内のプログラムに不具合が生じてキーをなに も受けつけなくなってしまったような場合に、その仮想 端末を閉じてしまいたくなる時がある。そのような場合 には、「C-a k」(kill)とすればよい。そうすると現在 の仮想端末は閉じられるので、その中で動いていたプロ セスもkillされる。閉じられた後は、以前表示していた 仮想端末(「C-a w」で、"-" が付いているところ)に切 り替わる。 現在の仮想端末の画面情報の表示(info) 「C-a i」(info)とすると、現在の仮想端末の画面情 報を図17のように表示してくれる。 -----------------図17はじめ------------------------ 仮想端末の画面情報 -------------------------------------------------- (53,30)/(80,30)+100 -flow -ins -org +wrap -app -log -mon +r G0 [BBBB] -----------------図17おわり------------------------ 最初の(53,30)というのが現在のカーソル位置を表わ している。そして、(80,30)は画面のサイズを表わして いる。+100というのは100行のバッファをもっているこ とを表わしている。その後はそれぞれ図18のフラグのこ とである。 -----------------図18はじめ------------------------ フラグ --------------------------------------------------- flow フロー制御をするか? ins 挿入モードか? org origin モードか? wrap ラインラップをするか? app アプリケーションキーパッドか? log ログをとっているか? mon モニタリングしているか? r ウィンドウを変更したときに書きなおすか? G0 キャラクタセット [BBBB] G0〜G3に指示されているキャラクタセット(BはASCII) -----------------図18おわり------------------------ 時間の表示(time) 「C-a t」(time)で、現在の時間、screenの動いてい るホストネームを知ることができる。システムによって は、ロードアベレージも調べられる。 バージョン表示 「C-a v」(version)は単にscreenのversionを表示す るだけである。 -----------------図19はじめ------------------------ version表示 -------------------------------------------------- screen 3.02.00b (FAU) 10/28/92 -----------------図19おわり------------------------ 最後のメッセージの表示(lastmsg) screenで示される情報は、最下行のところに表示され るが、これはある一定時間たつと消されてしまう。そこ で、最後に表示されたメッセージを見るためには、 「C-a m」(lastmsg)とすればよい。こうするとscreenが 最後に表示した情報をもう一度同じように表示してくれ る。 仮想端末のリセット(reset) 仮想端末をリセットする時は、「C-a Z」とすればよ い。そうすると、端末を"power-on"したかのように初期 化される。 termcapの書き出し(termcap) 「C-a .」(termcap)とすれば、現在の仮想端末の termcapエントリーを ~/.screen/.termcap に書き出す ことができる。 コロンコマンド(colon) 「C-a :」とすると画面の最下行に、コロンが反転で 表示されてコロンコマンドモードになる。これは vi に おける exモードのようなものであると言うこともでき るだろう。コロンコマンドモードでは、いろいろなコマ ンドを実行することができる。 -----------------図20はじめ------------------------ コロンコマンド -------------------------------------------------- help helpを見る。 screen 指定したコマンドで新しい仮想端末を 開く shell シェルを使って新しい仮想端末を開く。 shell コマンド C-a c で生成するときのシェル next 次の仮想端末にうつる。 prev 前の仮想端末にうつる。 other 前に表示していた仮想端末にうつる。 select0 仮想端末0 にうつる。 ... select9 仮想端末9 にうつる。 windows 全ての仮想端末の情報を表示する。 aka 現在の仮想端末の a.k.a を変更する。 clear 画面を消去する。 copy copyモードにはいる。 markkeys oldchar=newchar:... copyモードなどでのキーマップの 入れ替え paste copyしたテキストを入力する。 readbuffer screen-exchangeファイルからcopy バッファに読み込む。 writebuffer copyバッファをscreen-exchange ファイルに書出す。 quit screenを終了する。 suspend screenをsuspendする。 detach screenをDetachする。 pow_detach screenをDetachしてlogoutする。 pow_detach_msg メッセージ pow_detachする時に表示される メッセージ autodetach on|off hangupした時に自動的にdetachするか? password パスワード detachしたscreenを再開する時の password kill 現在の仮想端末を閉じる。 history 擬似history hardcopy 現在の仮想端末画面のハードコピーを とる。 hardcopy_append on|off ハードコピーをアペンドするか? log 現在の仮想端末の出力のログ。 monitor 現在の仮想端末のモニタリング。 activity メッセージ 裏の仮想端末でなにか変化のあっと時 に表示するメッセージ lock screenlockする。 set 現在の仮想端末に対する設定 flow on|off|auto フロー制御の方法。 xoff Control-sの送信。 xon Control-qの送信。 bell メッセージ 裏の仮想画面でベルがなった時に 表示するメッセージ vbell ビジュアルベルの設定。 vbell_msg メッセージ ビジュアルベルのメッセージ vbellwait 秒数 ビジュアルベルの後の待ち時間 login loginの設定 ( /etc/utmp )。 wrap on|off ラインラップの設定。 redisplay 画面の再表示。 info 現在の仮想端末画面の情報表示。 version screenのversion。 lastmsg 最後のメッセージの表示。 reset 端末のreset。 termcap termcapエントリーの書出し。 width ターミナルの幅の切り替え(80 <->132) bufferfile ファイル名 screen-exchangeファイル名の変更 chdir ディレクトリ defaultディレクトリの変更 crlf on|off copy-and-paste の時の改行をCR/LFに するかLFのみにするか? echo メッセージ メッセージを表示する。 escape xy コマンドキーとなる文字を変更する。 hardstatus on|off ハードウェアステータスラインに screenの情報を表示するか? mode モード pseudo-tty のモード msgminwait 秒数 メッセージを表示してから何秒停止 させるか? msgwait 秒数 メッセージを何秒間表示しておくか? scrollback 数字 scrollbackバッファとして何行分 保存するか? redraw on|off 仮想端末を切りかえたときrefresh するか? slowpaste ミリ秒 80文字ごとに何ミリ秒まつか? term ターミナル TERMを何にするか? bind キー ファンクション キーバインド -----------------図20おわり------------------------ たいていのコマンドの単純なキー操作でもできるようバ インドされている。ここでは特に screen コマンドにつ いて説明する。 screen コマンド コロンコマンドモードで、screenコマンドをする場合、 「C-a c」のように単にshellで新しい仮想端末を開くの とは違って、さまざまなコマンドで新しい仮想端末を開 くことができる。よく使うのが、rlogin との組み合わ せだろう。つまり図21のようにするのである。 -----------------図21はじめ------------------------ :screen で rlogin -------------------------------------------------- C-a : screen rlogin mike -----------------図21おわり------------------------ このようにすると、mike へ rlogin するための仮想端 末を開くことができるのである。こうすることで、別の ホストに入る時に無駄なシェルを生成しなくて済む。 このように screenの後に任意のコマンドを指定するこ とができ、そのコマンドを実行するための仮想端末が新 に開かれるのである。 screenにはオプションを付けることができて、それに よってフロー制御を変更したり「C-a w」(windows)で表 示されるときの仮想端末の名前を付けたりすることがで きる。例えば、図22のようにすると、この仮想端末に "mike" という名前を付けることができる。 -----------------図22はじめ------------------------ 仮想端末に名前を付ける。 -------------------------------------------------- : screen -t mike rlogin mike -----------------図22おわり------------------------ また、コマンドの前に0〜9の数字を指定すると、その番 号の仮想端末にそのコマンドを割り当てようとする。も し、既にその仮想端末が使われている場合は、次の仮想 端末が使われる。 初期設定ファイル (~/.iscreenrc) コロンコマンドはたくさんあるが、多くは常に同じ設定 になるものが多い。そのような場合は、わざわざ毎回設 定せずに、初期設定ファイルに書いておくほうがよい。 screenは、ホームディレクトリの.iscreenrcを初期設定 ファイルとして読みこむので、このファイルに例えば、 図23のような設定をしておくと便利だろう。 -----------------図23はじめ------------------------ .iscreenrcのサンプル -------------------------------------------------- escape ^]] # change command key to ^]. hardcopy_append on # we append to our hardcopyfiles, not overwrite bufferfile "/tmp/screen-exchange-ukai" # default file for C-] >, C-] < scrollback 1000 # we have a 200 lines history buffer echo -n "booting screen" vbell_msg " Wuff, Wuff!! " # this is the default message echo -n "." term vt100 # screen will understand vt100 for 99%. chdir # without argument it's my $HOME bind '!' screen -ln -k negi rlogin negi bind '@' screen -ln -k gobou rlogin gobou bind '#' screen -ln -k kotetsu rlogin kotetsu bind '$' screen -ln -k mike rlogin mike bind '%' screen -ln -k kuro rlogin kuro echo "done." -----------------図23おわり------------------------