タブ機能のあるターミナルはあるけれど、"らめー"なときはやっぱ"らめー"

開発になくてはならないアプリケーションの1つにターミナルがある。zshだってターミナルがなければどうにもならない。最近ではKDEのkonsoleやGnomeのgnome-terminalなど、タブ機能がついたターミナルアプリケーションがあり、1つのターミナルアプリケーションで複数のターミナルが扱えて便利だ。一昔前のようにxtermやktermを開きまくるということは少なくなった。

画面1 gnome-terminal - タブのついたターミナルは今では一般的

しかし、これがsshを経由してリモートログインしているとなると話が違ってくる。例えばWindowsからsshでログインする場合でも複数のターミナルを使いたい。同じようにWindowsでタブ機能をもったターミナルアプリケーションを使うのはよいとしても、使いたいアプリケーションの数だけsshでログインするといった愚直な行為はぜひとも避けたい。接続は1つでよい。1つのsshでログインしたあとで複数のターミナルを使いたいものだ。

もう1つは、X Window Systemが落ちたりすると、ターミナルアプリケーションも一緒に死んでしまうというのが問題だ。例えばOpenOffice.orgのビルドをしていたとか、Ports Collectionを使ってアプリケーションをアップデートしていたとか、そういった最中にX Window Systemが落ちたりすると、ターミナルアプリケーションも落ちるわけだから、当然処理も止まってしまう。「ビルドや作業がある程度済んでいたのにXが落ちた」というときの虚しさといったらない。タブが使えても一緒に死んでしまうのは変わってないわけだ。

こうした問題を避けるために、わざわざコンソールに落ちてビルドを行うという癖がついてしまう人もいる。しかし、これがリモートログインからの作業ということになると、コンソールに落ちて作業するということもできない。それにコンソールからログインして作業するとなると、作業の間中ログアウトできないことになる。それはそれでセキュリティ面で問題が生じる。

zshを加速させるscreenを使おう

そこでお勧めしたいのがscreenだ。screenはいわゆるVT100/ANSIターミナルエミュレータである。screenを起動すると、screenが代わりにターミナルを管理してくれるようになる。要するに、ssh中にアクセスが切れてしまったり、Xが落ちてしまったりしても、screenがかわりにターミナルを管理してくれるので、もう1回screenに接続すれば元に戻るというわけだ。なかなかの優れものと言えるだろう。わざわざコンソールに落ちて作業しているとか、リモート作業するときに接続が切れて困るとか、そういう問題で悩んでいる方はぜひ試してほしい。screenはデーモンを起動して背後で動いてくれるので、ユーザがログアウトしても、Xが落ちてしまっても、管理するターミナルを持っているかぎりは待っていてくれる。これは便利だ。

screenを実行すると画面2のように表示され、その後はzshに戻る。

画面2 screenを起動した状態

例えばそこでtopコマンドを実行しながら、ターミナルアプリケーションを終了してみて欲しい。psコマンドで見れば分かるが、画面4のようにtopコマンドは終了せずに動いていることが分かる。

画面3 topコマンドを実行しつつ、[X]ボタンを押すなどしてターミナルアプリケーションを終了する

画面4 psコマンドで調べるとtopコマンドは消えずに実行され続けていることがわかる

ここで別のターミナルから「screen -r」のように実行すると、先ほどのtopの実行中に戻ってくる。「screen -ls」のように実行すればscreenが管理しているターミナルの一覧が表示される。複数のターミナルが管理されている場合は、画面6のように複数表示される。「screen -r 18450」のようにすれば指定したターミナルに接続することが可能だ。

画面5 screenが管理しているターミナルの一覧を表示

画面6 複数管理している場合はこんな感じで複数表示される

screenは管理するターミナルがなくなると自動的に終了する仕組みになっているので、screenそのものの終了については特に気にする必要はない。sshでログインして作業/メール/IRCなどを使っている場合、screenはもはや必須ツールといえる。プロっぽくてカッコいいからという理由で使っている開発者もいる。カッコいいかどうかはともかく、便利であることは間違いない。screenを使ったことがないユーザはこれを機にチェックしてみるとよいだろう。