| 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) |