Weston is the reference implementation of a Wayland compositor. As part of my current job, I have the opportunity to dive into the source code of weston and fix some issues when customizing it in our product.
As my own experience, weston is much more suitable for embedded and mobile use cases, but not for desktop. So running weston on desktop Ubuntu isn’t actually a productive idea, but nobody can stop me doing that.
Try the prebuilt weston
Weston has been in the package repository of Ubuntu for quite a long time, so you can install it via
$ sudo apt install weston
After being successfully installed, weston can be run in two ways:
- Run weston within current session
weston in command line and weston will run in a nested window.
You can see in the output of
screenfetch, the window manager is still Mutter, which is the underlying implementation of Wayland used for GNOME.
- Run weston as a standalone session
Log out current session, select your account and before you log in again, select “Weston” in the gear menu at the bottom-right corner.
When running weston as a standalone session,
screenfetch couldn’t get the window manager information from weston.
Build from source code
If you want to customize weston to your needs, you have to clone and build the source code.
According to README.md in weston source code, here’s the basic steps to build weston:
$ git clone https://gitlab.freedesktop.org/wayland/weston.git $ cd weston $ meson build/ --prefix=/usr $ sudo ninja -C build/ install
/usr as the prefix in
meson command, so that
ninja command can install weston by replacing the one from previous section.
meson step, you would expect to get a dozen of dependency errors. You can disable some features by adding build options, e.g.
meson build/ --prefix=/usr -Ddemo-clients=false. All the build options can be found in
Here is a list of packages I collected while doing a full build without specifying any options:
$ sudo apt install libpixman-1-dev libinput-dev libdrm-dev wayland-protocols libcairo2-dev libpango1.0-dev libjpeg-dev libwebp-dev libsystemd-dev libpam0g-dev libgbm-dev libva-dev freerdp2-dev libx11-xcb-dev libxcb-xkb-dev libxcb-composite0-dev liblcms2-dev libcolord-dev libgstreamer-plugins-base1.0-dev libpipewire-0.2-dev libxml2-dev
I might had missed some other packages because they had been installed in my system already. To find the correct dependency package, you can use
apt search and normally the dependency package is the one with
Check the version
ninja builds and installs the latest weston, you can check the version of weston:
$ weston --version weston 9.0.90
No matter you run weston in nested or standalone way, you may find the
weston-screenshooter doesn’t work:
$ weston-screenshooter weston_screenshooter@5: error 0: screenshooter failed: permission denied. Debug protocol must be enabled
As the error indicates, to enable debug protocol, you need to run weston with
$ weston --debug
weston-screenshooter can take a screenshot:
--debug option to the standalone weston session, you need to edit the session file
[Desktop Entry] Name=Weston Comment=The reference Wayland server Exec=weston --debug Type=Application
By the way, each Wayland session has a session file in
/usr/share/wayland-sessions directory, including weston, Ubuntu on Wayland, sway, etc. And the counterpart for X11 session is in
If you have multiple monitors and they have different resolutions, weston will take the screenshot of each monitor and concatenate them together, and the result looks really weird to me:
That doesn’t look like the normal way a screenshooter should be working. And that’s where you can customize weston, e.g. let
weston-screenshooter accept a parameter to take the screenshot of a specified monitor.