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 appliactions, 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 get
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 Waland 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
    $ aclocal; autoconf; ./configure --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)
