c’t 11/2026
Hoe staat het met Matter als smarthome-standaard?
Cover van
Linux-bootloader Grub aanpassen

Linux-bootloader Grub aanpassen: pas het Linux-opstartmenu naar wens aan

Grub is de standaard bootloader voor alle Linux-versies, maar sommige distributies beperken de configuratiemogelijkheden. Met een eigen script krijg je toegang tot alle functies.

Lees verder na de advertentie

Grub: de veelzijdige bootloader van Linux

Als Linux opstart, zit Grub daar bijna altijd bij. Het opstartmenu is het eerste wat je te zien krijgt – tenzij dat verborgen is. Grub is de standaard Linux-bootloader, maar er bestaat onder Linux geen standaard-Grub. Hoe Grub eruitziet en zich gedraagt, hangt af van hoe de ontwikkelaars van de distributie hem configureren en welke wijzigingen ze hebben aangebracht aan de bij Grub behorende scripts.

De distributiespecifieke aanpassingen aan de scripts bepalen op hun beurt hoe makkelijk of lastig het voor gebruikers is om Grub aan eigen behoeften aan te passen – bijvoorbeeld om meerdere besturingssystemen op meerdere harde schijven te beheren of het opstartmenu aan te passen. Daarvoor moet je eerst uitzoeken wat door je distributie wordt ondersteund en wat alleen met wat trucjes gerealiseerd kan worden.

De naam Grub (Grand Unified Bootloader) verwijst alleen naar de bootloader, dus het programma dat door het BIOS van de computer wordt geladen om op zijn beurt het besturingssysteem op te starten. Het staat standaard in de map /boot/grub, die bij veel Linux-installaties op een aparte partitie staat – vooral als er complexe opstellingen met LVM, RAID of versleutelde partities gebruikt worden.

Omdat Grub onder bepaalde omstandigheden geen bestanden uit het versleutelde root-bestandssysteem kan laden, worden ook alle andere onderdelen, zoals het lettertype voor het opstartmenu en verschillende modules voor bestandssystemen, in /boot/grub opgeslagen.

Om ervoor te zorgen dat Grub weet welke opties in het opstartmenu moeten worden weergegeven, staat het hoofdconfiguratiebestand grub.cfg direct naast de bootloader, eveneens in de map /boot/grub.

Samenstelling

De meeste gebruikers komen echter nooit in aanraking met dat bestand omdat het door diverse scripts en andere configuratiebestanden bijvoorbeeld na elke kernel-update opnieuw aangemaakt wordt. Het belangrijkste hulpmiddel daarvoor is het shellscript grub-mkconfig.

Er zijn echter nog meer scripts op de achtergrond die een grote invloed hebben op wat er uiteindelijk in het hoofdconfiguratiebestand komt te staan, en die daarmee het gedrag en het uiterlijk van de bootloader en het opstartmenu veranderen.

Hoe een nieuw Grub-configuratiebestand ontstaat, laten we zien aan de hand van een functie die in alle Linux-distributies en ook in de officiële bronnen van Grub zit: een parallelle installatie van meerdere besturingssystemen. Als Linux na Windows op dezelfde computer geïnstalleerd wordt, komt Grub meestal op dezelfde EFI-partitie terecht als de Windows-bootloader en voegt het Windows toe als extra opstartoptie. Dat gebeurt zelfs als je voor Linux een tweede harde schijf of SSD installeert.

Het grote nadeel: door de koppeling via de EFI-partitie van Windows kun je Linux niet meer zomaar verwijderen of een tweede harde schijf weer verwijderen. In plaats daarvan moet je eerst de bootloader handmatig van de EFI-partitie verwijderen – zonder die van Windows te beschadigen, anders start je computer helemaal niet meer op.

Door de Windows-schijf tijdelijk te verwijderen en Linux vervolgens op een aparte schijf te installeren, kun je de Linux-schijf op elk moment weer verwijderen of wissen – Windows blijft in dat geval volledig onaangetast.

Bij die opstelling moet je echter de opstartvolgorde via het BIOS aanpassen om tussen Windows en Linux te kunnen schakelen. Vanuit de Linux-bootloader krijg je Windows niet aangeboden omdat Grub standaard niet naar andere besturingssystemen zoekt als Linux tijdens het installeren het enige besturingssysteem op de computer was.

Lees dit artikel verder

Lees over tech-trends en achtergronden, nieuwe apparatuur, software en toepassingen voor professioneel gebruik. Met c’t heb je altijd de juiste tech-informatie. Word abonnee en lees onbeperkt alle artikelen.
Bekijk abonnementen Al abonnee? Log in

Dat kun je echter eenvoudig veranderen door, als dat nog niet standaard geïnstalleerd is, de OS-Prober achteraf te installeren en het volgende toe te voegen aan het Grub-configuratiebestand /etc/default/grub:

GRUB_DISABLE_OS_PROBER=false

Je kunt ook een bestand aanmaken in de map /etc/default/grub.d, bijvoorbeeld met de naam 50_os-prober, en deze regel daarin zetten. Grub neemt dergelijke bestanden automatisch op in zijn configuratie.

Grafisch configureren

Een alternatief is de grafische tool grub-customizer, waarmee je de Grub-instellingen ook kunt aanpassen. Grub Customizer is echter niet per se helemaal up-to-date: het programma gaat er bijvoorbeeld nog steeds vanuit dat Grub standaard naar andere besturingssystemen zoekt, en geeft de functie ook als geactiveerd weer, tenzij het zoeken naar andere besturingssystemen expliciet is uitgeschakeld in het vereenvoudigde configuratiebestand (simple configuration file).

Bovendien weet Grub Customizer niet welke individuele instellingsmogelijkheden jouw distributie überhaupt biedt. Zo biedt het programma ook onder Debian en Ubuntu de mogelijkheid om de kleurstelling van het opstartmenu aan te passen en een achtergrondafbeelding toe te voegen.

Dat heeft echter totaal geen effect omdat het Debian-project een standaarduitstraling voorschrijft en ook geen achtergrondafbeelding toestaat – in ieder geval niet zonder wat te sjoemelen.

De Grub Customizer slaat de instellingen niet alleen op in het vereenvoudigde Grub-configuratiebestand /etc/default/grub, maar roept ook grub-mkconfig aan, dat met het volgende commando daaruit het hoofdconfiguratiebestand (full configuration file) /boot/grub/grub.cfg haalt:

sudo grub-mkconfig -o /boot/grub/grub.cfg

Die stap is altijd nodig als je wijzigingen hebt aangebracht in het vereenvoudigde configuratiebestand of in de scripts van grubmkconfig. Bij op Debian gebaseerde Linux-distributies kun je ook het commando sudo update-grub gebruiken, een script dat alleen maar de aanroep van grub-mkconfig met de hierboven genoemde parameters bevat.

Of grub-mkconfig nog een besturingssysteem heeft gevonden en in het menu heeft toegevoegd, kun je makkelijk achterhalen met de Grub Customizer. De GUI toont namelijk direct na het opstarten het Grub-menu op een manier die lijkt op hoe het er bij het opstarten van het systeem uit zou zien.

Als alternatief kun je met grep in de terminal de menuregels laten zien:

sudo grep 'menuentry_id' /boot/grub/grub.cfg

Beter leesbaar maken

Een probleem van moderne computers met hun schermen met hoge resolutie is dat je het Grub-menu nauwelijks nog kunt lezen. De grafische modus wordt door de grafische kaart en de monitor onderling afgesproken – tenzij je iets anders instelt.

Welke grafische modi je in Grub kunt gebruiken, hangt af van de computer – om precies te zijn: de grafische kaart – en de monitor. Je kunt daarvoor een lijst met grafische modi in Grub zelf opvragen. Daar moet je Secure Boot echter voor uitschakelen. Start de computer daarna opnieuw op en druk in het Grub-opstartmenu op de C-toets.

Daarmee kom je bij de Grub-commandline, waar je het commando videoinfo invoert. Vervolgens krijg je de beschikbare resoluties te zien. Onderaan de lijst staat de voorkeursresolutie die standaard gebruikt wordt.

Met de Esc-toets ga je terug naar het Grub-menu. Terug in Linux kun je de resolutie verlagen, waardoor het opstartmenu groter wordt en dus weer beter leesbaar is. We raden een resolutie van 1280 × 720 pixels aan, wat overeenkomt met de tegenwoordig gangbare beeldverhouding van de meeste beeldschermen.

Voeg daarvoor de volgende regels toe aan het bestand /etc/default/grub of maak daarvoor het bestand /etc/default/grub.d/50_gfxmode.cfg aan:

GRUB_TERMINAL_OUTPUT=gfxterm
GRUB_GFXMODE=1280x720x32
GRUB_GFXPAYLOAD_LINUX=keep

Die regels activeren de grafische modus met de opgegeven resolutie en een kleurdiepte van 32 bit. Daarnaast moet GRUB de grafische modus behouden tijdens het opstarten van de kernel, zodat je eventuele meldingen van de kernel beter kunt lezen – tenzij er tijdens het opstarten, bijvoorbeeld door een opstartlogo, naar een andere modus wordt overgeschakeld.

Om ervoor te zorgen dat het GRUB-menu überhaupt weergegeven wordt, moet GRUB een tweede besturingssysteem herkend hebben of je moet de regel GRUB_TIMEOUT_STYLE=hidden in het configuratiebestand aanpassen zodat daar GRUB_TIMEOUT_STYLE=menu staat.

Je kunt de regel ook in een nieuw bestand met de extensie .cfg in de map /etc/default/grub.d zetten. Je mag de bestandsnaam zelf kiezen – bijvoorbeeld 10_menu.cfg. In dat geval hoef je de bestaande vermelding GRUB_TIMEOUT_STYLE=hidden niet uit het bestand /etc/default/grub te verwijderen of uit te commentariëren. Wanneer grub-mkconfig namelijk een nieuw hoofdconfiguratiebestand aanmaakt, neemt het script eerst de inhoud van het bestand /etc/default/grub op via het source-commando van de shell.

Dat grub-mkconfig het source-commando gebruikt, heeft verstrekkende gevolgen, want de inhoud van het bestand wordt niet alleen ingevoegd, maar ook als onderdeel van het script grub-mkconfig in diens context en dus met rootrechten uitgevoerd.

Je kunt in het bestand /etc/default/grub dus niet alleen waarden aan variabelen toekennen, maar ook willekeurige code invoegen. Op Debian gebaseerde distributies maken daar bijvoorbeeld gebruik van om via shellcode de naam van de distributie op te slaan in de omgevingsvariabele GRUB_DISTRIBUTOR – hier een voorbeeld uit Debian 13:

GRUB_DISTRIBUTOR="'( . /etc/os-release && echo ${NAME} ) '" 

Op dezelfde manier gaat grub-mkconfig vervolgens te werk met de bestanden uit de map /etc/default/grub.d, en wel in alfabetische volgorde. Daarom hoef je de toewijzing GRUB_TIMEOUT_STYLE=hidden uit het configuratiebestand /etc/default/grub niet te verwijderen als je GRUB_TIMEOUT_STYLE=menu in het bestand /etc/default/grub.d/10_menu.cfg hebt ingevoerd. De definitie uit dat laatste bestand overschrijft de eerder ingestelde waarde.

Als er nog een definitie van de variabele GRUB_TIMEOUT_STYLE zou staan, bijvoorbeeld in een bestand 99_custom.cfg, dan zou ook de waarde uit het bestand 10_menu.cfg worden overschreven omdat bestandsnamen die beginnen met 10… eerder komen dan 99….

Een andere handige omgevingsvariabele is GRUB_TIMEOUT. Daarmee bepaal je na hoeveel seconden Grub de standaard opstartoptie start. Sommige computers starten zo snel op dat je nauwelijks de kans hebt om in het BIOS te komen. Grub voegt echter standaard een menuoptie toe waarmee je het BIOS gericht kunt starten. Met de instelling GRUB_TIMEOUT=10 in het bestand /etc/default/grub.d/10_menu.cfg wacht Grub 10 seconden in het opstartmenu voordat het de standaardinstelling start. Dan is er genoeg tijd om, indien nodig, via het Grub-opstartmenu het BIOS te openen.

Functies bepalen

Het script grub-mkconfig neemt niet alleen het vereenvoudigde configuratiebestand /etc/default/grub en alle andere bestanden uit /etc/default/grub.d op, maar gebruikt ook een reeks distributiespecifieke scripts uit de map /etc/grub.d om daaruit een nieuw hoofdconfiguratiebestand voor Grub te genereren.

Ook de bootloader zelf gebruikt omgevingsvariabelen in zijn hoofdconfiguratiebestand – maar dan wel heel andere dan grub-mkconfig (zie de links bij dit artikel). Voor het omzetten zorgt grub-mkconfig met zijn hulpscripts in de map /etc/grub.d, die ook in alfabetische volgorde van hun bestandsnamen aangeroepen worden.

Zo maakt bijvoorbeeld bij alle distributies het script /etc/grub.d/00_header de variabele GRUB_TIMEOUT uit de vereenvoudigde configuratie aan naar de variabele timeout voor het hoofdconfiguratiebestand. Welke vereenvoudigde configuratievariabelen grub-mkconfig in jouw distributie herkent, staat in het script zelf – de volledige lijst met variabelen krijg je met het commando

grep -oPz '(?s)export GRUB_.*?[^\\]\n' /usr/sbin/grub-mkconfig

Grub staat ook code toe in het hoofdconfiguratiebestand. Terwijl grub-mkconfig in zijn vereenvoudigde configuratiebestanden alle mogelijkheden van een shellscript biedt, heeft de bootloader zelf een beperkte functionaliteit, die syntactisch echter overeenkomt met die van gangbare shells (zie de links bij dit artikel).

Controleconstructies en loops gebruiken bijvoorbeeld dezelfde syntaxis als Bash. Dat laat het volgende voorbeeld zien.

Bij de time-out is er een bijzonderheid: als er een tweede besturingssysteem is, maar de time-out zoals gebruikelijk op nul staat, voegt het script /etc/grub.d/30_os-prober scriptcode toe aan het hoofdconfiguratiebestand, die de waarde verhoogt naar 10 seconden (set timeout=10) en bovendien het opstartmenu weergeeft (timeout_style=menu). Hier het betreffende fragment:

set timeout_style=menu 
if [ "${timeout}" = 0 ]; then 
	set timeout=10 
fi 

Door een eigen uitvoerbaar script aan te maken, bijvoorbeeld met de naam 99_custom in de map /etc/grub.d, kun je functies in Grub gebruiken die grub-mkconfig in jouw distributie helemaal niet ondersteunt.

Trucs toepassen

Een voorbeeld van zo’n uitbreiding is de kleurstelling van het opstartmenu. Standaard is het eenvoudig in zwartwit uitgevoerd.

Bij de meeste distributies kun je de kleuren van het opstartmenu aanpassen, bijvoorbeeld door het volgende in het bestand /etc/default/grub.d/20_color.cfg in te voeren:

GRUB_COLOR_NORMAL="light-gray/blue"
GRUB_COLOR_HIGHLIGHT="white/cyan"

De variabele GRUB_COLOR_NORMAL bepaalt de tekst- en achtergrondkleur voor het opstartmenu, terwijl GRUB_COLOR_HIGHLIGHT de kleur van het momenteel geselecteerde opstartitem definieert. grub-mkconfig uit op Arch gebaseerde distributies vertaalt dat naar:

set menu_color_normal=light-gray/blue
set menu_color_highlight=white/cyan

Bij op Debian gebaseerde distributies ontbreken de omgevingsvariabelen GRUB_COLOR_NORMAL en GRUB_COLOR_HIGHLIGHT daarentegen in grub-mkconfig. In plaats daarvan maakt het bij grub-mkconfig behorende hulpscript /etc/grub.d/05_debian_theme een distributiespecifiek kleurenschema aan in de hoofdconfiguratie:

case $GRUB_DISTRIBUTOR in 
	Tanglu|Ubuntu|Kubuntu) 
		echo "${1}set menu_color_normal=white/black"
		echo "${1}set menu_color_highlight=black/light-gray" 
		... 
		;; 
	*) 
		echo "${1}set menu_color_normal=cyan/blue" 
		echo "${1}set menu_color_highlight=white/blue" 
		;; 

Dat betekent dat de kleuren van het opstartmenu voor de distributies Tanglu, Ubuntu en Kubuntu zijn ingesteld op zwartwit. Anders, bijvoorbeeld bij Debian en Linux Mint, is het menu altijd blauwwit.

Je kunt die instellingen echter overschrijven door het bestand /etc/grub.d/99_custom aan te maken met de volgende inhoud:

#!/ bin/sh
set -e
cat << EOF
	set menu_color_normal=light-gray/blue
	set menu_color_highlight=white/cyan
EOF

Dat werkt bij alle Linux-distributies en overschrijft ook eventuele vereenvoudigde configuratie-instellingen van GRUB_COLOR_NORMAL en GRUB_COLOR_HIGHLIGHT. Het is belangrijk dat je het bestand daarna nog uitvoerbaar maakt met het commando sudo chmod a+x /etc/grub.d/99_custom voordat je de Grub-configuratie bijwerkt met grub-mkconfig.

Je kunt ook het bestand 99_custom weglaten en in plaats daarvan de kleuren in het script 05_debian_theme aanpassen. Maar dan bestaat het risico dat er bij een update van het Grub-pakket een bestandsconflict ontstaat omdat het pakketbeheer het door jou gewijzigde bestand probeert te overschrijven.

Door je eigen aanpassingen in het voorheen niet-bestaande bestand 99_custom te zetten, voorkom je dat probleem bij een update. En zolang er geen bestand is dat achter 99_custom komt te staan, heb je met je instellingen altijd het laatste woord.

Mirko Dölle en Noud van Kruysbergen

Grub omgevingsvariabelen

Grub scriptfuncties

Grub handleiding kleuraanpassing

Grub customizer-pakket

Inspiratie in je mailbox

Blijf bij op IT-gebied en verbreed je expertise. Ontvang elke week artikelen over de laatste tech-ontwikkelingen, toepassingen, nieuwe hard- en software én ontvang tips en aanbiedingen.

Loginmenu afsluiten