Home | History | Annotate | Download | only in sources
      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