How to change grub command-line (grub shell) keyboard layout?
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.
Solution 1:
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 fr
ench 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.
Solution 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/
.