Kmscon may discover multiple inputs, corresponding to multiple devices. This
means that the uxkb_dev_keymap_update function may be called multiple times,
and the FIFO is registered on each input poll loop.
When a new layout is written on the FIFO by the installer, the first input
picking up the message, will apply the new layout. However, that input may not
be the input that the user is currently using.
To fix it, register the FIFO on the first input poll loop, but apply the new
layout on all the inputs in the uxkb_keymap_update_handler function.
* gnu/packages/patches/kmscon-runtime-keymap-switch.patch
(uxkb_keymap_update_handler): Apply the new layout to all the inputs.
(input_new_dev): Register the FIFO fd only on the first input poll loop.
Fixes <https://bugs.gnu.org/39341>.
Reported by Maxim Cournoyer <maxim.cournoyer@gmail.com>.
Until now, as soon as you had selected the keyboard layout in the
Guix System installer, kmscon would start spinning on epoll_wait(2)
calls because of an event on the initial FIFO file
descriptor (corresponding to the fact that the client closed it.)
* gnu/packages/patches/kmscon-runtime-keymap-switch.patch: In
'uxkb_keymap_update_handler', add calls to 'ev_eloop_rm_fd', 'close',
and 'uxkb_dev_keymap_update' In 'uxkb_dev_keymap_update', add call
to 'unlink'.