ディスプレイサーバ
ディスプレイサーバとは、ウィンドウシステムにおいて、ポインティングデバイス・キーボード・ディスプレイのハードウェア制御を行い、遠隔または同一のコンピュータ上で動作する他のプログラムに対し、ポインティングデバイス・キーボード・ディスプレイによる入出力の機能を提供するプログラムである。
機能の提供はディスプレイサーバプロトコルと呼ばれる通信プロトコルを通じて行われる。
![](http://upload.wikimedia.org/wikipedia/commons/thumb/9/95/Schema_of_the_layers_of_the_graphical_user_interface.svg/300px-Schema_of_the_layers_of_the_graphical_user_interface.svg.png)
利用可能なプロトコル
X11
![](http://upload.wikimedia.org/wikipedia/commons/thumb/b/b2/X11_display_server_protocol.svg/350px-X11_display_server_protocol.svg.png)
X.Org Serverは、通常、LinuxやBSDなどのUnixベースのカーネル上で動作する。 X.Org Serverは、ユーザーの入力やクライアントからデータを受け取り、処理・合成し、LinuxではDRMやgem、KMSなどのカーネルコンポーネントに出力する。 カーネルコンポーネントは受け取ったデータをフレームバッファに書き込み、画面に表示する。 XはGLXに依存している。
ディスプレイサーバの概念を実装したものとして、 X Windowシステムがある。実際に使われているものとしては、X.Org サーバおよび Xlib、XCBなどがある。 X.Org サーバはディスプレイサーバだが、現在の実装では、MutterやKwinといったコンポジットウィンドウマネージャに依存している。
有名なX11プロトコルを実装したディスプレイサーバの例としては、 X.Org サーバや XFree86、XQuartz、Cygwin/Xなどがある。クライアント向けのライブラリとしてはXlibやXCBがある。
xevと呼ばれるUnixコマンドは、ウィンドウを作成し、ウィンドウに発生したイベントの情報(リサイズやキーボードからの入力、マウスクリックなど)を送信するようディスプレイサーバに要求し、受け取った情報をコンソールに出力する。
Wayland
![](http://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Wayland_display_server_protocol.svg/300px-Wayland_display_server_protocol.svg.png)
Waylandのプロトコルを実装するディスプレイサーバは、Waylandコンポジットと呼ばれる。Waylandコンポジットは、クライアントに対する入出力を処理する。X11とは違い、コンポジットも担当する。Waylandを実装したものとしては、 Weston[1]やMutter、Kwin、Enlightenment[2]などがある。
Waylandコンポジットは、Waylandディスプレイサーバプロトコルを使用してクライアントと通信する。このプロトコルは、EGLレンダリングAPIのフレームバッファを利用し、クライアントが直接データーを出力できるように定義されている。また、ディスプレイサーバは、どのウィンドウが最上部に位置するか、つまりユーザーが何を見えるのかを判断し、ディスプレイに表示する。また、evdev(英語版)からクライアントへの情報の伝達にも責任を負う。
WaylandはFedoraなどいくつかのLinuxディストリビューションで採用されている[3]。また、Waylandはモバイルにも適しており、TizenやSalifish OSといったスマートフォンやタブレット向けのプロジェクトでも採用されている。
Waylandの実装はMITライセンスで提供されているlibwayland-clientとlibwayland-serverを使うことで使用可能となる。
また、WaylandをChromeOSに実装するプロジェクトが進行中である[4]。
Mir
Mirは、Ubuntuのディスプレイサーバに採用されることを目的にカノニカルによって開発されたが、2017年にUbuntuのディスプレイサーバはWaylandに変更された。Mirは、X11やWaylandに使われているものとは異なる、独自のMirディスプレイサーバプロトコルを使用するが、X11プロトコルもサポートする[5]。
Mirの実装は、GPLv3でライセンスされたlibmir-serverとlibmir-clientのもとで利用することができる。
SurfaceFlinger
SurfaceFlingerは、Android用にGoogleによって開発されたディスプレイサーバである。
Androidのコンポーネントは、全て"surface"にレンダリングされる。"surface"は、アプリケーションによって生成され、SurfaceFlingerによって管理されるキューに入れられる。[6][7]
また、Android特有のものとして、デバイスのメモリの割当や仲裁、ファイル記述子の同期といったメモリ管理を行う"Gralloc"がある。Grallocは、GBMやNvidiaのEGLStreamsなどと競合する。Grallocのハードウェア抽象化レイヤ (HAL) は、"surface"の基礎となるバッファを割り当てるために使用される。
Androidでコンポジットを行うとき、SurfacesはSurfaceFlingerに送られ、OpenGL ESを使用して合成が行われる。
HWCはAndroid 3.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 Server 2008でも使用可能だが、"Desktop Experience"を有効にし、互換性のあるグラフィックドライバをインストールする必要がある。
脚注
- ^ “Wayland”. wayland.freedesktop.org. 2023年12月30日閲覧。
- ^ “Wayland”. www.enlightenment.org. 2023年12月30日閲覧。
- ^ “Why Wayland Anyway?”. Goings On. Matthias Clasen. 2016年6月17日閲覧。
- ^ “Ozone Overview”. 2017年8月20日閲覧。
- ^ ThomasVo5 (2013年3月4日). “[Updated Mir – An outpost envisioned as a new home]”. tvoss@work. 2017年8月5日閲覧。
- ^ “Android Developer: Surface”. 2020年3月8日閲覧。
- ^ “Android Developer: SurfaceFlinger and Hardware Composer”. 2020年3月8日閲覧。