ウィンドウシステム

ウィンドウの典型的な要素。ウィンドウの装飾はウィンドウマネージャまたはクライアントによって描画されます。コンテンツの描画はクライアントが行います。

コンピューター科学において、ウィンドウシステム(またはウィンドウシステム)とは、ディスプレイ画面の異なる部分を個別に管理するソフトウェアスイートである。[ 1 ]これは、ユーザーインターフェースとしてWIMPウィンドウアイコンメニューポインタ)パラダイムを実装したグラフィカルユーザーインターフェース(GUI)の一種である。

実行中の各アプリケーションには、通常はサイズ変更可能で、通常は長方形のディスプレイ領域が割り当てられ、そこにGUIがユーザーに表示されます。これらのウィンドウは、重ね合わせることができないタイル型インターフェースとは異なり、互いに重ね合わせることができます。通常、各ウィンドウの周囲にはウィンドウ装飾が描画されます。ウィンドウ装飾と、スライダーやボタンなど、ユーザーが直接操作するためのグラフィカル要素であるウィンドウ内のウィジェットのプログラミングは、ウィジェットツールキットを使用することで容易かつ簡素化されます。

技術的な詳細

ウィンドウ システムの主要コンポーネントは通常、ディスプレイ サーバーと呼ばれますが、ウィンドウ サーバーなどの代替用語も使用されています。ウィンドウで実行され GUI を表示するアプリケーションはすべて、ディスプレイ サーバーのクライアントです。ディスプレイ サーバーとそのクライアントは、アプリケーション プログラミング インターフェイス(API) または通信プロトコル(通常、ディスプレイ サーバー プロトコルと呼ばれます) を介して相互に通信します。ディスプレイ サーバーは、クライアントとユーザーの間の仲介役となります。ディスプレイ サーバーは、接続されているすべての入力デバイス(キーボードポインティング デバイス、タッチ スクリーンなど) からカーネルが受信するすべての入力をカーネルから受信し、適切なクライアントに送信します。ディスプレイ サーバーは、クライアントからコンピューター モニターへの出力も担当します。サウンドの出力は通常、ディスプレイ サーバーによって管理されませんが、サウンドの音量は通常 GUI アプレットによって処理され、どのアプリケーションを最前面に表示するかを決定するのはディスプレイ サーバーです。ウィンドウ システムを使用すると、コンピューター ユーザーは複数のプログラムを同時に操作できます。各プログラムは、通常、画面の長方形の領域である独自のウィンドウに GUI を表示します。

プログラマーの観点から見ると、ウィンドウシステムはグラフィカルプリミティブを実装します。例えば、フォントのレンダリングや画面への線の描画などです。ウィンドウシステムは、ウィンドウマネージャーなどのグラフィカルインターフェースの高レベル要素が使用できるように、グラフィックスハードウェアを抽象化します。

ディスプレイ サーバー プロトコルは、ネットワーク対応またはネットワーク透過的であるため、シン クライアントの実装が容易になります。

ディスプレイサーバー

GUIの基本コンポーネント:ディスプレイサーバーはウィンドウシステムを実装します。シンプルなウィンドウマネージャーはウィンドウの装飾を描画するだけですが、コンポジットウィンドウマネージャーはさらに多くのことを行います

ディスプレイサーバーまたはウィンドウサーバーは、クライアントとオペレーティングシステム、ハードウェア、そしてクライアント同士の入出力を調整することを主な役割とするプログラムです。ディスプレイサーバーは、ディスプレイサーバープロトコル(ネットワーク透過型またはネットワーク対応型の 通信プロトコル)を介してクライアントと通信します。

ディスプレイ サーバーは、あらゆるグラフィカル ユーザー インターフェイス、特にウィンドウ システムの重要なコンポーネントです。

スタンドアロンディスプレイサーバーのサーバー/クライアント関係は、やや直感に反するものです。「サーバー」は通常、大規模なリモートマシンとして考えられますが、「ディスプレイサーバー」は小規模なローカルシステムであり、ほとんどのクライアントはより大きな中央マシン上で実行されます。これは、ディスプレイサーバーがディスプレイと入力デバイスの サービスを提供するという説明に似ています。

ディスプレイサーバーの通信プロトコル

X11

X.Orgサーバーは、X11プロトコルを介してXクライアント(ローカルまたはリモート)および周辺機器と通信します
Xウィンドウシステムロゴ
Xウィンドウシステムロゴ

X Window Systemは1984年に初めてリリースされ、歴史的にUnixおよびUnix系オペレーティングシステムの主要なウィンドウシステムとなっています。コアプロトコルは1987年からバージョン11であるため、一般的に「X11」と呼ばれています。X11プロトコルの現在のリファレンス実装はX.Org Serverであり、ディスプレイサーバーといくつかの補助コンポーネントを提供します。X Window Systemはルックアンドフィールを定義していません。代わりに、ユーザーはウィンドウマネージャー(スタンドアロンまたはより広範なデスクトップ環境の一部)とウィジェットツールキットを使用して設計されたアプリケーションを実行します。X.Orgリポジトリには、リファレンスウィンドウマネージャーtwm、ウィジェットツールキットのリファレンス実装X Athena Widgets、そして電卓や時計などの基本的なアプリケーションが含まれています。[ 2 ]

X11 ディスプレイ サーバー プロトコルを実装するディスプレイ サーバーの他の注目すべき例としては、XFree86 (現在の X.Org サーバーの元)、XQuartz ( macOS用)、およびCygwin/X ( Microsoft Windows用) などがあります。

ウェイランド

Waylandディスプレイサーバープロトコル
Wayland ロゴ
Wayland ロゴ

Waylandプロトコルを実装したディスプレイサーバーはWaylandコンポジターと呼ばれ、Waylandプロトコルを介してクライアントと通信します。WaylandはX11の後継として開発され、X11の設計とは大きく異なります。Waylandコンポジターは、ディスプレイサーバー、ウィンドウマネージャー、コンポジティングマネージャーの機能を1つのコンポーネントに統合していますが、X11ではこれらは別々のソフトウェアです。[ 3 ]

WaylandプロトコルのスコープはX11のコアプロトコルよりもはるかに狭く、クライアントが「サーフェス」と呼ばれるバッファにデータを書き込む方法のみを定義しており、ネットワークプロトコルとしては機能しません。その他のすべての機能は、拡張プロトコル(wayland-protocolsリポジトリで上流に開発)、LinuxカーネルのDirect Rendering Managerおよびevdevコンポーネント、Mesa 3Dグラフィックスライブラリ、ウィジェットツールキット( GTKQtEFLなど)、XDGデスクトップポータルシステム、 libinputPipeWireなどのさまざまなソフトウェアパッケージに委譲されています。

Waylandは、X11から移植されたGNOME [ 4 ]KDE Plasma [ 5 ] 、そしてWaylandネイティブ環境としてゼロから書かれたCOSMICのような環境など、いくつかのオープンソースデスクトップ環境に採用されています。Weston 、SwayHyprlandWayfirenirilabwcなどのスタンドアロンコンポジターも利用可能です。Waylandはまた、Tizen [ 6 ] 、 Sailfish OS [ 7 ]WebOS [ 8 ]など、いくつかの組み込みおよびモバイルに重点を置いたシステムにも採用されています。

Wayland のリファレンス実装は、MIT ライセンスの下で利用可能であり、 libwayland-client および libwayland-server ライブラリで構成されています。

ChromeOSにWaylandのサポートを追加する取り組みが進行中です。[ 9 ]

ミール

Mirディスプレイサーバーには、X11やWaylandで使用されるものとは異なる独自のMirディスプレイサーバープロトコルが付属しています。MirはX11プロトコルもサポートしています。Canonicalによって開発されUbuntuのディスプレイサーバーとして選ばれることを目的としていました。2017年現在、Ubuntuのデスクトップ版ではWaylandディスプレイサーバーに置き換えられています

Mir ディスプレイ サーバー、libmir-server、libmir-client ライブラリの実装がGPLv3で利用可能です。

APIを使用したウィンドウシステム

サーフェスフリンガー

GoogleはAndroid向けにサーフェス フリンガー[ 10 ]と呼ばれるディスプレイサーバーを開発しました

Androidのすべては「サーフェス」にレンダリングされます。「サーフェス」はアプリケーションによって生成され、SurfaceFlingerによって管理されるキューに配置されます。[ 11 ] [ 12 ]

Android固有のソリューションとして、もう一つ「Gralloc」があります。Grallocはデバイスメモリの割り当て、調停、Android/Linuxフェンスファイルディスクリプタを介した同期処理などを行います。Grallocは、MesaのGeneric Buffer Management(GBM)やNvidiaのEGLStreamsといった他のソリューションと競合します。Grallocのハードウェア抽象化レイヤー(HAL)は、「サーフェス」の基盤となるバッファの割り当てに使用されます。

Android での合成では、Surface は SurfaceFlinger に送信され、OpenGL ES を使用して合成が行われます。

ハードウェアコンポーザーHAL(HWC)はAndroid 3.0で導入され、長年にわたり着実に進化してきました。その主な目的は、利用可能なハードウェアでバッファを合成する最も効率的な方法を決定することです。HALであるため、実装はデバイス固有であり、通常はディスプレイハードウェアのOEMによって行われます。

Quartzコンポジター

AppleのmacOSファミリーのオペレーティングシステムにおいて、Quartzコンポジターはウィンドウシステムにおけるディスプレイサーバーとウィンドウマネージャーの役​​割を担います

デスクトップウィンドウマネージャー

Microsoft Windowsでは、Windows Vista以降、デスクトップウィンドウマネージャーにより、ハードウェアアクセラレーションを使用してグラフィカルユーザーインターフェイスをレンダリングできます。これは元々、透明化や3Dウィンドウの切り替えなどの効果を可能にする新しい「Windows Aero」ユーザーエクスペリエンスの一部を実現するために作成されました。Windows Server 2008にも含まれていますが、「デスクトップエクスペリエンス」機能と互換性のあるグラフィックドライバーがインストールされている必要があります。Windows 8以降、DWMは無効化できず、適切なグラフィックカードがインストールされていない場合は ソフトウェアでレンダリングされます

ウィンドウシステムの一覧

Unix系オペレーティングシステムの場合

Windows NTファミリーオペレーティングシステム用

Webウィンドウシステム

その他

Microsoft WindowsXP9x以前)、クラシックMac OS(バージョン9以前)、Palm OSなどの一部のシステムには、OSと統合されたウィンドウシステムが含まれています

参照

参考文献

  1. ^ Kent, Allen; Williams, James G. (1996-10-11). Encyclopedia of Microcomputers: Volume 19 - Truth Maintenance Systems to Visual Display Quality . CRC Press. p. 227. ISBN 978082472717820176月8日閲覧
  2. ^ "app" . gitlab.freedesktop.org . 2025年7月26日閲覧。
  3. ^ 「第1章 はじめに」wayland.freedesktop.org . 2025年7月26日閲覧
  4. ^ 「Initiatives/Wayland/GnomeShell – GNOME Wiki アーカイブ」 . wiki.gnome.org . 2025年7月26日閲覧
  5. ^ Flöser, Martin (2012年9月21日). 「KWinとKDEにおけるWaylandの進捗状況に関する最新情報」 . Martinのブログ. 2025年7月26日閲覧
  6. ^ 「TizenネイティブAPI:Ecore_Wl2 - Wayland統合」 . docs.tizen.org . 2025年7月26日閲覧
  7. ^ 「アプリ」 . Sailfish OS ドキュメント. 2025年7月26日閲覧。
  8. ^ 「グラフィックスと入力」 . www.webosose.org . 2025年7月26日閲覧。
  9. ^ 「オゾンの概要」 。 2017年8月20日閲覧
  10. ^ 「Androidシステムアーキテクチャ」(PDF) 。2016年4月8日時点のオリジナル(PDF)からのアーカイブ
  11. ^ 「Android 開発者: Surface」
  12. ^ 「Android 開発者: SurfaceFlinger と Hardware Composer」
  13. ^ 「HP Windows/9000 ユーザーズマニュアル」(PDF) . Hewlett Packard. 1988年4月. 2021年10月26日閲覧
  14. ^ 「Andrew: 分散パーソナルコンピューティング環境」(PDF) . Communications of the ACM . 29 (3). 1986年3月.
  15. ^ Myers, Brad (1984年12月). 「Sapphireのユーザーインターフェース」(PDF) . IEEE Computer Graphics and Applications . 4 (12): 13– 23. doi : 10.1109/MCG.1984.6429376 . S2CID 11138733 . 
  16. ^ "Chilton::INF::Window Management" . www.chilton-computing.org.uk . 2023年4月11日閲覧
  17. ^ 「Yウィンドウシステム」www.y-windows.org . 2025年12月15日閲覧