X不要で動作する高機能ターミナルエミュレータFbTerm

  FbTerm は高速に動作するターミナルエミュレータであり、これは各自のシステムに搭載されたフレームバッファ上で直接動作する設計となっている。こうしたフレームバッファの使用を前提とした設計のおかげで、FbTermでは処理速度の高速化が果たされているだけでなく、ターミナル上でUTF-8テキストを使用することもできる。こうしたFbTermの開発目的として挙げられているのが、一般的なLinuxカーネルターミナルと同等の速度を確保すると同時に、インターナショナルな表示機能のサポートおよび、fontconfigを介した近代的なフォント管理機能を提供するというものである。またFbTermの場合、1つのフレームバッファに対して10個の異なるターミナルウィンドウを同時に展開でき、個々のウィンドウにはスクロールバック用の履歴が保持されるようになっている。

 FbTermの有すもう1つの特長は、X Windowの未インストール環境であっても簡単にターミナルが使用できることである。確かにその種のシステムに対する管理作業の大部分は、SSHを介してシステムにログインした状況下で行うものかもしれないが、システム上での拡張セッションとして直接実行するケースに遭遇することもあるはずだ。

 FbTermのバージョン1.0は先月リリースされたばかりである。このように歴史の浅いFbTermであるため、現状にてメインストリームのLinuxディストリビューションのパッケージリポジトリに収録されていないケースが多いのも、ある意味致し方のないところであろう。例えばUbuntuおよびFedora用にパッケージ化はされていないが、openSUSE 11については1-Clickインストールができるようになっている。私の場合、本稿の執筆用に先月リリースされたFbTerm 1.0を64ビット版Fedora 9用にソースからビルドしたが、その際に用いたのは「./configure; make; sudo make install」という通常のプロセスである。

 FbTermを使用する場合、最初に遭遇する可能性の高いトラブルは、/dev/fbファイルがインストールされていないというものだ。実際に私の場合も、NvidiaおよびATIグラフィックスカードを搭載した2台のマシンにて、Fedora 9用のフレームバッファデバイスが作成されていなかった。ところが意外なことに、かなり旧式なS3 PCIグラフィックスカード搭載マシンのFedora 9インストレーションに関しては、/dev/fb0のフレームバッファが作成されていたのである。いずれにせよこれらデバイスファイル群を入手する一番簡単な方法は、各自のカードに適したカーネルモジュールを追加することだろう。例えばATI X300を搭載したラップトップの場合、フレームバッファデバイスを作成させるには「modprobe radeonfb」というコマンドを実行すればいい。通常フレームバッファモジュールの格納位置は、下記のような各システムのカーネル中とされるはずである。

/lib/modules/`uname -r`/kernel/drivers/video

 /dev/fb(実際には/dev/fb0に対するシンボリックリンクとされている場合が多い)がインストールできたら、FbTermを実行する準備はほぼ整ったことになる。ただしこの設定段階におけるFbTermの実行にはroot権限が必要だが、実用上は一般ユーザの権限で実行できる方が便利だろう。実のところ一般ユーザによるFbTermの実行が行えない原因は、/dev/fb0デバイスの実行権限がrootに対してのみ与えられているからに過ぎない。この問題の回避策の1つは「chown username /dev/fb0」コマンドを使用することだが、あるいはフレームバッファ用のグループを作成して必要なユーザを登録しておく方法も考えられる。

 しかしながら、fbのシンボリックリンク作成を規定しているのは/etc/udev/rules.dディレクトリに置かれた50-udev-default.rulesファイルなので、この場合は、必要なグループや実行権限をfbデバイスの作成時に設定するためのカスタムudevルールを作成してしまう方が、よりシステムフレンドリな実行権限の回避策と言えるだろう。具体的には、下記に例示したようなフレームバッファ.rulesファイルをmy-rules.dディレクトリに用意しておくことで、指定したユーザが所有権を持つfb0デバイスが作成されるようになる。

# mkdir -p /etc/udev/my-rules.d
# cd /etc/udev/my-rules.d
# cat framebuffer.rules

KERNEL=="fb0",  OWNER="username", MODE="0640"

 指定したユーザによりアクセス可能なフレームバッファデバイスの準備ができたら、後はfbtermコマンドによりターミナルを起動すればいい。そしてFbTermの初回起動時には、表示カラーとフォントのデフォルト指定に関する設定ファイルが~/.fbtermrcに作成されるはずである。例えばATIグラフィックスチップ搭載のFedora 9ラップトップの場合、デフォルトで作成される設定ファイルは、次のように記述されている。

# Configuration for fbterm

# font family/pixelsize used by fbterm, mulitple font families must be separated by ','
font_family=mono
font_size=12

# default color of foreground/background text
# available colors: 0 = black, 1 = red, 2 = green, 3 = brown, 4 = blue, 5 = magenta, 6 = cyan, 7 = white
color_foreground=7
color_background=0

 FbTermでも、Shift-PageUpキーでターミナル表示を1ページ分戻すなど、通常使われるキーボードバインディングが利用できるようになっている。またCtrl-Alt-Cキーによりフレームバッファウィンドウを複数作成することも可能で、マルチウィンドウ間の切り換えはShift-LeftおよびShift-Rightキーで行えばいい。あるいはCtrl-Alt-番号キーによる指定ウィンドウへの直接移動も可能だ。なおFbTermのウィンドウ群は、Alt-ファンクションキーで呼び出せるgettyセッション群とは独立した存在となっている。

fbterm1_thumb.png
FbTerm

  ここに掲載したスクリーンショットは、FbTermにてサイズ16のSazanami Gothicフォントを用いたターミナル画面の一部であるが、日本語の平仮名と漢字が正常に表示されている点を確認して頂きたい。

 今回私は、FbTermのパフォーマンス試験として、Project Gutenbergから公開されている『 Dead Souls 』という小説を表示させてみた。これは15,000行から成るファイルなのだが、catからの読み込みにデフォルトのLinuxカーネルターミナルの場合は実に14.8秒もの時間を要したのに対し、Sazanami Gothicフォントを指定したFbTermでのターミナル表示はわずか1.2秒で済んでしまったのである。

 「この操作に失敗した場合はどう対処すべきか」という懸念の下で何らかの操作を行う状況に追い込まれた場合、今後私はSSHセッションにてfbtermを実行することになるだろう。もちろんこうした意見にすべてのユーザが同意するとは限らないが、実際に試してみれば、インタラクティブなターミナル操作にstdinは適していないことを実感してもらえることと思う。

 いずれにせよフレームバッファ上で動作するターミナルエミュレータを探し求めているユーザであれば、サーバのメンテナンスにせよ、組み込みデバイス関連の用途にせよ、FbTermは試してみるだけの価値を有しているはずだ。

Ben Martinは10年以上にわたってファイルシステムに取り組んでおり、博士課程の修了後、現在はlibferris、ファイルシステム、検索ソリューションを中心としたコンサルティング業に従事している。

Linux.com 原文(2008年8月5日)