* 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:
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).
```
Problem analysis
================
* ubiquity installs open-vm-tools. keyboard and sets the keyboard layout.
* 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/
* 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:
``` LNXSYSTM: 00/LNXPWRBN: 00/input/ input0
sudo udevadm trigger -v /sys/devices/
```
joural log on a fresh live system (before starting the installer):
``` logind[ 1207]: Watching system buttons on /dev/input/event0 (Power Button) gdm-x-session[ 4624]: (II) config/udev: removing device Power Button gdm-x-session[ 4624]: (**) Option "fd" "27" gdm-x-session[ 4624]: (II) event0 - Power Button: device removed gdm-x-session[ 4624]: (II) UnloadModule: "libinput" gdm-x-session[ 4624]: (II) systemd-logind: releasing fd for 13:64 gdm-x-session[ 4624]: (II) config/udev: Adding input device Power Button (/dev/input/event0) gdm-x-session[ 4624]: (**) Power Button: Applying InputClass "libinput keyboard catchall" gdm-x-session[ 4624]: (II) Using input driver 'libinput' for 'Power Button' gdm-x-session[ 4624]: (II) systemd-logind: got fd for /dev/input/event0 13:64 fd 27 paused 0 gdm-x-session[ 4624]: (**) Power Button: always reports core events gdm-x-session[ 4624]: (**) Option "Device" "/dev/input/event0" gdm-x-session[ 4624]: (II) event0 - Power Button: is tagged by udev as: Keyboard gdm-x-session[ 4624]: (II) event0 - Power Button: device is a keyboard gdm-x-session[ 4624]: (II) event0 - Power Button: device removed gdm-x-session[ 4624]: (**) Option "config_info" "udev:/ sys/devices/ LNXSYSTM: 00/LNXPWRBN: 00/input/ input0/ event0" gdm-x-session[ 4624]: (II) XINPUT: Adding extended input device "Power Button" (type: KEYBOARD, id 6) gdm-x-session[ 4624]: (**) Option "xkb_model" "pc105" gdm-x-session[ 4624]: (**) Option "xkb_layout" "us" gdm-x-session[ 4624]: (WW) Option "xkb_variant" requires a string value gdm-x-session[ 4624]: (WW) Option "xkb_options" requires a string value gdm-x-session[ 4624]: (II) event0 - Power Button: is tagged by udev as: Keyboard gdm-x-session[ 4624]: (II) event0 - Power Button: device is a keyboard
systemd-
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
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) :
``` gdm-x-session[ 4624]: (II) config/udev: removing device Power Button gdm-x-session[ 4624]: (**) Option "fd" "27" gdm-x-session[ 4624]: (II) event0 - Power Button: device removed logind[ 1207]: Watching system buttons on /dev/input/event0 (Power Button) gdm-x-session[ 4624]: (II) UnloadModule: "libinput" gdm-x-session[ 4624]: (II) systemd-logind: releasing fd for 13:64 gdm-x-session[ 4624]: (II) config/udev: Adding input device Power Button (/dev/input/event0) gdm-x-session[ 4624]: (**) Power Button: Applying InputClass "libinput keyboard catchall" gdm-x-session[ 4624]: (II) Using input driver 'libinput' for 'Power Button' gdm-x-session[ 4624]: (II) systemd-logind: got fd for /dev/input/event0 13:64 fd 49 paused 0 gdm-x-session[ 4624]: (**) Power Button: always reports core events gdm-x-session[ 4624]: (**) Option "Device" "/dev/input/event0" gdm-x-session[ 4624]: (II) event0 - Power Button: is tagged by udev as: Keyboard gdm-x-session[ 4624]: (II) event0 - Power Button: device is a keyboard gdm-x-session[ 4624]: (II) event0 - Power Button: device removed gdm-x-session[ 4624]: (**) Option "config_info" "udev:/ sys/devices/ LNXSYSTM: 00/LNXPWRBN: 00/input/ input0/ event0" gdm-x-session[ 4624]: (II) XINPUT: Adding extended input device "Power Button" (type: KEYBOARD, id 6) gdm-x-session[ 4624]: (**) Option "xkb_model" "pc105" gdm-x-session[ 4624]: (**) Option "xkb_layout" "de" gdm-x-session[ 4624]: (**) Option "xkb_variant" "neo" gdm-x-session[ 4624]: (WW) Option "xkb_options" requires a string value gdm-x-session[ 9289]: The XKEYBOARD keymap compiler (xkbcomp) reports: gdm-x-session[ 9289]: > Warning: Multiple interpretations of "Caps_Lock+ AnyOfOrNone( all)" gdm-x-session[ 9289]: > Using last definition for duplicate fields gdm-x-session[ 9289]: > Warning: Multiple interpretations of "Shift_ L+AnyOfOrNone( all)" gdm-x-session[ 9289]: > Using last definition for duplicate fields gdm-x-session[ 9289]: > Error: Key <HYPR> added to map for multiple modifiers gdm-x-session[ 9289]: > Using Mod2, ignoring Mod4. gdm-x-session[ 9289]: > Error: Key <MDSW> added to map for multiple modifiers gdm-x-session[ 9289]: > Using Mod3, ignoring Mod5. gdm-x-session[ 9289]: Errors from xkbcomp are not fatal to the X server gdm-x-session[ 4624]: (II) event0 - Power Button: is tagged by udev as: Keyboard gdm-x-session[ 4624]: (II) event0 - Power Button: device is a keyboard gdm-x-session[ 4624]: (EE) event1 - AT Translated Set 2 keyboard: client bug: event processing lagging behind by 22ms, your system is too slow
/usr/libexec/
/usr/libexec/
/usr/libexec/
systemd-
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
/usr/libexec/
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).
```