これまでの連載では,第6回の「LinuxでC/C++言語のコンパイルを試す」において,Linux上でC言語やC++言語で書いたプログラムを動かす方法を紹介してきました。そのときに紹介したプログラムは,コンソール上で動作するものでしたが,今回はGUI(Graphical User Interface)プログラミングに挑戦してみましょう。

LinuxのGUIの仕組み

 LinuxをはじめとするUNIX系OSでは,GUIを実現するための仕組みとして,X Window System(X Window,Xなどと略されることもあります)が古くから利用されています。このX Window Systemは,クライアント/サーバー・モデルで構成されています。Xサーバーは,ディスプレイやキーボードなど,ハードウエア・デバイスに対する入出力を行い,XクライアントはXサーバーを利用してGUIアプリケーションを実現します(図1)。

図1●X Window Systemの大まかな仕組み。Xサーバーは,ディスプレイやキーボードなど,ハードウエア・デバイスに対する入出力を制御する。XクライアントはXサーバーを利用してGUIアプリケーションを提供する。
図1●X Window Systemの大まかな仕組み。Xサーバーは,ディスプレイやキーボードなど,ハードウエア・デバイスに対する入出力を制御する。XクライアントはXサーバーを利用してGUIアプリケーションを提供する。

 X Window Systemにはいくつかの種類がありますが,現在のLinuxでは「X.Org」というプログラムが標準的に使われています。X Window System自体は,GUIのごく基本的な要素(XサーバーとXクライアントの通信など)しか提供していません。以下の図2は,X Window System上で端末アプリケーション(kterm)のみを実行した画面です。デスクトップのアイコンやメニューはおろか,ウィンドウの枠やバーすら見あたりません。

図2●X Window System上でktermのみを実行しているところ
図2●X Window System上でktermのみを実行しているところ
[画像のクリックで拡大表示]

 見栄えや操作といったユーザー・インタフェースは,「ウィンドウマネージャ」というソフトウエアによって提供されます。次に示す図3は,twmというもっともシンプルなウィンドウマネージャを実行したところです。デスクトップの見た目はさびしいですが,少なくともウィンドウやメニューは用意されています。twmはとても軽快に動作するので,古いPCでもサクサク動きます。

図3●ウィンドウマネージャtwmの画面
図3●ウィンドウマネージャtwmの画面
[画像のクリックで拡大表示]

 Linuxでは,何十種類ものウィンドウマネージャを使うことができます。ウィンドウマネージャによって,操作性や見栄え(ルック&フィール)は大きく異なります。WindowsではGUIが組み込まれていますが,UNIX系OSでは,OSの基本部分からGUIが切り離されていて自由に選択できる,という点に注意してください。