12

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,680

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,680
3

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/.

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
0

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

sudo mkdir /boot/grub/layouts
CoSoCo
  • 11