Hi, I’m not the most expert user, but I’ve been messing with my latest linux install for a few months. I costumized the look of the GRUB, but whenever the kernel gets updated and the grub.cfg gets regenerated, the classes of two entries do not generate (efi and submenu), leaving the entries with no icons (which are determined by the class of the entry).

How do I make it so they automatically generate, instead of me modifing the .cfg everytime the kernel is updated?

I’m on linux mint, 21.2 Cinnamon.

  • bizdelnick
    link
    fedilink
    arrow-up
    6
    ·
    1 year ago

    Scripts that generate grub.cfg are located in /etc/grub.d/. You can edit them to specify classes. In my system (Debian) entries you ask about are added in /etc/grub.d/10_linux and /etc/grub.d/30_uefi-firmware.

    • RossoErcole@kbin.socialOP
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      1 year ago

      should I just add the class parameter in these files where it is usually supposed to be, and the files even on updates will not be changed and this will work?

      • bizdelnick
        link
        fedilink
        arrow-up
        5
        ·
        1 year ago

        These files are not changed on updates. grub.cfg will be changed, but it will contain what these scripts write into it, so if you add classes to them, they will appear in new grub.cfg.

        To test that everything works as expected, backup your current grub.cfg and run sudo update-grub.

          • bizdelnick
            link
            fedilink
            arrow-up
            1
            ·
            1 year ago

            See if this entry generated by another script in this directory.

            • RossoErcole@kbin.socialOP
              link
              fedilink
              arrow-up
              1
              ·
              edit-2
              1 year ago

              there were 2 scripts that semeed related to that: 10_linux_proxy and 35_linux_proxy.
              There is a folder called proxified scripts, and inside it there are two files: linux and os-prober

              Here is the text in the linux file: https://textdoc.co/V3atnuEvcG4QlPUp

              I’m not sure what to do with it

              • bizdelnick
                link
                fedilink
                arrow-up
                1
                ·
                1 year ago

                You need to add class to this line:

                echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' $menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
                

                Insert ${CLASS} before $menuentry_id_option:

                echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' ${CLASS} $menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"
                
                • RossoErcole@kbin.socialOP
                  link
                  fedilink
                  arrow-up
                  1
                  ·
                  edit-2
                  1 year ago

                  What generates is this, so I think it’s from the linux proxy 35:

                  ### BEGIN /etc/grub.d/35_linux_proxy ###
                  submenu "Advanced Options"{
                  menuentry "Ubuntu, with Linux 5.15.0-91-generic" --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-5.15.0-91-generic-advanced-9e121508-86c8-407a-803d-9521d13f0be9' {
                  		recordfail
                  	savedefault
                  		load_video
                  		gfxmode $linux_gfx_mode
                  		insmod gzio
                  		if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
                  		insmod part_gpt
                  		insmod ext2
                  		search --no-floppy --fs-uuid --set=root 9e121508-86c8-407a-803d-9521d13f0be9
                  		echo	'Loading Linux 5.15.0-91-generic ...'
                  		linux	/boot/vmlinuz-5.15.0-91-generic root=UUID=9e121508-86c8-407a-803d-9521d13f0be9 ro  
                  		echo	'Loading initial ramdisk ...'
                  		initrd	/boot/initrd.img-5.15.0-91-generic
                  }
                  
                  ...more entries here
                  
                  
                  • bizdelnick
                    link
                    fedilink
                    arrow-up
                    1
                    ·
                    1 year ago

                    Is not it what you wanted to? If not, write what you want instead ${CLASS} or define another variable and use it.

                  • RossoErcole@kbin.socialOP
                    link
                    fedilink
                    arrow-up
                    1
                    ·
                    edit-2
                    1 year ago

                    The linux proxy file has this inside it:

                    #!/bin/sh
                    #THIS IS A GRUB PROXY SCRIPT
                    '/etc/grub.d/proxifiedScripts/linux' | /etc/grub.d/bin/grubcfg_proxy "+'SUBMENU' as 'Advanced Options'{+'Advanced options for Ubuntu'/*, +'Advanced options for Ubuntu'/'Ubuntu, with Linux 5.15.0-75-generic'~28ff24c064536ab0cd3a1bad9f456e69~, +'Advanced options for Ubuntu'/'Ubuntu, with Linux 5.15.0-75-generic (recovery mode)'~712228d18fab4e59226cce8b4f0d3d91~, +'Advanced options for Ubuntu'/'Ubuntu, with Linux 5.15.0-73-generic'~f31b2a265d0dfef1fd439595ac77a493~, +'Advanced options for Ubuntu'/'Ubuntu, with Linux 5.15.0-73-generic (recovery mode)'~303762cfd1fb902e0cab98046932d096~, +'Advanced options for Ubuntu'/'Ubuntu, with Linux 5.15.0-72-generic'~b5308959171659a00cb9ad96851ff6a6~, +'Advanced options for Ubuntu'/'Ubuntu, with Linux 5.15.0-72-generic (recovery mode)'~30bf9c9d00d0afd9a6bbd4056b36d94e~, +'Advanced options for Ubuntu'/'Ubuntu, with Linux 5.15.0-56-generic'~a76a35ca20f2ed58db39dc7b60a1f7a6~, +'Advanced options for Ubuntu'/'Ubuntu, with Linux 5.15.0-56-generic (recovery mode)'~7e2e93487d695fdce68a6355544c0cee~}
                    -*
                    -#text
                    -'Ubuntu'~ff8d1852fd072e04e5a89b38002b354a~
                    "
                    
                    
                • RossoErcole@kbin.socialOP
                  link
                  fedilink
                  arrow-up
                  1
                  ·
                  edit-2
                  1 year ago

                  it’s not working, also I don’t know why when I went in that line I have a \ now, that wasn’t there before apparently, before $menuentry:

                  echo "submenu '$(gettext_printf "Advanced options for %s" "${OS}" | grub_quote)' \$menuentry_id_option 'gnulinux-advanced-$boot_device_id' {"

                  (I’ve tried adding it also in front of ${CLASS}, leaving it only were it is, and removing it from both)