Subject: Setting a GRUB keyboard-layout breaks GRUB…and Linux‽

From: Tobias Geerinckx-Rice <[email-masked]>
Date: Sun, 05 May 2019 18:27:31 +0200

Guix,

Some (=none) of you might remember my X keyboard woes on #guix, 
where I was stuck without a backspace key or the key below it (\, 
|) on my ThinkPad X230T's US keyboard.  Both sent out 
‘XF86ScreenSaver’ codes instead.

I tried dozens of things, both in my system configuration and by 
running random stateful xkb commands (naughty), and managed to 
‘fix’ the bug without ever finding the cause (very naughty).

I think I was looking for it in all the wrong places.  Something 
goes wrong before the kernel even boots.  Here's my 
keyboard-layout:

 (keyboard-layout
  (keyboard-layout
   "us" "dvp"                           ; 
   kaufmann.no/roland/dvorak
   #:model "thinkpad"                   ; pc104, pc105, thinkpad, 
   …
   #:options                            ; list of XKB Option 
   strings
   (list ""                             ; unset all inherited 
   options
         "caps:shiftlock"               ; Shift Lock affects all 
         keys
         "shift:breaks_caps"            ; Shift cancels Caps Lock
         "compose:102"                  ; next to left Shift on 
         pc105
         "lv3:ralt_switch"              ; key to choose 3rd level
         "nbsp:level3n"                 ; nbsp @lv3, thin nbsp 
         @lv4
         "numpad:shift3"                ; Num Lock: Shift chooses 
         lv3
         "kpdl:semi"                    ; key pad semicolon @lv3
         "misc:typo"                    ; add extra typographic 
         chars
         "ctrl:swapcaps"                ; onwards for great Emacs
         "terminate:ctrl_alt_bksp")))   ; zap X just to watch it 
         die

Here's what works just fine:

   (service slim-service-type
            (slim-configuration
             (xorg-configuration
              (xorg-configuration
               (keyboard-layout keyboard-layout)
               …

However, today I tried to (re-)add it to GRUB, too, and ended up 
writing the following comment:

 (bootloader
  (bootloader-configuration
   (bootloader grub-efi-bootloader)
   ;; XXX Strange bug: GRUB can read the LUKS passphrase, but 
   afterwards (at
   ;; the menu screen) no longer responds to key presses.  Even 
   stranger: it
   ;; makes my X230T's backspace key send ‘XF86ScreenSaver’s even 
   on Linux.
   ;; (keyboard-layout keyboard-layout)
   (target "/boot/efi")
   (timeout 1))))

This is 100% reproducible.

I'll try to narrow it down a bit, but the combination of losing my 
actual work-workstation (which is also my funstation) while 
entering my passphrase 5 times, every time, makes that an 
unpleasant and tedious affair.

Kind regards,

T G-R