From 62aa33e319a53a7d964ba01a6bc60fbc741b0819 Mon Sep 17 00:00:00 2001 From: Sung-Jin Park Date: Tue, 27 Oct 2020 21:07:50 +0900 Subject: [PATCH] udev-seat: skip addition of unconfigured device by event source Change-Id: Id7f36e62ca6f566d8b2023daa39480c6d6a9a568 Signed-off-by: Sung-Jin Park --- src/udev-seat.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/src/udev-seat.c b/src/udev-seat.c index 353732eb..9fae9b5d 100644 --- a/src/udev-seat.c +++ b/src/udev-seat.c @@ -36,6 +36,7 @@ static const char default_seat_name[] = "default"; char *_udev_monitor_event_source = NULL; int _udev_monitor_buffer_size = 0; +int _udev_monitor_skip_unconfigured_device = 1; //default : skip static char * _udev_get_udev_monitor_event_source(void) @@ -232,12 +233,15 @@ udev_input_add_devices(struct udev_input *input, struct udev *udev) /* Skip unconfigured device. udev will send an event * when device is fully configured */ if (!udev_device_get_is_initialized(device)) { - log_debug(&input->base, - "%-7s - skip unconfigured input device '%s'\n", - sysname, - udev_device_get_devnode(device)); - udev_device_unref(device); - continue; + /* Skip only when the skip flag has been set to non-zero. */ + if (_udev_monitor_skip_unconfigured_device) { + log_debug(&input->base, + "%-7s - skip unconfigured input device '%s'\n", + sysname, + udev_device_get_devnode(device)); + udev_device_unref(device); + continue; + } } if (device_added(device, input, NULL) < 0) { @@ -336,6 +340,16 @@ udev_input_enable(struct libinput *libinput) log_info(libinput, "udev: event source is udev (default event source).\n"); } + /* Skip only when the event source of udev monitor has been set as "udev" or null. */ + if (!env || (0 == strncmp("udev", env, 4))) { + _udev_monitor_skip_unconfigured_device = 1; + log_info(libinput, "will skip addition of unconfigured devices. (env=%s)\n", env ? env : "null"); + } + else { + _udev_monitor_skip_unconfigured_device = 0; + log_info(libinput, "won't skip addition of unconfigured devices. (env=%s)\n", env); + } + if (!input->udev_monitor) { log_info(libinput, "udev: failed to create the udev monitor\n"); @@ -500,7 +514,8 @@ libinput_udev_create_context(const struct libinput_interface *interface, } input->udev = udev_ref(udev); - _udev_monitor_event_source = strdup("udev"); + if (!_udev_monitor_event_source) + _udev_monitor_event_source = strdup("udev"); return &input->base; } -- 2.34.1