1<?xml version='1.0' encoding='utf-8' ?> 2<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [ 3<!ENTITY % BOOK_ENTITIES SYSTEM "Wayland.ent"> 4%BOOK_ENTITIES; 5]> 6<chapter id="chap-Compositors"> 7 <title>Types of Compositors</title> 8 9 <para> 10 Compositors come in different types, depending on which 11 role they play in the overall architecture of the OS. 12 For instance, a 13 <link linkend="sect-Compositors-System-Compositor">system compositor</link> 14 can be used for booting the system, handling multiple user switching, a 15 possible console terminal emulator and so forth. A different compositor, a 16 <link linkend="sect-Compositors-Session-Compositor">session compositor</link> 17 would provide the actual desktop environment. There are many ways for 18 different types of compositors to co-exist. 19 </para> 20 <para> 21 In this section, we introduce three types of Wayland compositors relying 22 on <link linkend="sect-Library-Server">libwayland-server</link>. 23 </para> 24 25 <section id="sect-Compositors-System-Compositor"> 26 <title>System Compositor</title> 27 <para> 28 A system compositor can run from early boot until shutdown. 29 It effectively replaces the kernel vt system, and can tie in 30 with the systems graphical boot setup and multiseat support. 31 </para> 32 <para> 33 A system compositor can host different types of session 34 compositors, and let us switch between multiple sessions 35 (fast user switching, or secure/personal desktop switching). 36 </para> 37 <para> 38 A linux implementation of a system compositor will typically 39 use libudev, egl, kms, evdev and cairo. 40 </para> 41 <para> 42 For fullscreen clients, the system compositor can reprogram the 43 video scanout address to read directly from the client provided 44 buffer. 45 </para> 46 </section> 47 <section id="sect-Compositors-Session-Compositor"> 48 <title>Session Compositor</title> 49 <para> 50 A session compositor is responsible for a single user session. 51 If a system compositor is present, the session compositor will 52 run nested under the system compositor. Nesting is feasible because 53 the protocol is asynchronous; roundtrips would be too expensive 54 when nesting is involved. If no system compositor is present, a 55 session compositor can run directly on the hw. 56 </para> 57 <para> 58 X applications can continue working under a session compositor 59 by means of a root-less X server that is activated on demand. 60 </para> 61 <para> 62 Possible examples for session compositors include 63 <itemizedlist> 64 <listitem> 65 <para> 66 gnome-shell 67 </para> 68 </listitem> 69 <listitem> 70 <para> 71 moblin 72 </para> 73 </listitem> 74 <listitem> 75 <para> 76 kwin 77 </para> 78 </listitem> 79 <listitem> 80 <para> 81 kmscon 82 </para> 83 </listitem> 84 <listitem> 85 <para> 86 rdp session 87 </para> 88 </listitem> 89 <listitem> 90 <para> 91 Weston with X11 or Wayland backend is a session compositor nested 92 in another session compositor. 93 </para> 94 </listitem> 95 <listitem> 96 <para> 97 fullscreen X session under Wayland 98 </para> 99 </listitem> 100 </itemizedlist> 101 </para> 102 </section> 103 <section id="sect-Compositors-Embedding-Compositor"> 104 <title>Embedding Compositor</title> 105 <para> 106 X11 lets clients embed windows from other clients, or lets clients 107 copy pixmap contents rendered by another client into their window. 108 This is often used for applets in a panel, browser plugins and similar. 109 Wayland doesn't directly allow this, but clients can communicate GEM 110 buffer names out-of-band, for example, using D-Bus, or command line 111 arguments when the panel launches the applet. Another option is to 112 use a nested Wayland instance. For this, the Wayland server will have 113 to be a library that the host application links to. The host 114 application will then pass the Wayland server socket name to the 115 embedded application, and will need to implement the Wayland 116 compositor interface. The host application composites the client 117 surfaces as part of it's window, that is, in the web page or in the 118 panel. The benefit of nesting the Wayland server is that it provides 119 the requests the embedded client needs to inform the host about buffer 120 updates and a mechanism for forwarding input events from the host 121 application. 122 </para> 123 <para> 124 An example for this kind of setup is firefox embedding the flash 125 player as a kind of special-purpose compositor. 126 </para> 127 </section> 128</chapter> 129