Tanto per cominciare vi do un'idea di cosa sia il mio menu di avvio.
Linux
Advanced options for Linux
Windows UEFI bootmgfw.efi
Windows Boot UEFI loader
EFI/ubuntu/MokManager.efi
/EFI/HP/BIOSUpdate/CryptRSA.efi
/EFI/HP/BIOSUpdate/CryptRSA32.efi
/EFI/HP/BIOSUpdate/HpBiosMgmt.efi
/EFI/HP/BIOSUpdate/HpBiosMgmt32.efi
/EFI/HP/BIOSUpdate/HpBiosUpdate.efi
/EFI/HP/BIOSUpdate/HpBiosUpdate32.efi
/EFI/HP/SystemDiags/CryptRSA.efi
/EFI/HP/SystemDiags/CryptRSA32.efi
/EFI/HP/SystemDiags/HpSysDiags.efi
/EFI/HP/SystemDiags/HpSysDiags32.efi
Windows Boot Manager
System setup
Direi che è un pò troppo.... ma tutte queste voci sono rilevate in automatico da GRUB, o da Boot Repair, che tante volte mi ha salvato...
Nel file di configurazione /boot/grub/grub.cfg si vede la struttura: Anzitutto c'è la scritta
# DO NOT EDIT THIS FILE
#
# It is automatically generated by grub-mkconfig using templates
# from /etc/grub.d and settings from /etc/default/grub
poi ci sono una serie di sezioni contrassegnate da cancelletti, dalle scritte BEGIN e END, tipo questa:
### BEGIN /etc/grub.d/05_debian_theme ###
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
### END /etc/grub.d/05_debian_theme ###
contrassegnate da dei numeri:
00 ha le intestazioni, il tempo di timeout e l'indicazione della voce da avviare di default
05 e 06 sono i temi, ovvero come si presenta il menu in avvio (colori, dimensioni....)
10 sono le installazioni linux con i relativi kernel (linux e advanced option...)
25 sono tutti gli efi che vediamo sopra, relativi anche alle opzioni dell'efi (bios) per le opzioni di avvio, diagnostica ed aggiornamento bios
30 è l'OS prober, quello che scopre altri sistemi da avviare, incluso windows, e poi c'è il 30 firmware, che include il system setup... il sistema che consente di fare il recovery di fabbrica del pc.
può capitare che ci sia anche il memtest
41 con altre cose.....
Di tutta questa selva quello che ci serve davvero sono 00, 05 e 06, 10 e 30.
Per un pò sono andato avanti a cancellare le cose da questo file che non andrebbe editato, ma poi in effetti, dato che è generato dagli script presenti in /etc/grub.d e /etc/default/grub sono andato a mettere mano li.
sudo gedit /etc/default/grub
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=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=640x480
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_RECOVERY="true"
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
Qui si può cambiare la voce di default ed il tempo di timeout. il default si conta da 0, o si può anche dare il nome, così da fregarsene. Io lascio Linux, ma se si vuole ad esempio avviare Windows occorrerà specificare la sua posizione o nome, che vediamo tra poco. In /etc/grub.d si trovano i seguenti file:
00_header
05_debian_theme
06_mint_theme
10_linux
10_lupin
20_memtest86+
20_linux_xen
25_custom
30_os-prober
30_uefi-firmware
40_custom
41_custom
che sono script che formano le relative righe nel file /boot/grub/grub.cfg. Il loro numero genera la loro posizione nel file e quindi nel menu. Se ad esempio volessi Windows come ultima voce, dovrei portare il 30_os-prober come ultimo, dandogli tipo 99.
A questo punto per rimuovere delle parti basta togliere il file (mettendolo ad esempio in una sottocartella) oppure togliergli i permessi di esecuzione. Dunque oer fare quello che voglio
sudo chmod -x /etc/grub.d/25_custom
sudo mv 30_os-prober 99_os-prober
sudo update-grub
il comando update-grub genera di nuovo il file grub.cfg in /boot/grub. A questo punto il menu ha solo 4 voci:
Linux
Advanced options for Linux
System setup
Windows Boot Manager (su /dev/sda1)
Bene, ora, volendo mettere Windows predefinito all'avvio, basterebbe modificare il file /etc/default/grub mettendo come GRUB_DEFAULT=3 o GRUB_DEFAULT="Windows Boot Manager (su /dev/sda1)" e salvare.
Se volete ulteriori spiegazioni sulle funzioni di grub, qui c'è un tutorial esaustivo.