]> git.ipfire.org Git - thirdparty/plymouth.git/commitdiff
device-manager: Fall back to reading from tty if no xkb layout specified
authorRay Strode <rstrode@redhat.com>
Wed, 30 Nov 2022 14:51:17 +0000 (09:51 -0500)
committerRay Strode <rstrode@redhat.com>
Wed, 30 Nov 2022 14:53:54 +0000 (09:53 -0500)
At the moment if a user doesn't specify a xkb layout in vconsole.conf we
just fall back to assuming a us qwerty layout.

This isn't really optimal, since it might not match the keyboard.
Furthermore, the tty does have a usable layout, so it makes more sense
to fall back to it.

This commit changes device manager to disable reading from /dev/input
if the user doesn't specify a layout to use in vconsole.conf.

Close https://gitlab.freedesktop.org/plymouth/plymouth/-/issues/199

src/libply-splash-core/ply-device-manager.c

index ca2af770ee952a55e48500fd7310100150cb17b3..03fa0f30787610677e7153ed2c917e45aa1de926 100644 (file)
@@ -413,6 +413,9 @@ create_devices_for_udev_device (ply_device_manager_t *manager,
                 } else if (strcmp (subsystem, SUBSYSTEM_INPUT) == 0) {
                         if (ply_string_has_prefix (device_sysname, "event")) {
                                 ply_trace ("found input device %s", device_path);
+
+                                assert (manager->xkb_keymap != NULL);
+
                                 ply_input_device_t *input_device = ply_input_device_open (manager->xkb_context, manager->xkb_keymap, device_path);
                                 if (input_device != NULL) {
                                         ply_input_device_set_disconnect_handler (input_device, (ply_input_device_disconnect_handler_t) remove_input_device_from_renderers, manager);
@@ -673,7 +676,7 @@ watch_for_udev_events (ply_device_manager_t *manager)
 
                 udev_monitor_filter_add_match_subsystem_devtype (manager->udev_monitor, SUBSYSTEM_DRM, NULL);
                 udev_monitor_filter_add_match_subsystem_devtype (manager->udev_monitor, SUBSYSTEM_FRAME_BUFFER, NULL);
-                if (!ply_kernel_command_line_has_argument ("plymouth.use-legacy-input"))
+                if (!ply_kernel_command_line_has_argument ("plymouth.use-legacy-input") && manager->xkb_keymap != NULL)
                         udev_monitor_filter_add_match_subsystem_devtype (manager->udev_monitor, SUBSYSTEM_INPUT, NULL);
                 udev_monitor_enable_receiving (manager->udev_monitor);
         }
@@ -844,9 +847,6 @@ parse_vconsole_conf (ply_device_manager_t *manager)
 
         if (manager->xkb_keymap == NULL) {
                 ply_trace ("Failed to set xkb keymap of LAYOUT: %s MODEL: %s VARIANT: %s OPTIONS: %s", xkb_layout, xkb_model, xkb_variant, xkb_options);
-
-                manager->xkb_keymap = xkb_keymap_new_from_names (manager->xkb_context, NULL, XKB_MAP_COMPILE_NO_FLAGS);
-                assert (manager->xkb_keymap != NULL);
         }
 
         free (xkb_layout);