aboutsummaryrefslogtreecommitdiffstats
path: root/doc/publican/Compositors.xml
diff options
context:
space:
mode:
Diffstat (limited to 'doc/publican/Compositors.xml')
-rw-r--r--doc/publican/Compositors.xml128
1 files changed, 128 insertions, 0 deletions
diff --git a/doc/publican/Compositors.xml b/doc/publican/Compositors.xml
new file mode 100644
index 0000000..7a7bdaa
--- /dev/null
+++ b/doc/publican/Compositors.xml
@@ -0,0 +1,128 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
+<!ENTITY % BOOK_ENTITIES SYSTEM "Wayland.ent">
+%BOOK_ENTITIES;
+]>
+<chapter id="chap-Compositors">
+ <title>Types of Compositors</title>
+
+ <para>
+ Compositors come in different types, depending on which
+ role they play in the overall architecture of the OS.
+ For instance, a
+ <link linkend="sect-Compositors-System-Compositor">system compositor</link>
+ can be used for booting the system, handling multiple user switching, a
+ possible console terminal emulator and so forth. A different compositor, a
+ <link linkend="sect-Compositors-Session-Compositor">session compositor</link>
+ would provide the actual desktop environment. There are many ways for
+ different types of compositors to co-exist.
+ </para>
+ <para>
+ In this section, we introduce three types of Wayland compositors relying
+ on <link linkend="sect-Library-Server">libwayland-server</link>.
+ </para>
+
+ <section id="sect-Compositors-System-Compositor">
+ <title>System Compositor</title>
+ <para>
+ A system compositor can run from early boot until shutdown.
+ It effectively replaces the kernel vt system, and can tie in
+ with the systems graphical boot setup and multiseat support.
+ </para>
+ <para>
+ A system compositor can host different types of session
+ compositors, and let us switch between multiple sessions
+ (fast user switching, or secure/personal desktop switching).
+ </para>
+ <para>
+ A linux implementation of a system compositor will typically
+ use libudev, egl, kms, evdev and cairo.
+ </para>
+ <para>
+ For fullscreen clients, the system compositor can reprogram the
+ video scanout address to read directly from the client provided
+ buffer.
+ </para>
+ </section>
+ <section id="sect-Compositors-Session-Compositor">
+ <title>Session Compositor</title>
+ <para>
+ A session compositor is responsible for a single user session.
+ If a system compositor is present, the session compositor will
+ run nested under the system compositor. Nesting is feasible because
+ the protocol is asynchronous; roundtrips would be too expensive
+ when nesting is involved. If no system compositor is present, a
+ session compositor can run directly on the hardware.
+ </para>
+ <para>
+ X applications can continue working under a session compositor
+ by means of a root-less X server that is activated on demand.
+ </para>
+ <para>
+ Possible examples for session compositors include
+ <itemizedlist>
+ <listitem>
+ <para>
+ gnome-shell
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ moblin
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ kwin
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ kmscon
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ rdp session
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ Weston with X11 or Wayland backend is a session compositor nested
+ in another session compositor.
+ </para>
+ </listitem>
+ <listitem>
+ <para>
+ fullscreen X session under Wayland
+ </para>
+ </listitem>
+ </itemizedlist>
+ </para>
+ </section>
+ <section id="sect-Compositors-Embedding-Compositor">
+ <title>Embedding Compositor</title>
+ <para>
+ X11 lets clients embed windows from other clients, or lets clients
+ copy pixmap contents rendered by another client into their window.
+ This is often used for applets in a panel, browser plugins and similar.
+ Wayland doesn't directly allow this, but clients can communicate GEM
+ buffer names out-of-band, for example, using D-Bus, or command line
+ arguments when the panel launches the applet. Another option is to
+ use a nested Wayland instance. For this, the Wayland server will have
+ to be a library that the host application links to. The host
+ application will then pass the Wayland server socket name to the
+ embedded application, and will need to implement the Wayland
+ compositor interface. The host application composites the client
+ surfaces as part of it's window, that is, in the web page or in the
+ panel. The benefit of nesting the Wayland server is that it provides
+ the requests the embedded client needs to inform the host about buffer
+ updates and a mechanism for forwarding input events from the host
+ application.
+ </para>
+ <para>
+ An example for this kind of setup is firefox embedding the flash
+ player as a kind of special-purpose compositor.
+ </para>
+ </section>
+</chapter>