Mir 1.2.0 Release

Mir 1.2.0 Release

We’re pleased to announce the release of Mir 1.2.0. This is the first Mir release tested using the recently released wlcs package: Wayland Conformance test Suite.

This release is mostly about supporting Mir based shells using additional Wayland extensions:

  • There is a new package libmirwayland-dev which is the first iteration of our APIs for enabling Mir based shells to support their own Wayland extensions; and
  • Some related additions to the MirAL APIs.

As always, there are a bunch of bugfixes.


  • WaylandExtensions has added support for registering “bespoke” Wayland extensions (which are discussed below).
  • MinimalWindowManager is a new class providing a complete default window management policy. As well as making it trivial to implement a basic “floating windows” shell, MinimalWindowManager (finally!) implements support for Wayland clients to initiate touch gestures to move and resize windows.


We’ve had another contribution from @mariogrip to our “experimental” X11 support. We can now rely on starting Xwayland on demand.

That brings us a step closer to moving X11-via-Xwayland support out of “experimental” which we would like to complete during the 19.10 “cycle”.


There are many Wayland “extension protocols” to provide specialized support for specific needs.

Mir implements a curated list of Wayland extensions based on the needs of client applications and maintaining a secure environment. With this release the list of supported extension protocols is:

protocol default
wl_shell enabled
xdg_wm_base enabled
zxdg_shell_v6 enabled
zwlr_layer_shell_v1 disabled
zxdg_output_v1 disabled

While these are sufficient for the vast majority of desktop and IoT applications we recognise that other protocols exist. But as anyone can define a bespoke extension protocol for their own project it would be impractical to support everything ourselves.

Instead we have made it possible for a shell developed with Mir to add its own extensions. To do so a developer needs to:

  1. Install libmirwayland-dev;
  2. Use our protocol generator to generate a base class;
  3. Implement the needed functions in a derived class; and,
  4. Register a “builder” with MirAL so Mir can instantiate the protocol.

I’ll be following up with a worked example of this process. In the meantime interested readers can find all the pieces by looking at tests/miral/wayland_extensions.cpp and the related ServerDecoration code.

Because this uses the same tools we use internally, this should ease the path of anyone wanting to get experience with their implementation protocol extensions with a view to upstreaming to Mir.

Please note, however, that this is a “first cut” of this support and, depending on any feedback we get, we may need to make improvements that are not backwards compatible.

Developing with Mir

If you are a developer interested in using Mir to develop your own shell then it is important to note that Mir provides you with both sensible default behaviour and a simple, yet powerful, API to customize that behaviour. There are example programs demonstrating how to customize the window management style for “kiosk”, “tiling” and the default “floating” windows.

Developers using Mir will find it packaged and available on Ubuntu, Fedora and Arch. The latest Mir release is available for all supported Ubuntu series from the Mir team’s “Release” PPA:

sudo add-apt-repository -yu ppa:mir-team/release
sudo apt install mir-graphics-drivers-desktop # Drivers for Mesa "open" drivers
sudo apt install mir-graphics-drivers-nvidia  # Drivers for Nvidia binary drivers
sudo apt install mir-demos                    # Demo programs
sudo apt install libmiral-dev                 # Development libraries & headers
sudo apt install libmirwayland-dev            # Library & code generator for Wayland extensions
sudo apt install wlcs                         # Wayland Conformance Test harness & headers


    - ABI summary:
      . mirclient ABI unchanged at 9
      . miral ABI unchanged at 3
      . mirserver ABI bumped to 48
      . mircommon ABI unchanged at 7
      . mirplatform ABI unchanged at 16
      . mirprotobuf ABI unchanged at 3
      . mirplatformgraphics ABI unchanged to 16
      . mirclientplatform ABI unchanged at 5
      . mirinputplatform ABI unchanged at 7
      . mircore ABI unchanged at 1
      . mircookie ABI unchanged at 2
    - Enhancements:
      . [Wayland] Split out a new mirwayland package to enable shell
        implementors to add protocol extensions.
      . [Wayland] Initial support for XDG output protocol
      . [Wayland] Disconnect clients when Mir exceptions are raised in
        processing requests
      . [MirAL] Extend MirAL API for managing Wayland extensions
      . [MirAL] Provide a new MinimalWindowManager strategy. (Fixes #761, #816)
      . [MirAL] Improve miral-shell help text rendering. (Fixes #799)
      . [benchmarks] Generate USDT tracepoints from LTTNG tracepoints
      . [benchmarks] Add a commit-top-present latency script
      . Support multi-output in Mir-on-X
    - Bugs fixed:
      . [Wayland] Better handle window role state changes (fixes #836)
      . [X11] Improve listen/x-client sockets (Fixes: #478)
      . Additional symbol needed for g++8.3/ld/Alpine. (Fixes #771)
      . [X11] Make sure Xwayland exits to ensure a clean shutdown. (Fixes: #796)
      . [MirAL] Ensure internal clients don't hang because of queued requests.
        (Fixes #753)
      . Don't lock KeyRepeatDispatcher::repeat_state_mutex unnecessarily in a
        callback. (Fixes: #818)
      . Use drmIsMaster() from libdrm when it is provided. (Fixes: #813)
      . Ensure an already focussed surface really gets input focus. (Fixes #823)