Table of Contents
Instructions on how to build libinput and its tools and how to build against libinput.
The build instruction on this page detail how to overwrite your system-provided libinput with one from the git repository, see see Reverting to the system-provided libinput package to revert to the previous state.
Building libinput
libinput uses meson and ninja. A build is usually the three-step process below. A successful build requires the Build dependencies to be installed before running meson.
Additional options may also be specified. For example:
The prefix
or other options can be changed later with the mesonconf
command. For example:
Running mesonconf builddir/
with no other arguments lists all configurable options meson provides.
To rebuild from scratch, simply remove the build directory and run meson again:
Verifying the install
To verify the install worked correctly, check that libinput.so.x.x.x is in the library path and that all symlinks point to the new library.
$> ls -l /usr/lib64/libinput.* -rwxr-xr-x 1 root root 946 Apr 28 2015 /usr/lib64/libinput.la lrwxrwxrwx 1 root root 19 Feb 1 15:12 /usr/lib64/libinput.so -> libinput.so.10.13.0 lrwxrwxrwx 1 root root 19 Feb 1 15:12 /usr/lib64/libinput.so.10 -> libinput.so.10.13.0 -rwxr-xr-x 1 root root 204992 Feb 1 15:12 /usr/lib64/libinput.so.10.13.0
Reverting to the system-provided libinput package
The recommended way to revert to the system install is to use the package manager to reinstall the libinput package. In some cases, this may leave files in the system (e.g. /usr/lib/libinput.la
) but these files are usually harmless. To definitely remove all files, run the following command from the libinput source directory:
The following commands reinstall the current system package for libinput, overwriting manually installed files.
-
Debian/Ubuntu based distributions:
sudo apt-get install --reinstall libinput
-
Fedora 22 and later:
sudo dnf reinstall libinput
-
RHEL/CentOS/Fedora 21 and earlier:
sudo yum reinstall libinput
-
openSUSE:
sudo zypper install --force libinput10
-
Arch:
sudo packman -S libinput
SELinux adjustments
On systems with SELinux, overwriting the distribution-provided package with a manually built libinput may cause SELinux denials. This usually manifests when gdm does not start because it is denied access to libinput. The journal shows a log message in the form of:
May 25 15:28:42 localhost.localdomain audit[23268]: AVC avc: denied { execute } for pid=23268 comm="gnome-shell" path="/usr/lib64/libinput.so.10.12.2" dev="dm-0" ino=1709093 scontext=system_u:system_r:xdm_t:s0-s0:c0.c1023 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0 May 25 15:28:42 localhost.localdomain org.gnome.Shell.desktop[23270]: /usr/bin/gnome-shell: error while loading shared libraries: libinput.so.10: failed to map segment from shared object
The summary of this error message is that gdm's gnome-shell runs in the system_u:system_r:xdm_t
context but libinput is installed with the context unconfined_u:object_r:user_home_t
.
To avoid this issue, restore the SELinux context for any system files.
$> sudo restorecon /usr/lib*/libinput.so.*
This issue is tracked in https://github.com/mesonbuild/meson/issues/1967.
Build dependencies
libinput has a few build-time dependencies that must be installed prior to running configure. In most cases, it is sufficient to install the dependencies that your distribution uses to build the libinput package. These can be installed with one of the following commands:
-
Debian/Ubuntu based distributions:
sudo apt-get build-dep libinput
-
Fedora 22 and later:
sudo dnf builddep libinput
-
RHEL/CentOS/Fedora 21 and earlier:
sudo yum-builddep libinput
-
openSUSE:
$> sudo zypper modifyrepo --enable `zypper repos | grep source | awk '{print $5}'` $> sudo zypper source-install -d libinput10 $> sudo zypper install autoconf automake libtool $> sudo zypper modifyrepo --disable `zypper repos | grep source | awk '{print $5}'`
-
Arch:
$> sudo pacman -S asp $> cd $(mktemp -d) $> asp export libinput $> cd libinput $> makepkg --syncdeps --nobuild --noextract
If dependencies are missing, a message No package 'foo' found
will be shown during the configure stage. See this blog post here. for instructions on how to fix it.
Building without libwacom
libwacom is required by libinput's tablet code to gather additional information about tablets that is not available from the kernel device itself. libwacom is required by default but can be skipped when Building libinput.
It is not recommended to disable libwacom unless libinput is used in an environment where tablet support is not required. libinput provides tablet support even without libwacom, but some features may be missing or working differently.
Building without the graphical helper tool
The Helper tools provide commandline features as well as graphical debugging features. To keep dependencies in check on some builds, the graphical features of the Helper tools can be disabled. By default, the debug-gui
feature of the libinput
tool is enabled and if the required libraries are not available, the build will fail. If the feature is not required, use the --disable-debug-gui
argument when Building libinput.
Building with autotools
libinput no longer supports building with autotools. These instructions are kept for users for libinput versions up to 1.8.x.
A build with automake is usually the process below. A successful build requires the Build dependencies to be installed at configure time.
- Note
- On Debian-based distributions including Ubuntu and its derivatives skip the
--libdir=/usr/lib64
argument.
To uninstall libinput as detailed in section Reverting to the system-provided libinput package, run
To disable libwacom as detailed in section Building without libwacom, run
To disable the graphical helper tool as detailed in section Building without the graphical helper tool, run
Building against libinput
libinput provides a pkg-config file. Software that uses libinput should use pkg-config and the PKG_CHECK_MODULES
autoconf macro. Otherwise, the most rudimentary way to compile and link a program against libinput is:
For further information on using pkgconfig see the pkg-config documentation.