Mir release 2.9.0

We are pleased to announce Mir 2.9

Remote Assistance

Mir now implements the zwlr_virtual_pointer_v1 protocol extensions, enabling support for remote input.

ABI breakage of libmircore.so.1

We inadvertently broke the ABI of this library which caused problems installing Mir 1.x alongside Mir 2.x. This was important for the Lomiri project who are in the process of migrating from one to the other. It is now possible to install the both versions of Mir.

Wayland platform

We’ve updated the Wayland backend to Mir to use xdg-shell (instead of the legacy wl-shell) this gives a number of small improvements and makes it possible to run on compositors such as Mutter that no longer support wl-shell.


There’s a bunch of small enhancements that make it easier to write compositors based on Mir.

gbm-kms platform

We’ve enhanced our “quirks” capabilities to make it easier to adapt to hardware idiosyncrasies.

Supported distributions

We’ve ensured that Mir 2.9 builds with the latest versions of Ubuntu (kinetic), Fedora (35, 36), Debian (sid) and Alpine (edge).


ABI summary:

  • miral ABI bumped to 5
  • mircore ABI bumped to 2
  • miroil ABI bumped to 2


  • [Wayland] Implement zwp_idle_inhibit_manager_v1
  • [Wayland] Implement zwlr_virtual_pointer_v1
  • [Wayland] Implement zwp_text_input_manager_v1 (Electron works with OSK)
  • [Wayland] Bump wl_seat to v8 and implement hi-res scrolling (Fixes: #2176, Fixes: #2499)
  • [Wayland platform] improve failed to connect error
  • [Wayland platform] Port to xdg-shell (Fixes #1903, Fixes: #2434)
  • [MirAL] Allow --add-wayland-extenions all
  • [MirAL] Allow servers to get repeated string options
  • [MirAL] Improvement to ExternalClientLauncher: Don’t force clients to split command lines themselves
  • [MirAL] Tidy up event filtering API
  • [MirAL] Expose miral::Zone::id()
  • [MirAL] Rename CommandLineOption => ConfigurationOption
  • [Input] Filter 2 distinct bogus touch event scenarios (UBports)
  • [gbm-kms] new driver quirk to disable KMS modeset probe
  • [gbm-kms] Add defaults to driver-quirks for nvidia and evdi (Fixes: #2467)
  • [gbm-kms] Add defaults to driver-quirks for vc4-drm and v3d
  • [mir-smoke-test-runner] Enable working in a Wayland only environment

Bugs fixed:

  • Fix ABI breakage of libmircore.so.1 with v2.8.0 vs v1.8.2 (Fixes #2465)
  • [Wayland] Text Input v2: do not use commit count as serial
  • [Wayland] Send keyboard modifiers after keyboard enter (Fixes: #2535, Fixes: #2025)
  • [Wayland] wlr-screencopy-v1: send .damage event as required (wayvnc fix)
  • [Wayland] wlr-screencopy-v1: Waits until the copy area has been damaged in .copy_with_damage request (wayvnc fix)
  • [MirAL] Unblock signals before execing child processes (Fixes: #1284)
  • [eglstream-kms] Kill clients, not Mir, when they submit bad EGLStreams (Fixes: #2061)
  • [eglstream-kms] Handle EGL errors in devnum_for_device (Fixes: #2426)
  • [test clients] Explicitly ask for a GLESv2 context (Fixes: #2440)
  • [renderers/gl] Clear framebuffer to opaque black (Fixes: #2427)
  • CMake cleanup for locally built dependencies (Fixes: #2507, Fixes: #2261)
  • Fix event timestamps (Fixes: #2577)

Mir 2.9.0 is available as a source tarball and the Mir PPAs.