You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
129 lines
4.6 KiB
129 lines
4.6 KiB
4 months ago
|
<?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>
|