What is Wayland

Wayland is a project to define a protocol for a compositor to talk to
its clients as well as a library implementation of the protocol.  The
compositor can be a standalone display server running on Linux kernel
modesetting and evdev input devices, an X applications, or a wayland
client itself.  The clients can be traditional applications, X servers
(rootless or fullscreen) or other display servers.

The wayland protocol is essentially only about input handling and
buffer management.  The compositor receives input events and forwards
them to the relevant client.  The clients creates buffers and renders
into them and notifies the compositor when it needs to redraw.  The
protocol also handles drag and drop, selections, window management and
other interactions that must go throught the compositor.  However, the
protocol does not handle rendering, which is one of the features that
makes wayland so simple.  All clients are expected to handle rendering
themselves, typically through cairo or OpenGL.

The wayland repository includes a compositor and a few clients, but
both the compositor and clients are essentially test cases.


Building Instructions

The instructions below assume some familiarity with git and building
and running experimental software.  And be prepared that this project
isn't at all useful right now, it's still very much a prototype.  When
the instructions suggest to clone a git repo, you can of course just
add a remote and fetch instead, if you have a clone of that repo
around already.  I usually install all software I'm working on into
$HOME/install, so that's what I'll use in the instructions below, but
you can use your favorite directory of course or install over your
system copy (pass --prefix=/usr --sysconfdir=/etc, generally).


Modesetting

At this point, kernel modesetting is upstream for Intel, AMD and
nVidia chipsets.  Most distributions ship with kernel modesetting
enabled by default and will work with Wayland out of the box.  The
modesetting driver must also support the page flip ioctl, which only
the intel driver does at this point.


Building mesa

Wayland uses the mesa EGL stack, and all extensions required to run
EGL on KMS are now upstream on the master branch.  The 7.9 release of
mesa will have all these extensions, but for now you'll need to build
mesa master:

    $ git clone git://anongit.freedesktop.org/mesa/mesa
    $ cd mesa
    $ ./configure --prefix=$HOME/install  --enable-egl --enable-gles2
    $ make && make install

If you're using an intel chipset, it's best to also pass
--disable-gallium to ./configure, since otherwise libEGL will try to
load the gallium sw rasterizer before loading the Intel DRI driver.


libxkbcommon

Wayland needs libxkbcommon for translating evdev keycodes to keysyms.
There's a couple of repos around, and we're trying to consolidate the
development, but for wayland you'll need the repo from my git
repository.  For this you'll need development packages for xproto,
kbproto and libX11.

    $ git clone git://people.freedesktop.org/~krh/libxkbcommon.git
    $ cd libxkbcommon/
    $ ./autogen.sh --prefix=$HOME/install
    $ make && make install


cairo-gl

The Wayland clients render using cairo-gl, which is an experimental
cairo backend.  It has been available since cairo 1.10.  Unless your
distribution ships cairo with the gl backend enabled, you'll need to
compile your own version of cairo:

    $ git clone git://anongit.freedesktop.org/cairo
    $ cd cairo
    $ ./autogen.sh --prefix=$HOME/install --enable-gl
    $ make && make install


Wayland

With mesa and libxkbcommon in place, we can checkout and build
Wayland.  Aside from mesa, Wayland needs development packages for
gdk-pixbuf-2.0, libudev, libdrm, xcb-dri2, xcb-fixes (for X
compositor) cairo-gl, glib-2.0, gdk-2.0 (for poppler) and
poppler-glib:

    $ git clone git://people.freedesktop.org/~krh/wayland
    $ ./autogen.sh --prefix=$HOME/install
    $ make && make install

Installing into a non-/usr prefix is fine, but the 70-wayland.rules
udev rule file has to be installed in /etc/udev/rules.d.  Once
installed, either reboot or run

    $ sudo udevadm trigger --subsystem-match=drm --subsystem-match=input

to make udev label the devices wayland will use.

If DISPLAY is set, the wayland compositor will run under X in a window
and take input from X.  Otherwise it will run on the KMS framebuffer
and take input from evdev devices.  Pick a background image that you
like and copy it to the Wayland source directory as background.jpg or
use the -b command line option:

    $ ./wayland-system-compositor -b my-image.jpg

To run clients, switch to a different VT and run the client from
there.  Or run it under X and start up the clients from a terminal
window.  There are a few demo clients available, but they are all
pretty simple and mostly for testing specific features in the wayland
protocol: 'terminal' is a simple terminal emulator, not very compliant
at all, but works well enough for bash

    'flower' moves a flower around the screen, testing the frame protocol
    'gears' glxgears, but for wayland, currently broken
    'image' loads the image files passed on the command line and shows them

    'view' does the same for pdf files, but needs file URIs
    (file:///path/to/pdf)
