Fall back to libinput if the module is missing
This commit is contained in:
parent
6f968ef6a9
commit
d6e8cd83fc
155
0001-Allow-compile-time-selection-of-a-fallback-input-dri.patch
Normal file
155
0001-Allow-compile-time-selection-of-a-fallback-input-dri.patch
Normal file
@ -0,0 +1,155 @@
|
|||||||
|
From a3922cf7f02feac88a80995cef5e843aafdd970b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Hutterer <peter.hutterer@who-t.net>
|
||||||
|
Date: Wed, 1 Jun 2016 14:38:54 +1000
|
||||||
|
Subject: [PATCH xserver] Allow compile-time selection of a fallback input
|
||||||
|
driver
|
||||||
|
|
||||||
|
A new --with-fallback-input-driver=foo option allows selecting a
|
||||||
|
fallback driver for the server if the driver configured for the device
|
||||||
|
is not found. Note that this only applies when the device has a driver
|
||||||
|
assigned and that module fails to load, devices without a driver are
|
||||||
|
ignored as usual.
|
||||||
|
|
||||||
|
This avoids the situation where a configuration assigns e.g. the
|
||||||
|
synaptics driver but that driver is not available on the system,
|
||||||
|
resulting in a dead device. A fallback driver can at least provides some
|
||||||
|
functionality.
|
||||||
|
|
||||||
|
This becomes more important as we move towards making other driver true
|
||||||
|
leaf nodes that can be installed/uninstalled as requested. Specifically,
|
||||||
|
wacom and synaptics, a config that assigns either driver should be
|
||||||
|
viable even when the driver itself is not (yet) installed on the system.
|
||||||
|
|
||||||
|
It is up to the distributions to make sure that the fallback driver is
|
||||||
|
always installed. The fallback driver can be disabled with
|
||||||
|
--without-fallback-input-driver and is disabled by default on non-Linux
|
||||||
|
systems because we don't have generic drivers on those platforms.
|
||||||
|
Default driver on Linux is libinput, evdev is the only other serious
|
||||||
|
candidate here.
|
||||||
|
|
||||||
|
Sample log output:
|
||||||
|
[ 3274.421] (II) config/udev: Adding input device SynPS/2 Synaptics TouchPad (/dev/input/event4)
|
||||||
|
[ 3274.421] (**) SynPS/2 Synaptics TouchPad: Applying InputClass "touchpad weird driver"
|
||||||
|
[ 3274.421] (II) LoadModule: "banana"
|
||||||
|
[ 3274.422] (WW) Warning, couldn't open module banana
|
||||||
|
[ 3274.422] (II) UnloadModule: "banana"
|
||||||
|
[ 3274.422] (II) Unloading banana
|
||||||
|
[ 3274.422] (EE) Failed to load module "banana" (module does not exist, 0)
|
||||||
|
[ 3274.422] (EE) No input driver matching `banana'
|
||||||
|
[ 3274.422] (II) Falling back to input driver `libinput'
|
||||||
|
.. server proceeds to assign libinput, init the device, world peace and rainbows
|
||||||
|
everywhere, truly what a sight. Shame about the banana though.
|
||||||
|
|
||||||
|
Reviewed-by: Adam Jackson <ajax@redhat.com>
|
||||||
|
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
||||||
|
(cherry picked from commit c69bd15e00aea2610834d05f63777f9bf20eca34)
|
||||||
|
---
|
||||||
|
configure.ac | 19 +++++++++++++++++++
|
||||||
|
hw/xfree86/common/xf86Xinput.c | 39 +++++++++++++++++++++++++++++++--------
|
||||||
|
include/xorg-config.h.in | 3 +++
|
||||||
|
3 files changed, 53 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/configure.ac b/configure.ac
|
||||||
|
index 868e859..dea8edd 100644
|
||||||
|
--- a/configure.ac
|
||||||
|
+++ b/configure.ac
|
||||||
|
@@ -493,6 +493,25 @@ AC_ARG_ENABLE(listen-local, AS_HELP_STRING([--disable-listen-local],
|
||||||
|
[Listen on local by default (default:enabled)]),
|
||||||
|
[LISTEN_LOCAL=$enableval], [LISTEN_LOCAL=yes])
|
||||||
|
|
||||||
|
+case $host_os in
|
||||||
|
+ linux*)
|
||||||
|
+ FALLBACK_INPUT_DRIVER="libinput"
|
||||||
|
+ ;;
|
||||||
|
+ *)
|
||||||
|
+ FALLBACK_INPUT_DRIVER=""
|
||||||
|
+ ;;
|
||||||
|
+esac
|
||||||
|
+AC_ARG_WITH(fallback-input-driver,
|
||||||
|
+ AC_HELP_STRING([--with-fallback-input-driver=$FALLBACK_INPUT_DRIVER],
|
||||||
|
+ [Input driver fallback if the requested driver for a device is unavailable]),
|
||||||
|
+ [ FALLBACK_INPUT_DRIVER=$withval ], [])
|
||||||
|
+if test "x$FALLBACK_INPUT_DRIVER" = "xno"; then
|
||||||
|
+ FALLBACK_INPUT_DRIVER=""
|
||||||
|
+fi
|
||||||
|
+AC_MSG_CHECKING([for fallback input driver])
|
||||||
|
+AC_MSG_RESULT([$FALLBACK_INPUT_DRIVER])
|
||||||
|
+AC_DEFINE_UNQUOTED(FALLBACK_INPUT_DRIVER, ["$FALLBACK_INPUT_DRIVER"], [ Fallback input driver ])
|
||||||
|
+
|
||||||
|
dnl Determine font path
|
||||||
|
XORG_FONTROOTDIR
|
||||||
|
XORG_FONTSUBDIR(FONTMISCDIR, fontmiscdir, misc)
|
||||||
|
diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c
|
||||||
|
index c56a2b9..44f4818 100644
|
||||||
|
--- a/hw/xfree86/common/xf86Xinput.c
|
||||||
|
+++ b/hw/xfree86/common/xf86Xinput.c
|
||||||
|
@@ -819,6 +819,22 @@ xf86stat(const char *path, int *maj, int *min)
|
||||||
|
*min = minor(st.st_rdev);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static inline InputDriverPtr
|
||||||
|
+xf86LoadInputDriver(const char *driver_name)
|
||||||
|
+{
|
||||||
|
+ InputDriverPtr drv = NULL;
|
||||||
|
+
|
||||||
|
+ /* Memory leak for every attached device if we don't
|
||||||
|
+ * test if the module is already loaded first */
|
||||||
|
+ drv = xf86LookupInputDriver(driver_name);
|
||||||
|
+ if (!drv) {
|
||||||
|
+ if (xf86LoadOneModule(driver_name, NULL))
|
||||||
|
+ drv = xf86LookupInputDriver(driver_name);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return drv;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* Create a new input device, activate and enable it.
|
||||||
|
*
|
||||||
|
@@ -845,16 +861,23 @@ xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL enable)
|
||||||
|
int rval;
|
||||||
|
char *path = NULL;
|
||||||
|
|
||||||
|
- /* Memory leak for every attached device if we don't
|
||||||
|
- * test if the module is already loaded first */
|
||||||
|
- drv = xf86LookupInputDriver(pInfo->driver);
|
||||||
|
- if (!drv)
|
||||||
|
- if (xf86LoadOneModule(pInfo->driver, NULL))
|
||||||
|
- drv = xf86LookupInputDriver(pInfo->driver);
|
||||||
|
+ drv = xf86LoadInputDriver(pInfo->driver);
|
||||||
|
if (!drv) {
|
||||||
|
xf86Msg(X_ERROR, "No input driver matching `%s'\n", pInfo->driver);
|
||||||
|
- rval = BadName;
|
||||||
|
- goto unwind;
|
||||||
|
+
|
||||||
|
+ if (strlen(FALLBACK_INPUT_DRIVER) > 0) {
|
||||||
|
+ xf86Msg(X_INFO, "Falling back to input driver `%s'\n",
|
||||||
|
+ FALLBACK_INPUT_DRIVER);
|
||||||
|
+ drv = xf86LoadInputDriver(FALLBACK_INPUT_DRIVER);
|
||||||
|
+ if (drv) {
|
||||||
|
+ free(pInfo->driver);
|
||||||
|
+ pInfo->driver = strdup(FALLBACK_INPUT_DRIVER);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if (!drv) {
|
||||||
|
+ rval = BadName;
|
||||||
|
+ goto unwind;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
path = xf86CheckStrOption(pInfo->options, "Device", NULL);
|
||||||
|
diff --git a/include/xorg-config.h.in b/include/xorg-config.h.in
|
||||||
|
index 7c03126..2e2da45 100644
|
||||||
|
--- a/include/xorg-config.h.in
|
||||||
|
+++ b/include/xorg-config.h.in
|
||||||
|
@@ -151,4 +151,7 @@
|
||||||
|
/* Support APM/ACPI power management in the server */
|
||||||
|
#undef XF86PM
|
||||||
|
|
||||||
|
+/* Fallback input driver if the assigned driver fails */
|
||||||
|
+#undef FALLBACK_INPUT_DRIVER
|
||||||
|
+
|
||||||
|
#endif /* _XORG_CONFIG_H_ */
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
@ -45,7 +45,7 @@
|
|||||||
Summary: X.Org X11 X server
|
Summary: X.Org X11 X server
|
||||||
Name: xorg-x11-server
|
Name: xorg-x11-server
|
||||||
Version: 1.18.4
|
Version: 1.18.4
|
||||||
Release: 4%{?gitdate:.%{gitdate}}%{dist}
|
Release: 5%{?gitdate:.%{gitdate}}%{dist}
|
||||||
URL: http://www.x.org
|
URL: http://www.x.org
|
||||||
License: MIT
|
License: MIT
|
||||||
Group: User Interface/X
|
Group: User Interface/X
|
||||||
@ -90,9 +90,13 @@ Patch7025: 0001-Always-install-vbe-and-int10-sdk-headers.patch
|
|||||||
# do not upstream - do not even use here yet
|
# do not upstream - do not even use here yet
|
||||||
Patch7027: xserver-autobind-hotplug.patch
|
Patch7027: xserver-autobind-hotplug.patch
|
||||||
|
|
||||||
|
# Pick libinput as driver when the assigned module is missing
|
||||||
|
Patch7028: 0001-Allow-compile-time-selection-of-a-fallback-input-dri.patch
|
||||||
|
|
||||||
# because the display-managers are not ready yet, do not upstream
|
# because the display-managers are not ready yet, do not upstream
|
||||||
Patch10000: 0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch
|
Patch10000: 0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch
|
||||||
|
|
||||||
|
|
||||||
%global moduledir %{_libdir}/xorg/modules
|
%global moduledir %{_libdir}/xorg/modules
|
||||||
%global drimoduledir %{_libdir}/dri
|
%global drimoduledir %{_libdir}/dri
|
||||||
%global sdkdir %{_includedir}/xorg
|
%global sdkdir %{_includedir}/xorg
|
||||||
@ -630,6 +634,9 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Sep 01 2016 Peter Hutterer <peter.hutterer@redhat.com> 1.18.4-5
|
||||||
|
- Fall back to libinput if the module is missing
|
||||||
|
|
||||||
* Thu Aug 25 2016 Hans de Goede <hdegoede@redhat.com> - 1.18.4-4
|
* Thu Aug 25 2016 Hans de Goede <hdegoede@redhat.com> - 1.18.4-4
|
||||||
- Fix (undo) server ABI breakage from 1.18.4-3
|
- Fix (undo) server ABI breakage from 1.18.4-3
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user