特集
» 2006年09月13日 10時20分 公開

screenで遠隔教育Leverage OSS(1/2 ページ)

もしあなたがCUIで仕事をすることが多いにもかかわらず、仮想端末管理ソフトウェアである「screen」を知らないのなら、それは非常に不幸なことである。ここに登場する2人の教師がscreenを使うことで得られたビッグサクセスを紹介しよう。

[Phil-Hollenback,Open Tech Press]
SourceForge.JP Magazine

 先日、ちょっとした遠隔教育をする必要があった。Linux上でソフトウェアをビルドするデモを見せて欲しいと同僚が言ってきたのだ。問題は一つ。わたしが東海岸、彼が西海岸にいたことだ。さて、ビルドとインストールの方法をどうやって彼に見せようか。幾つかの候補を検討した結果、わたしたちはGNU Screenを使うことにした。

 わたしたちが最初に考えた候補は、標準UNIXユーティリティのscriptを使ってログを取るという案だ。しかしscriptは幾つかの問題点を抱えている。例えば、結果の出力がすさまじい(scriptは、キャリッジリターンや訂正を含めた何から何までを保存する)という、無視しがたい問題点がある。加えて、scriptではインタラクティブ性が完全になくなる。同僚が質問したかったり、説明を必要としたら、後から電子メールでのやり取りが必要になっただろう。これでは彼にとってもわたしにとってもイライラが募る。

 次に検討した候補は、VNCだ。VNCを使った場合、同僚がわたしのディスプレイへと接続し、彼とわたしとで、マウスとキーボードを交互に使うことになる。しかしこの方法は過剰に思えた。というのも、わたしが見せたかったのは純粋にコマンドラインでの作業だったからだ。それにVNCセッションのログを生成するのもややこしいことになっただろう。さらに技術上の制約から、このデモのために彼がわたしのマシンへと接続する唯一の方法が単純なSSH接続であったため、解決法は純粋にコマンドラインのものである必要があった。

 最後にたどり着いた候補はscreenだ。最終的にわたしたちはscreenを使うことに決めた。screenは、口で説明されてもピンと来ないが、実行されているところを見れば、その非凡さに驚嘆するという類いのツールの一つだ。screenの公式ウェブサイトの説明を見てもいまひとつ分かりにくい。

screenは、物理端末を複数のプロセス(典型的にはインタラクティブシェル)間で多重化する、フルスクリーンのウィンドウマネージャです。

 基本的にはこういうことだ。screenを使うと、実際のxtermやコンソール画面へと接続されていない、仮想的な端末を作成することができる。そしてシェルとそのシェル上で実行中のプロセスを保存しつつ、screenのセッションから接続を切ったり、どこか別の場所から再接続したりすることができる。(screenの入門としては、Linux.comのこの記事を参照のこと。)

 しかもこれは、screenのパワフルさや柔軟性のほんの一端でしかない。例えば、screenに引数-xを与えると、1つのscreenセッションに複数のプロセスから接続が可能になる。つまり、例えば仕事場で(screen上の)端末内で実行しているメールプログラムをそのままにしておき、家に帰って家から接続しても、同じプロセスを使って仕事場での続きからメールを読むことができるということだ。仕事場で接続を切る必要はなく、翌朝、仕事場に戻ってきたときには、家で変更した全状態が完全に反映されていて、昨夜、家で最後にメーラを使った状態がそのまま再現されている。

 この機能は「マルチディスプレイモード」と呼ばれているものだが、screenではそれをさらに発展させて「マルチユーザーモード」と呼ばれるモードも備えている。「マルチユーザーモード」では、二人以上のユーザーが同じ一つのscreenセッションへと接続し読み書きすることができる。ただ、このモードが抱える問題点は、セットアップの方法が分かりにくいということだ。そこで以下に、Googleサーチにも助けを借りてやっとのことで把握したことを示す。

  1. screenのバイナリ(/usr/bin/screen)をsetuid rootに設定する。screenはデフォルトでは、(セキュリティホールになる可能性があるため)setuidビットがオフの状態でインストールされている。
  2. 教師側がscreenを(例えばscreen -S SessionNameとして)ローカルのxtermで起動する。-Sスイッチによりセッションに名前が与えられ、複数のscreenセッションの管理が楽になる。
  3. 生徒側が、SSHを使用して教師側のコンピュータに接続する。
  4. 教師側が、Ctrl-a :multiuser on(screenのコマンドはすべてscreenのエスケープシーケンスであるCtrl-aから始まる)というコマンドによってscreenのセッション内でのマルチユーザーアクセスを許可する。
  5. 教師側がCtrl-a :acladd studentstudentは、生徒のログイン名)とし、screenセッションへのアクセスを生徒側ユーザーに対し許可する。
  6. ここまでで生徒側が教師側のscreenセッションに接続することが可能になった。実際に接続するには、(自分のscreenセッションではなく、ほかのユーザーのセッションに接続することになるので、ユーザー名を指定して)screen -x username/sessionとする。
       1|2 次のページへ

Copyright © 2010 OSDN Corporation, All Rights Reserved.

注目のテーマ