HOMELinux道場Linux道場入門編第7回 GUIとCUI

Linux道場入門編

第7回GUIとCUI

今回はGUI(Graphical User Interface)とCUI(Character-based User Interface)のお話です。WindowsやMacOSに代表されるOSではグラフィカルなUIで通常操作を行いますが、Linuxでは操作の基本はコマンドを入力して実行するCUIになります。無論LinuxでもGUIは実現されていますが、GUIであってもそこからコマンド実行を行うターミナルを起動して、コマンドを入力、実行するということを頻繁に行います。これはもともとOSとしてのスタート地点がGUIを前提としたものなのか、CUIを前提としたものなのかの違いによるものです。今回はこのGUIとCUIの考え方の相違を含めつつ、Linux上で実現されるGUIの仕組みについてお話します。

そもそもGUIとCUIの違いとは?

ここでGUIとCUIの違いというものを考えて見ます。GUIはグラフィカルなUI、CUIはキャラクタベースのUIということになりますが、まず 1つ大きな違いというのは入力の際に主に利用するデバイスが異なるという点です。GUIはマウスを主に利用し、CUIは全てキーボードによる文字入力を利用します。表現という点に関しては、CUIは基本的に単一の見た目しか提供しないのに対してGUIは設定などにより様々な見た目を提供します。またGUI を動作させるためにはそれなりのH/Wのスペックを必要とします。現在のPCのチップセットには標準でグラフィック用のチップが搭載されていますが、旧来のPCにありませんでした。そのような環境でリッチなGUIを動かすにはかなり無理があります。しかしCUIの環境ではH/Wのスペックはあまり必要なく、快適に動作します。

  • CUI
  • GUI
  • ※基本的にLinuxが軽量で古いPCでも動作するという話は、
    GUIは利用しないという前提が暗に含まれている場合があります。

このような様々な違いがありますが、あくまでUIが異なるだけでLinuxの機能が変化するわけではありません。無論GUIによって提供される便利な機能もありますが、CUIではできないという機能はあまり見当たりません。このことからも基本的にLinuxにとってGUIとCUIの違いは操作性や見た目などの違いに過ぎず、GUIを実現したからといって特に機能的な変化はないといってもいいでしょう。

LinuxでのGUIの実現

それではLinux上でGUIはどのように実現されているのでしょうか。例えばWindowsやMacOSなどはある程度OSがGUIを前提としているためGUIを切り離して利用することがあまり考慮されていません。

  • ※MacOS XになるとLinuxのGUIの利用方法と似てきますが、
    MacOS XはコアがUNIXなので、そう考えれば当然ですね・・・。

しかしLinuxはGUIとCUIを自由に切り替えることが可能であり、好きなときにGUIとCUIを使い分けることができます。これを可能にしているのはLinuxがカーネルとUIの仕組みを完全に切り離しているからであり、CUIもGUIもカーネルから見ると1つのアプリケーションに過ぎないという仕組みによって成り立っているからです。
このLinux上においてGUIを実現しているアプリケーションが、X Window System(または単にX)といわれるものです。XはもともとUNIX用のWindow Systemとして開発され、現行ではバージョン11リリース6.4.となっています。このためX11R6という名前でも呼ばれることがあります。 X11R6は仕様が公開されており無償ライセンスであるため、ディストリビューションではこの仕様をX.orgが実装したX が利用されています。

  • ※以前のディストリビューションのXにはXFree86というソフトウェアが利用されていましたが、途中でXFree86のライセンス条項が変更されたため GPLのソフトウェアの中にはライセンスの矛盾により使用ができないものもでてきてしまいました。このため現在のディストリビューションのX はX.orgのシステムが利用されています。

Xはクライアントサーバモデルになっており、XサーバとXクライアントのやり取りによってGUIが実現されています。

LinuxでのGUIの実現

これによってXクライアントはOS上でどのように描画が行われているかを考える必要がなく、Xlibというライブラリを利用してXサーバとの通信だけを考えればいいということになります。それぞれはXクライアントであるWebブラウザ、スプレッドシートなどのアプリケーションが描画をXサーバに依頼し、Xサーバがビデオカード、キーボード、マウスなどのハードウェアの入出力を制御して入力をクライアントに通知し、画面に描画する役割を持ちます。例えば、Xサーバのみが動作している極端な環境を考えてみます。Xサーバのみではウィンドウの移動、リサイズ、表示、非表示などの基本的なウィンドウ操作を行うことができません。例外的にマウスカーソルだけが提供されているだけです。Xの基本入力装置であるマウスもカーソルの移動イベントがマウスカーソルの移動の描画という形で行なわれるだけで、クリックなどを行なっても何も起こりません。これはウィンドウ操作を行うためにはそれを行うためのXクライアントが必要であり、クリックイベントが起こってもそれを処理するXクライアントが存在しないからです。このためウィンドウ制御を提供するXクライアントが別途必要になります。このウィンドウ制御に関する様々な機能を提供するのがウィンドウマネージャです。

ウィンドウシステムとウィンドウマネージャ

Xの1つの特徴としてウィンドウに関する見た目、操作などをXサーバは管理していないということがあげられます。これはXサーバが行う仕事はマウス、キーボードなどからのイベント通知、ウィンドウの座標位置、高さ、幅などの描画に関する情報の管理であって、ウィンドウの見た目、移動、サイズ変更などはXクライアントによって提供されるものであるという考えのためです。つまりX Window Systemという仕組みはウィンドウのLook&Feelを自身ではもっていないということになり、Look&FeelをXクライアントというかたちで自由に実現できることを意味しています。このような複数のウィンドウの概観や操作に関する管理を行うのがXクライアントであるウィンドウマネージャです。

ウィンドウシステムとウィンドウマネージャ

ウィンドウマネージャはXの担当しないLook&Feelを行うためのXクライアントアプリケーションで、これを変えることによってインターフェイスが大きく変化します。これはWindowsなどといった単一のGUIのみしか利用できないOSとは大きくことなる点です。注意すべき点はウィンドウマネージャがなくても他のXクライアントアプリケーションは動作することが可能なことです。これはXクライアントアプリケーションがイベントを受け取ったり、描画を依頼する対象はあくまでXサーバであって、ウィンドウマネージャではないためです。逆にXサーバからみればウィンドウマネージャもまたX クライアントの1つに過ぎず、ウィンドウマネージャがなくても他のXクライアントの描画の要求を処理することができるわけです。ただしウィンドウマネージャがない場合はウィンドウに関するLook&Feelは提供されないことになるため、ウィンドウ制御は行なえないことになります。

ウィンドウマネージャにはfwm、AfterStep、WindowMaker、XFce、blackbox、gwm、kwm、Metacityなど様々なものがあります。これらのウィンドウマネージャはユーザの嗜好によって自由に変更することができます。特にgwm、Metacity 、kwmは統合デスクトップ環境である、GNOME、KDEの一部として提供されています。統合デスクトップ環境とはウィンドウマネージャだけではなく、 GUIでの環境設定などを行うユーティリティ、アプリケーションなどを開発するためのツールキットなどを統合して提供しているものです。現在の各種 LinuxディストリビューションではXをインストールするとそのデスクトップ環境としてGNOME、KDEなどが利用できるようになっています。

  • ※最近のディストリビューションのほとんどはGUIを起動した際にGNOME、KDEのいづれかの統合デスクトップ環境が起動するようになっています。

余談:拡張子とサフィックス

Windowsで利用されるファイルを識別する仕組みとして、ファイル名には「.xxx」という形式で拡張子がつけられます。Linux上のファイルにもこのような「.xxx」という名前がつけられますが、これはLinuxではサフィックス(接尾語)という名前で呼ばれます。基本的に拡張子の考え方は、GUIの世界でファイルの実行する際のアプリケーションとの関連づけに利用されます。例えば.txtというファイルをマウスで実行するとテキストエディタが起動したり、.docファイルを実行するとWordが起動したりします。これはGUIの仕組みが明示的にアプリケーションを指定して実行するのではなくシステムがファイルとの関連づけを保存しており、ファイルの実行によりその関連づけされたアプリケーションを自動起動する仕組みになっているためです。このため拡張子という考え方が重要になってきます。それに対してLinuxのGUIは後付的に導入されたものであるため、基本的にファイル名のあとにつけるのはファイルを識別するための文字であって、単なる名前付けの意味合いが強いといえます。このためサフィックスという呼び方をします。無論 LinuxでもGUI的な使い方をすれば、ファイルの実行とともにアプリケーションを起動する必要があるため、サフィックスの意味は拡張子的な意味になりますが・・・。

  • ※CUIの世界でもコマンドによってはサフィックスを利用するものがありますので、必ずしも見た目だけでファイルを識別するものだとは言い切れませんが。

このようにLinux上でもGUIを利用することができ、その機能は年々ものすごい勢いで向上しています。しかしLinuxのベースとなる利用方法がコマンドをベースとするものであったり、リモート操作などを考えるとCUIベースでのコマンド操作は切っても切り離せないものだといえます。しかしGUIの長所とCUIのコマンド操作の長所をうまく組み合わせることによって、より利用しやすい環境にできればベストだと思います。結局GUIでもCUIでもUIを実現させる1つの方法論に過ぎませんので、利用する人が自分にあったものを選択すればよいと思います。

末永 貴一

コラム執筆/末永 貴一
株式会社エイチアイ研究開発部 部長

ヒューマンインターフェイスの研究開発、コンテンツの開発を行う株式会社エイチアイで次世代技術の研究開発を行う業務を担当している。 オープン系のシステム開発事業、教育事業を経て、自社独自の組込み機器向け3DリアルタイムレンダリングエンジンであるミドルウェアのMascotCapsuleを中心とした開発に従事した。数年前にLinuxを知ってからはサーバ構築、開発、教育、執筆などさまざまな場面で関わるようになり、現在では組込み開発でもLinuxを利用することもある。

このページのトップへ

Facebook like

twitter lpijapan

twitter ossdblpijapan

twitter html5Cert