iPod touch、予約しました。選んだタイプですが、私には8GBで十分です。到着後の予定はといえば、やはりこんなことを試したいなあと。マルチタッチUI向けにシェルをカスタマイズ、なんて酔狂なこともやりたいなあと。どうか2週間ほどお待ちくださいませ。

さて、今回は「GNU Screen」について。できるかぎりタイムリーなネタ提供を心がけている当コラムにしては、取り上げるのを躊躇してしまうほど知られたコマンドだが、Leopardの新機能「Spaces」に通じる機能がないわけでもない。Leopardリリース前にGNU Screenで温故知新、というのもまた一興では?

GNU Screenでできること

GNU Screenは、1つの端末画面上に複数のウインドウを開き、切り替えて使用するためのコマンド。他のGNUプロダクト同様、多くのUNIX系OSに収録され、OS Xにもscreenコマンド(/usr/bin/screen)として標準装備されている。

OS Xで使うときのメリットには、増えがちなウインドウ数を抑制できることが挙げられる。複数のTerminal画面を開くことも悪くはないが、画面1つで完結できるほうがスマートというもの。ウインドウの切り替えもショートカットキーでOK。LeopardのSpacesの切り替え対象は(狭義の)デスクトップだが、GNU Screenの対象は端末とその上で動作するシェル / コマンドなのだ。

もう1つ、端末が強制終了されても仮想画面上で動作するジョブには影響しないことが挙げられる。たとえば、Terminalでコマンドを実行中にTerminalが強制終了されると、そのコマンドまで終了されてしまうが、GNU Screenのセッションには影響がない。再びTerminalを起動し、GNU Screenを「-r」オプション付きで実行すれば、セッションをそのまま再開できる。

製品リリース前で詳細をお伝えできる段階にないが、LeopardのSpacesが"作業領域を広げる"ものだとするならば、GNU Screenは"作業手段を増やす"ものだとわかるはず。いくつもの作業を並行して処理しやすいようにというコンセプトは共通だが、GUIとCUIとでは解法が大きく異なるのだと理解したい。

GNU Screenの基本的な使い方

GNU Screenの起動方法は簡単、ただTerminal上で「screen」と実行すればOK。直後に現れるタイトル画面を[SPACE]キーで消せば、いつもどおりシェルが起動され、ごく当たり前にコマンドが実行できるようになる。

GNU Screenとしての機能を利用する場合は、下表に挙げるようなショートカットキーを押す。「^」は[Control]キーの意味で、「^a」ならば[Control]を押しながら[a]を押せばいい。続けて記載されている文字は、^aを押してから間を空けずに押すべきキーで、「^a c」ならば[Control]-[a] [c]、「^a 数字」ならば[Control]-[a] [c]に続けて1~9の任意のキーを押せばいいことになる。

基本的な作業の流れは、新規ウインドウを作成(^a c)して任意のコマンドを実行、必要に応じてウインドウを切り替え(^a nまたは^a p)ながら並行した作業を続ける……という具合。バッファに蓄えた文字列のコピーなど豊富な機能が用意されているので、まずはオンラインヘルプ(^a ?)から始めることをお勧めする。

表: GNU Screenの基本的なショートカットキー

ショートカットキー 機能
^a 数字 指定した番号のウインドウをアクティブに表示する
^a c 新規ウインドウ(仮想端末)を作成する
^a n 次のウインドウをアクティブにする
^a p 前のウインドウをアクティブにする
^a w 開いているウインドウを一覧する
^a ? オンラインヘルプを表示する
^a ^a 直前にアクティブだったウインドウへ切り替える

Leopardにもマネできない!? GNU Screenでコラボレーション

CUIはGUIに見劣りするが、それは外観だけのこと。機能面には関係のない話で、おそらくLeopardのSpacesには実装されていないであろう便利な機能がGNU Screenには用意されている。

その1つが「マルチディスプレイモード」。screenコマンドを「-x」オプション付きで起動すると、複数のプロセスが1つのセッションに接続できるようになるのだ。これではサッパリわからないかもしれないので、利用例を示してみよう。GNU ScreenがインストールされSSHによるリモートログインが可能なマシン(つまりOS Xが2台)あれば、すぐに試せるはずだ。

1. システム環境設定の「共有」パネルでリモートログインが有効なマシン(仮にPowerMac G5とする)でTerminalを起動し、screenを実行しておく。

2. 別なマシン(仮にMacBookとする)からPowerMac G5へsshコマンドでリモートログインする。PowerMac G5のBonjour名が「PMG5.local」、ユーザ名が「shinobu」の場合、以下のとおりコマンドを実行する。


$ ssh shinobu@PMG5.local

3. ログインが完了したらTerminalで「screen -x」を実行する。

マルチディスプレイモードでGNU Screenが実行されると、セッションが共有され、上記の例でいえばPowerMac G5とMacBookに表示されたTerminal画面の内容がまったく同じになる。キー入力もリアルタイムに反映されるので、ピアノの連奏か二人羽織か、という"端末コラボレーション状態"だ。他にも興味深い機能がいろいろ用意されているので、ぜひ調べていただきたい。