ディスプレイサーバ

出典: フリー百科事典『ウィキペディア(Wikipedia)』
ナビゲーションに移動 検索に移動
ディスプレイサーバはグラフィカルユーザーインターフェースを構成する基本コンポネートで、ウィンドウマネージャを実装します。単純なウィンドウマネージャーはウィンドウの描画のみを行いますが、コンポジットウィンドウマネージャの場合より多くのことを行います。

ディスプレイサーバは、主にクライアントの入出力とオペレーティング・システムハードウェアとを調整するプログラムである。 ディスプレイサーバーはクライアントと 通信プロトコル(ネットワークケーブルなど)を介して通信する。

ディスプレーサーバーは、GUI、特にウィンドウシステムの重要なコンポーネントの一つである。

利用可能なプロトコル[編集]

X11[編集]

X.Org サーバは、X11プロトコルを介してクライアントと通信します。

X.Org Serverは、通常、LinuxBSDなどのUnixベースのカーネルの上で実行されるディスプレイサーバーの一つ。 X.Org Serverは、ユーザーの入力やクライアントからデータを受け取り、処理・合成し、LinuxだとDRMgem、KMSなどのカーネルコンポーネントに出力する。 カーネルコンポーネントは受け取ったデータをフレームバッファに書き込み、画面に表示する。 XはGLXに依存する。

X11の実装例の一つとして、 X Windowシステムがある。実際に使われているものとしては、X.Org サーバーおよび Xlib、XCBなどがある。 X.Org サーバはディスプレイサーバだが、実際の実装は、MutterやKwinといったコンポジットウィンドウマネージャに依存している。

有名なX11プロトコルを実装したディスプレイサーバーの例としては、 X.Org サーバーXFree86XQuartzCygwin/Xなどがある。クライアント向けのライブラリとしてはXlibやXCBがある。

 xevと呼ばれるUnixコマンドは、ウィンドウを作成し、ウィンドウに発生したイベントの情報(リサイズやキーボードからの入力、マウスクリックなど)を送信するようディスプレイサーバーに要求し、受け取った情報をコンソールに出力する。

Wayland[編集]

Waylandのプロトコル

Waylandのプロトコルを実装するディスプレイサーバーは、Waylandコンポジットと呼ばれる。Waylandコンポジットは、クライアントに対する入出力を処理する。X11とは違い、コンポジットも担当する。Waylandを実装したものとしては、 WestonMutterKwinEnlightmentなどがある。

Waylandコンポジットは、Waylandディスプレイサーバープロトコルを使用してクライアントと通信する。このプロトコルは、EGLレンダリングAPIのフレームバッファを利用し、クライアントが直接データーを出力できるように定義されている。また、ディスプレイサーバーは、どのウィンドウが最上部に位置するか、つまりユーザーが何を見えるのかを判断し、ディスプレイに表示する。また、evdevからクライアントへの情報の伝達にも責任を負う。

WaylandはFedoraなどいくつかのLinuxディストリビューションで採用されている[1]。また、Waylandはモバイルにも適しており、TizenやSalifish OSといったスマートフォンやタブレット向けのプロジェクトでも採用されている。

Waylandの実装はMITライセンスで提供されているlibwayland-clientとlibwayland-serverを使うことで使用可能となる。

また、WaylandをChrome OSに実装するプロジェクトが進行中である[2]

Mir[編集]

Mirは、Ubuntuのディスプレイサーバーに採用されることを目的にCanonicalによって開発されたが、2017年にUbuntuのディスプレイサーバーはWaylandに変更された。Mirは、X11やWaylandに使われているものとは異なる、独自のMirディスプレイサーバープロトコルを使用するが、X11プロトコルもサポートする[3]

Mirの実装は、GPLv3でライセンスされたlibmir-serverとlibmir-clientのもとで利用することができる。

SurfaceFlinger[編集]

SurfaceFlingerAndroid用にGoogleによって開発されたディスプレイサーバーである。

Androidのコンポーネントは、全て"surface"にレンダリングされる。"surface"は、アプリケーションによって生成され、SurfaceFlingerによって管理されるキューに入れられる。[4][5]

また、Android特有のものとして、デバイスのメモリの割当や仲裁、ファイル記述子の同期といったメモリ管理を行う"Gralloc"があります。Grallocは、GBMやNvidiaのEGLStreamsなどと競合する。Grallocのハードウェア抽象化レイヤ(HAL)は、"surface"の基礎となるバッファを割り当てるために使用される。

Androidでコンポジットを行うとき、SurfacesはSurfaceFlingerに送られ、OpenGL ESを使用して合成が行われる。

HWCはAndroid3.0にて導入され、開発が続いている。HWCの主要な目的は、 ハードウェアを用いた合成時の効率を上げることである。HALの実装は各端末により異なり、通常はOEMが担当する。

Quartz[編集]

Apple社macOSの描画エンジン。Quartzは、ディスプレイサーバーの機能とウィンドウシステム内のウィンドウマネージャの機能を実装している。

Desktop Window Manager(DWM)[編集]

Desktop Window Managerは、Windows Vista以降のMicrosoft Windowsに導入された。GUIの描画にハードウェアアクセラレーションを使用する。DWMは、"Windows Aero"の機能である透明化や、3Dのウィンドウ切り替えなどを行う。DWMはWindows Server2008でも使用可能だが、"Desktop Experience"を有効にし、互換性のあるグラフィックドライバをインストールする必要がある。

脚注[編集]

[脚注の使い方]
  1. ^ Why Wayland Anyway?”. Goings On. Matthias Clasen. 2016年6月17日閲覧。
  2. ^ Ozone Overview”. 2017年8月20日閲覧。
  3. ^ ThomasVo5 (2013年3月4日). “[Updated Mir – An outpost envisioned as a new home]”. tvoss@work. 2017年8月5日閲覧。
  4. ^ Android Developer: Surface”. 2020年3月8日閲覧。
  5. ^ Android Developer: SurfaceFlinger and Hardware Composer”. 2020年3月8日閲覧。

関連項目[編集]