[SOLVED] Boot menu cannot be hidden after 2019-09-05 stable update | Missing gmo error.

thanks for the help and the tip with meld: very convinient tool to merge file-versions.

just for future reference regarding hiding the grub menu on dual-boot systems:
I did it by blocking the windows entry by adding GRUB_DISABLE_OS_PROBER=true to /etc/default/grub.
whenever i need to boot into windows i can do it from the UEFI.

As far as I've read it can be done by customizing your /etc/grub.d/30_os-prober but the method above seemed less of a hassle

greetings :slight_smile:

1 Like

@TheYke
What's

ls /etc/grub.d
grub-editenv list

i'm by no means an expert. as far as i know /etc/grub.dis a directory containing files that configure how your bootloader works. grub-editenv is a terminal command to set variables to further configure your PC's boot behaviour. Thats almost all I know about it myself. The rest can be read in manjaro and/or arch linux wiki etc. hope this helps a bit.

Cool, :wink:
he wants the output from terminal to fix your problem that uefi boot is useless.
gohlip really now all about the "grub" things :smiley: :wink: :slight_smile:

[bin] >> ls /etc/grub.d
insgesamt 84K
-rwxr-xr-x 1 root root 8,7K 31.08.2019 10:12 00_header*
-rwxr-xr-x 1 root root  12K 31.08.2019 10:12 10_linux*
-rwxr-xr-x 1 root root  12K 31.08.2019 10:12 20_linux_xen*
-rwxr-xr-x 1 root root  12K 31.08.2019 10:12 30_os-prober*
-rwxr-xr-x 1 root root  214 31.08.2019 10:12 40_custom*
-rwxr-xr-x 1 root root  216 31.08.2019 10:12 41_custom*
-rwxr-xr-x 1 root root  19K 14.08.2019 11:46 41_snapshots-btrfs*
-rwxr-xr-x 1 root root 1,2K 09.11.2018 23:50 60_memtest86+*
-rw-r--r-- 1 root root  483 31.08.2019 10:12 README
[bin] >> grub-editenv list
[bin] >>

oh man, silly me, sorry :laughing: :see_no_evil:
ls -l /etc/grub.d gives me

insgesamt 64
-rwxr-xr-x 1 root root  8871 31. Aug 10:12 00_header
-rwxr-xr-x 1 root root 12189 31. Aug 10:12 10_linux
-rwxr-xr-x 1 root root 12051 31. Aug 10:12 20_linux_xen
-rwxr-xr-x 1 root root 11674 31. Aug 10:12 30_os-prober
-rwxr-xr-x 1 root root   214 31. Aug 10:12 40_custom
-rwxr-xr-x 1 root root   216 31. Aug 10:12 41_custom
-rwxr-xr-x 1 root root  1219  9. Nov 2018  60_memtest86+
-rw-r--r-- 1 root root   483 31. Aug 10:12 README

grub-editenv list outputs

menu_auto_hide=2
boot_success=1
boot_indeterminate=1
saved_entry=gnulinux-advanced-cb853a76-1e4d-4197-b6ad-d280033a479d>gnulinux-4.19.59-rt23-1-MANJARO x64-advanced-cb853a76-1e4d-4197-b6ad-d
280033a479d

thanks & sorry again^^

2 Likes

No problem. We sometimes misunderstand (I do that too, more often than others, I think).

Now, I've just tested 2.04-6 and I'm not confident using this grub will fix your problem.
I think that you are able to circumvent - go around - this problem by disabling os-prober and getting a hidden grub is because by doing so, it is like having a only OS and menu_auto_hide therefore works (but won't last for long).

I am confident that by changing to using grub-vanilla, you will clear this problem once and for all.
See this post to give you an idea. But best I write out the detailed steps for you to take.

Let me know if you want to proceed and I'll work with you on it.

3 Likes

if you see high chances to get it working properly by switching to grub-vanilla i would love to try it out.
your help would be much appreciated (i managed to break my install once already. i'm still learning the whole linux thing).

so how to get that grub-vanilla working on my machine? :slight_smile:

thank you!

1 Like

Gladly. While testing out 2.04-6 manjaro default latest grub, I found some 'old behaviour' remains, timeout doesn't change or menu remains hidden (yours remain not hidden). So from the link, I want to add more commands so that we can be very sure grub starts from a clean slate.

Do below steps completely and do not shutdown or reboot if not complete. In the sequence listed.

  1. Remove all grubenv entries.
sudo grub-editenv /boot/grub/grubenv create
  1. Clear out totally /etc/default/grub and /etc/grub.d
sudo mv /etc/default/grub /etc/default/grub.old
sudo mv /etc/grub.d /etc/grub.d.old
  1. Install grub-vanilla
sudo pacman -S grub-vanilla
  1. Go to /etc/default/grub and ensure you have the desired parameters.
    For you... suggest you have the following (I can discuss later with you on this) and you can refer to the old file
 GRUB_DEFAULT=0   {or comment out this line}
 GRUB_TIMEOUT_STYLE=countdown
 GRUB_TIMEOUT=5
# GRUB_SAVEDEFAULT   {comment out this line}
  1. grub-install and update-grub
sudo grub-install /dev/sda
sudo update-grub

If bios-legacy, be careful grub-install to sda is the primary drive else use 'sudo grub-install /dev/sdb'
If UEFI, there's no need to specify /dev/sda (but you can specify anything - it will be okay)

Good luck.

ps: late here, will logoff soon and log back after 8 hours.

4 Likes

just booted the first time with my new grub-vanilla thanks to your guide. It booted fine. It displayed 5 secs of countdown before booting and pressing Esc showed the menu.
Thank you so far. :slight_smile:

did a few tests/ tweaks afterwards because i have 2 kernels installed: 4.19.69-1 and 4.19.59_rt (I use the pc as DAW).
Altough the rt kernel was installed after the normal one I could only set grub to boot the rt-kernel by default by adding GRUB_DISABLE_SUBMENU=y to /etc/default/grub. Otherwise grub ignored the rt-Kernel regardless of the GRUB_DEFAULT setting.

in addition i tested setting GRUB_TIMEOUT_STYLE=hidden.
Strangely it showed the following error on boot:
error: file '/boot/grub/locale/de.gmo' not found.
It booted, though.

Some suggestions?

1 Like

Good and you're welcome.
Can you provide your full /etc/default/grub ?

cat /etc/default/grub

Per SGS link, is that resolved?
Is your grub lang in German 'de'. 'de.mo' should be in your locales folder, is it not?

Now this.. answering last. You are using uefi? (test -d /sys/firmware/efi && echo UEFI || echo BIOS)
When booted to both non-rt kernels and at rt kernels, can you provide output of

sudo efivar-tester

I don't know much about rt kernel but there might be some issue of uefi implementation to rt kernels. I understand, if correctly, it is meant to be that way. I don't know enough.

hi there
here my /etc/default/grub

# GRUB boot loader configuration

GRUB_DEFAULT=2
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Manjaro"
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 resume=UUID=0052a7a1-4166-45e9-9394-f5f8f86afd4c quiet efi=runtime"
GRUB_CMDLINE_LINUX=""

# Preload both GPT and MBR modules so that they are not missed
GRUB_PRELOAD_MODULES="part_gpt part_msdos"

# Uncomment to enable booting from LUKS encrypted devices
#GRUB_ENABLE_CRYPTODISK=y

# Set to 'countdown' or 'hidden' to change timeout behavior,
# press ESC key to display menu.
GRUB_TIMEOUT_STYLE=countdown

# Uncomment to use basic console
GRUB_TERMINAL_INPUT=console

# Uncomment to disable graphical terminal
#GRUB_TERMINAL_OUTPUT=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
GRUB_GFXMODE=auto

# Uncomment to allow the kernel use the same resolution used by grub
GRUB_GFXPAYLOAD_LINUX=keep

# Uncomment if you want GRUB to pass to the Linux kernel the old parameter
# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx"
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_RECOVERY=true

# Uncomment and set to the desired menu colors.  Used by normal and wallpaper
# modes only.  Entries specified as foreground/background.
GRUB_COLOR_NORMAL="light-gray/black"
GRUB_COLOR_HIGHLIGHT="green/black"

# Uncomment one of them for the gfx desired, a image background or a gfxtheme
#GRUB_BACKGROUND="/usr/share/grub/background.png"
#GRUB_THEME="/path/to/gfxtheme"

# Uncomment to get a beep at GRUB start
#GRUB_INIT_TUNE="480 440 1"

# Uncomment to make GRUB remember the last selection. This requires to
# set 'GRUB_DEFAULT=saved' above.
#GRUB_SAVEDEFAULT="true"

GRUB_DISABLE_SUBMENU=y

I checked the link regarding the error: file '/boot/grub/locale/de.gmo' and I realised that I have neither a /boot/grub/locale/nor a /usr/share/locale/de/LC_MESSAGES/directory.

Regarding grub language: all texts in the menu are in english. is it that what you asked for?

I use UEFI, yes.

sudo efivar-tester on the normal kernel gives me

About to test empty
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test one
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test two
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test three
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test four
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test five
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test seven
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test eight
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test nine
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test fifteen
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test sixteen
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test seventeen
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test thirtyone
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test thirtytwo
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test thirtythree
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test tentwentyfour
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test tentwentyfive
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()

and on the rt-kernel output is

About to test empty
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test one
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test two
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test three
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test four
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test five
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test seven
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test eight
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test nine
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test fifteen
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test sixteen
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test seventeen
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test thirtyone
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test thirtytwo
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test thirtythree
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test tentwentyfour
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()
About to test tentwentyfive
testing efi_set_variable()
testing efi_get_variable_size()
testing efi_get_variable_exists()
testing efi_get_variable()
testing efi_get_variable_attributes()
testing efi_del_variable()
testing efi_append_variable()
testing efi_get_variable()
testing efi_del_variable()

I don't know if it is of importance: on the rt-kernel on boot it showed me the error-message /sys/firmware/efi/efivars: unknown filesystem type ‘efivars’from day one after install unless i added efi=runtimeto GRUB_CMDLINE_LINUX_DEFAULT

thanks again!

EDIT:
realised that I made a mistake: I shurely have a /usr/share/locale/de/LC_MESSAGES/directory. had to list the folders as super user, sorry. So am I supposed to create the /boot/grub/locale/ directory and copy the grub.mo from there as de.gmo?

Hi, I had the same problem but managed to fix it. Is your OS-prober on? if it is, this might just fix it: Grub ignores zero timeout

Now first efivar.

That is correct. And is recommended for rt-kernels and good that there is no error in 'efivar-tester' in the rt kernel.

But as to adding GRUB_DISABLE_SUBMENU=y so it can appear on the grub menu, this is new to me. I do not use rt-kernel and I don't know why. But good that you found out (disabling submenu) and tell us.

Now on locale.
Normally locale directory is in /boot/grub/locale. But Manjaro grub things are in /usr/share/grub and the locale directory is not there. I'm not sure if copying from /usr/share/locale will work as that directory is not used by grub.

But we need a 'locale_dir' to be set to the path of the locale directory, otherwise english will be used. Also to set language, 'lang' needs to be set also.

In my (non-OS) grub.cfg, for example, I have
set locale_dir=$prefix/locale ($prefix set earlier to ($root)/boot/grub)
set lang=zh_CN {most times I comment this out - mix of characters are ugly - then english is used}

In my manjaro (and other) OS grub, I leave the OS grub very much alone and only english is used.

I just tried this solution regarding my error: file '/boot/grub/locale/de.gmo' not found. and it worked.
I basically created a "locale" folder inside of /boot/grub/ and then copied the grub.mo with sudo cp /usr/share/locale/de/LC_MESSAGES/grub.mo /boot/grub/locale/de.mo

Now, if I set grub to hidden I am welcomed with a warm "Welcome to GRUB!" and I can enter the boot-menu by pressing ESC.

No clue if this is the right way. But this can be considered solved I guess?

Anyway thanks for your time and effort. You rock!
EDIT: And by that I mean @gohlip, too, of course. Thanks for fixing my GRUB in the first place!

EDIT2: typos

2 Likes

Ok, fine, @xabbu solved :slight_smile:
Missing de.mo
Falls in /boot/grub/locale/ weder eine de.mo oder de.gmo Datei vorhanden ist, kopiere eine neue de.mo in den Ordner.

sudo cp /usr/share/locale/de/LC_MESSAGES/grub.mo /boot/grub/locale/de.mo

Ein grub-install oder grub-mkconfig sind danach nicht nötig. Einfach dein System neu starten.

I think we had discussed this in the past.
As I read/check it now, it seems like a bug, or a mis-configuration.

  • /boot/grub/locale and contents are not owned by any package (grub*), meaning that if

we should give the grub system path /usr/share/locale (which contains translations), or the grub installation/update process should copy those files to /boot/grub/locale, getting current $LANG setting, which is not happening currently (in Manjaro).

  • If

is a wrong assumption, the default grub 'locale_dir' should be the grub system locale dir, which is supposed to be accessible during boot. Only

is needed, to select proper grub+menu language translation.

Since this issue is common, it seems to be a bug, which makes the proposed fix a workaround and not an actual system corrective fix.

IIRC I never had this issue on any of my old Ubuntu/Debian based distros. If anyone can verify this is still the case, may help.


In order for Grub to set language and translation settings, it checks $LANG to be set

if [ "x${LANG}" != "xC" ] &&  [ "x${LANG}" != "x" ]; then

So OP @TheYke should check what is the current setting

echo $LANG
1 Like

echo $LANG spits out de_DE.UTF-8

i3 / Xfce

~ >>> echo $LANG                                                                                                                    
de_DE.utf8
~ >>> locale                                                                                                                        
LANG=de_DE.utf8
LC_CTYPE="de_DE.utf8"
LC_NUMERIC="de_DE.utf8"
LC_TIME="de_DE.utf8"
LC_COLLATE="de_DE.utf8"
LC_MONETARY="de_DE.utf8"
LC_MESSAGES="de_DE.utf8"
LC_PAPER="de_DE.utf8"
LC_NAME="de_DE.utf8"
LC_ADDRESS="de_DE.utf8"
LC_TELEPHONE="de_DE.utf8"
LC_MEASUREMENT="de_DE.utf8"
LC_IDENTIFICATION="de_DE.utf8"
LC_ALL=

Hope you can work these locale things out. In the past, I've made manjaro's grub (not 2.04, but earlier) lang work for users in spanish, hungarian and croatian? I have my own in Chinese as pointed out, but I mostly use english nowadays, (mixed characters ugly). But this is not something that interest me much (like grub themes) and I hope you can help out on this. Thanks.

And oh.... maybe you like to take a look at this.

https://www.gnu.org/software/grub/manual/grub/html_node/locale_005fdir.html

Forum kindly sponsored by