mirror of
				https://gitlab.freedesktop.org/wayland/wayland.git
				synced 2025-11-03 09:01:42 -05:00 
			
		
		
		
	And one in the main.tex spec document. Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
		
			
				
	
	
		
			130 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			130 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
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)
 |