11

When I boot in GRUB2 and press c, I have access to GRUB shell.

How to change the keyboard layout (language) of this GRUB shell?

Note that I'm booting an Ubuntu VM inside Virtualbox.

KrisWebDev
  • 1,610
  • 1
  • 15
  • 26

4 Answers4

10

First, check that you're using GRUB 2 (GRUB 0.x works differently).

grub-install --version

Generate a GRUB keyboard layout file. Below is the command for a french keyboard. For other languages, check /usr/share/X11/xkb/symbols/. Filename choice is not important (you can change bepo).

sudo grub-kbdcomp -o /boot/grub/bepo.gkb fr

Edit /etc/default/grub with root rights to have:

#GRUB_HIDDEN_TIMEOUT=0
GRUB_TERMINAL_INPUT="at_keyboard"

Edit /etc/grub.d/40_custom with root rights to have:

#!/bin/sh
exec tail -n +3 $0

insmod keylayouts
keymap /boot/grub/bepo.gkb

Finally:

sudo update-grub

Note: Forget immediately about using the Shift key to display GRUB menu! It may be normal that terminal_input at_keyboard make this key not work anymore. So make sure #GRUB_HIDDEN_TIMEOUT=0 is properly commented.

KrisWebDev
  • 1,610
  • 1
  • 15
  • 26
  • 1
    Trying this on Linux Mint 18.3 with german locale (de) completely disabled my keyboard while in grub. Probably because grub-kbdcomp reported multiple times invalid code and invalid identifier – xeruf Apr 22 '18 at 16:46
  • Link is dead and solution isn't bullet proof on laptops. – Zulgrib Apr 27 '18 at 11:48
  • 2
    Will this work as well for decrypting passphrase typing (full disk encryption including /boot)? – PlasmaBinturong Jun 10 '19 at 18:45
2

Fine-tuning my grub (2.02-2ubuntu8.3), on an old fully functional Asus N73JF (multiboot Windows 7, Windows recovery, Ubuntu 15.10, Ubuntu 18.04...) a custom menu was not an option for me.

sudo grub-kbdcomp -o /boot/grub/layouts/laptop.gkb fr

(Ubuntu's grub2 uses /boot/grub/layouts from 15.10).

Next, I don't open /etc/default/grub nor /etc/grub.d/40_custom: I edit /etc/grub.d/00_header where I replace

    cat << EOF
  set gfxmode=${GRUB_GFXMODE}
  load_video
  insmod gfxterm
EOF

with

    cat << EOF
  set gfxmode=${GRUB_GFXMODE}
  load_video
  insmod gfxterm
  insmod terminal
  terminal_output gfxterm
  insmod keylayouts
  insmod at_keyboard
  terminal_input at_keyboard
  keymap laptop
EOF

Thanks to KrisWebDev for his question-answer: I learn a lot looking inside /boot/grub/i386-pc/.

  • I do not have /boot/grub/layouts in Ubuntu 20.04. /boot/grub/i386-pc/ has only binary .mod files. What do you learn from those? – jarno Jan 24 '21 at 10:42
1

Don't do it!

If anyone should try this on a notebook / laptop, don't! Like Zulgrib said in hirs comment this isn't bulletproof, i.a.it can wreak your grub boot-loader.

The German Debian Forum doesn't recommend it either!

This only works if a keyboard is connected that can be addressed with AT or USB. A laptop or notebook keyboard may not work at all and leaves you sitting in front of an unusable GRUB2! In any case, the keyboard of the Lenovo X220 does not work.

German Debian Forum

DHC19
  • 23
  • This is not an answer and this is an English only site. – David Feb 08 '22 at 07:01
  • The content of the page I linked to translates to English if you click it. – DHC19 Feb 11 '22 at 15:15
  • I confirm DHC19's quote. While it works fine in a VM, it doesn't work on both my laptops. Does anybody know a way to change GRUB's keyboard layout on a laptop ? – ChennyStar Dec 23 '22 at 10:52
0

Comment on comment of jamo to 2nd answer: You can create /boot/grub/layouts manually.

sudo mkdir /boot/grub/layouts
CoSoCo
  • 11