Comment 70 for bug 1875062

Revision history for this message
Benjamin Drung (bdrung) wrote : Re: [20.04] Keyboard layout not enabled immediately during installation when typing username/password

Problem analysis
================

* ubiquity installs open-vm-tools.
* open-vm-tools calls "udevadm trigger" in it's postinst script (line 8).
* udevadm triggers all udev rules which includes all input devices.
* gdm-x-session reads /etc/default/keyboard and sets the keyboard layout.
* gnome-shell sets the keyboard layout as well.

ubiquity already sets /etc/default/keyboard, but does not change the keyboard layout in the GNOME session.

Proposed solution
=================

Let ubiquity also configure the GNOME session to use the selected keyboard layout.

Analysis details
================

The change of the keyboard layout can be triggered by running udevadm trigger for the keyboard device. Example for QEMU:

```
sudo udevadm trigger -v /sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input0
```

joural log on a fresh live system (before starting the installer):

```
systemd-logind[1207]: Watching system buttons on /dev/input/event0 (Power Button)
/usr/libexec/gdm-x-session[4624]: (II) config/udev: removing device Power Button
/usr/libexec/gdm-x-session[4624]: (**) Option "fd" "27"
/usr/libexec/gdm-x-session[4624]: (II) event0 - Power Button: device removed
/usr/libexec/gdm-x-session[4624]: (II) UnloadModule: "libinput"
/usr/libexec/gdm-x-session[4624]: (II) systemd-logind: releasing fd for 13:64
/usr/libexec/gdm-x-session[4624]: (II) config/udev: Adding input device Power Button (/dev/input/event0)
/usr/libexec/gdm-x-session[4624]: (**) Power Button: Applying InputClass "libinput keyboard catchall"
/usr/libexec/gdm-x-session[4624]: (II) Using input driver 'libinput' for 'Power Button'
/usr/libexec/gdm-x-session[4624]: (II) systemd-logind: got fd for /dev/input/event0 13:64 fd 27 paused 0
/usr/libexec/gdm-x-session[4624]: (**) Power Button: always reports core events
/usr/libexec/gdm-x-session[4624]: (**) Option "Device" "/dev/input/event0"
/usr/libexec/gdm-x-session[4624]: (II) event0 - Power Button: is tagged by udev as: Keyboard
/usr/libexec/gdm-x-session[4624]: (II) event0 - Power Button: device is a keyboard
/usr/libexec/gdm-x-session[4624]: (II) event0 - Power Button: device removed
/usr/libexec/gdm-x-session[4624]: (**) Option "config_info" "udev:/sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input0/event0"
/usr/libexec/gdm-x-session[4624]: (II) XINPUT: Adding extended input device "Power Button" (type: KEYBOARD, id 6)
/usr/libexec/gdm-x-session[4624]: (**) Option "xkb_model" "pc105"
/usr/libexec/gdm-x-session[4624]: (**) Option "xkb_layout" "us"
/usr/libexec/gdm-x-session[4624]: (WW) Option "xkb_variant" requires a string value
/usr/libexec/gdm-x-session[4624]: (WW) Option "xkb_options" requires a string value
/usr/libexec/gdm-x-session[4624]: (II) event0 - Power Button: is tagged by udev as: Keyboard
/usr/libexec/gdm-x-session[4624]: (II) event0 - Power Button: device is a keyboard
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 31 with keysym 31 (keycode a).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 32 with keysym 32 (keycode b).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 33 with keysym 33 (keycode c).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 34 with keysym 34 (keycode d).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 35 with keysym 35 (keycode e).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 36 with keysym 36 (keycode f).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 37 with keysym 37 (keycode 10).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 38 with keysym 38 (keycode 11).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 39 with keysym 39 (keycode 12).
```

joural log after installer keyboard layout selection (and having /etc/default/keyboard):

```
/usr/libexec/gdm-x-session[4624]: (II) config/udev: removing device Power Button
/usr/libexec/gdm-x-session[4624]: (**) Option "fd" "27"
/usr/libexec/gdm-x-session[4624]: (II) event0 - Power Button: device removed
systemd-logind[1207]: Watching system buttons on /dev/input/event0 (Power Button)
/usr/libexec/gdm-x-session[4624]: (II) UnloadModule: "libinput"
/usr/libexec/gdm-x-session[4624]: (II) systemd-logind: releasing fd for 13:64
/usr/libexec/gdm-x-session[4624]: (II) config/udev: Adding input device Power Button (/dev/input/event0)
/usr/libexec/gdm-x-session[4624]: (**) Power Button: Applying InputClass "libinput keyboard catchall"
/usr/libexec/gdm-x-session[4624]: (II) Using input driver 'libinput' for 'Power Button'
/usr/libexec/gdm-x-session[4624]: (II) systemd-logind: got fd for /dev/input/event0 13:64 fd 49 paused 0
/usr/libexec/gdm-x-session[4624]: (**) Power Button: always reports core events
/usr/libexec/gdm-x-session[4624]: (**) Option "Device" "/dev/input/event0"
/usr/libexec/gdm-x-session[4624]: (II) event0 - Power Button: is tagged by udev as: Keyboard
/usr/libexec/gdm-x-session[4624]: (II) event0 - Power Button: device is a keyboard
/usr/libexec/gdm-x-session[4624]: (II) event0 - Power Button: device removed
/usr/libexec/gdm-x-session[4624]: (**) Option "config_info" "udev:/sys/devices/LNXSYSTM:00/LNXPWRBN:00/input/input0/event0"
/usr/libexec/gdm-x-session[4624]: (II) XINPUT: Adding extended input device "Power Button" (type: KEYBOARD, id 6)
/usr/libexec/gdm-x-session[4624]: (**) Option "xkb_model" "pc105"
/usr/libexec/gdm-x-session[4624]: (**) Option "xkb_layout" "de"
/usr/libexec/gdm-x-session[4624]: (**) Option "xkb_variant" "neo"
/usr/libexec/gdm-x-session[4624]: (WW) Option "xkb_options" requires a string value
/usr/libexec/gdm-x-session[9289]: The XKEYBOARD keymap compiler (xkbcomp) reports:
/usr/libexec/gdm-x-session[9289]: > Warning: Multiple interpretations of "Caps_Lock+AnyOfOrNone(all)"
/usr/libexec/gdm-x-session[9289]: > Using last definition for duplicate fields
/usr/libexec/gdm-x-session[9289]: > Warning: Multiple interpretations of "Shift_L+AnyOfOrNone(all)"
/usr/libexec/gdm-x-session[9289]: > Using last definition for duplicate fields
/usr/libexec/gdm-x-session[9289]: > Error: Key <HYPR> added to map for multiple modifiers
/usr/libexec/gdm-x-session[9289]: > Using Mod2, ignoring Mod4.
/usr/libexec/gdm-x-session[9289]: > Error: Key <MDSW> added to map for multiple modifiers
/usr/libexec/gdm-x-session[9289]: > Using Mod3, ignoring Mod5.
/usr/libexec/gdm-x-session[9289]: Errors from xkbcomp are not fatal to the X server
/usr/libexec/gdm-x-session[4624]: (II) event0 - Power Button: is tagged by udev as: Keyboard
/usr/libexec/gdm-x-session[4624]: (II) event0 - Power Button: device is a keyboard
/usr/libexec/gdm-x-session[4624]: (EE) event1 - AT Translated Set 2 keyboard: client bug: event processing lagging behind by 22ms, your system is too slow
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 32 with keysym 32 (keycode b).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 31 with keysym 31 (keycode a).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 33 with keysym 33 (keycode c).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 34 with keysym 34 (keycode d).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 35 with keysym 35 (keycode e).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 36 with keysym 36 (keycode f).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 37 with keysym 37 (keycode 10).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 38 with keysym 38 (keycode 11).
gnome-shell[4794]: Window manager warning: Overwriting existing binding of keysym 39 with keysym 39 (keycode 12).
```