Skip to content
Peter Hutterer edited this page Dec 10, 2018 · 1 revision

Wayland is a new display server protocol gaining popularity. It affects the xf86-input-wacom driver in that in a Wayland system, there is no xf86-input-wacom driver. See the topics below for more information.

Wayland Architecture

Historically, the linuxwacom drivers have focused on the X.Org X server. In the software stack, several components are of importance:

  • the X server is in charge of rendering and most of the generic input event processing (such as deciding which window pointer events are delivered to)
  • the X input driver module (e.g. xf86-input-wacom) is linked into the X server and provides device-specific event handling. The input driver module is a shared library and runs in the same process as the X server.
  • the Window Manager is a special X client that is in charge of controlling where windows are placed on-screen and decorating those windows with title bars.
  • the X protocol is the communication module for communication between the X server and all clients (this includes the Window manager)

Wayland is a new display server protocol gaining popularity. It implies some architectural choices, most importantly:

  • Wayland is the protocol, i.e. a replacement for the X protocol
  • The Wayland compositor is in charge of rendering and input processing.
  • There is no X server process anymore and thus no X input driver module

The Wayland website has more information on the Wayland architecture.

libinput

Most popular Wayland compositors use libinput as the input stack. This library provides runs in the same process as the compositor and provides all low-level event processing. libinput can be thought of as a single library encompassing the functionality of xf86-input-evdev, xf86-input-synaptics, xf86-input-wacom and some of the X.Org server input event processing functionality.

Note that we are talking about functionality, not code. libinput was written from scratch.

In the context of xf86-input-wacom, the general rule is that functionality previously provided by xf86-input-wacom is now provided by libinput. libinput is not a drop-in replacement. While it aims to provide full tablet support, some of the tablet tool handling differs significantly to how xf86-input-wacom handles those tools. Not all configuration options that xf86-input-wacom provides are available in libinput.

Wayland and input-wacom

Wayland has no effect on the input-wacom or upstream kernel drivers

Wayland and libwacom

Wayland has no effect on libwacom. In fact, libinput uses libwacom internally to query some device properties.

Wayland and xsetwacom

xsetwacom is a tool that relies on the X protocol to communicate with the X server to query properties specific to the xf86-input-wacom driver. Since neither of those three exist on a system running Wayland, xsetwacom does not work on a Wayland system. It will run successfully but none of its functionality will work as expected. See the XWayland section below.

XWayland

XWayland is a custom X server that effectively provides a protocol translation layer between the X protocol and the Wayland protocol. It sits between the X client and the Wayland compositor, translating X requests to Wayland requests.

For example, an X client may request to create a window. XWayland translates this to the Wayland request to create a rendering buffer. The buffer itself is managed by the Wayland compositor. Input is sent over the Wayland protocol from the compositor to XWayland which translates it into X events and sends them to the X client. For most normal applications, this means X applications can run under Wayland without the immediate need for modification.

XWayland is why xsetwacom runs normally but cannot see any devices. The list of devices exported by a Wayland compositor is usually limited to a single "pointer" device, a single "keyboard" device and a single "touch" device. Neither of those would be detected as Wacom device by xsetwacom.

Where tablets are present, XWayland also provides tablet devices. However, these devices are backed by libinput and do not export the xf86-input-wacom specific device properties. xsetwacom thus does not recognise them as input devices.

Clone this wiki locally