šµ The Secret Soundtrack of GRUB: Making Your Bootloader Sing
So, you know that feeling when youāre editing GRUB for the thousandth time, because dual-booting is apparently a lifestyle choice?
In a previous post ā Resurrecting My Windows Partition After 4 Years š„ļøš® ā I was neck-deep in grub.cfg
, poking at boot entries, fixing UUIDs, and generally performing a ritual worthy of system resurrection.
While I was at it, I decided to take a closer look at all those mysterious variables lurking in /etc/default/grub
.
Thatās when I stumbled upon something… magical. āØ
š¶ GRUB_INIT_TUNE
ā Your Bootloader Has a Voice
Hidden among all the serious-sounding options like GRUB_TIMEOUT
and GRUB_CMDLINE_LINUX_DEFAULT
sits this gem:
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
Wait, what? GRUB can beep?
Oh, not just beep. GRUB can play a tune. šŗ
Hereās how it actually works (per the GRUB manpage):
Format:
tempo freq duration [freq duration freq duration ...]
- tempo ā The base time for all note durations, in beats per minute.
- 60 BPM ā 1 second per beat
- 120 BPM ā 0.5 seconds per beat
- freq ā The note frequency in hertz.
- 262 = Middle C, 0 = silence
- duration ā Measured in ābarsā relative to the tempo.
- With tempo 60,
1
= 1 second,2
= 2 seconds, etc.
- With tempo 60,
So 480 440 1
is basically GRUB saying āHello, world!ā through your motherboard speaker: 0.25 seconds at 440 Hz, which is A4 in standard concert pitch as defined by ISO 16:1975.
And yes, this works even before your sound card drivers have loaded ā pure, raw, BIOS-level nostalgia.
š§ From Beep to Bop
Naturally, I couldnāt resist. One line turned into a small Python experiment, which turned into an audio preview tool, which turned into⦠letās say, ābootloader performance art.ā
Want to make GRUB play a polska when your system starts?
You can. Itās just a matter of string length ā and a little bit of mischief. š
Thereās technically no fixed āmaximum sizeā for GRUB_INIT_TUNE
, but remember: the bootloader runs in a very limited environment. Push it too far, and your majestic overture becomes a segmentation fault sonata.
So maybe keep it under a few kilobytes unless you enjoy debugging hex dumps at 2 AM.
š¼ How to Write a Tune That Wonāt Make Your Laptop Cry
Practical rules of thumb (donāt be that person):
- Keep the inline tune under a few kilobytes if you want it to behave predictably.
- Hundreds to a few thousands of notes is usually fine; tens of thousands is pushing luck.
- Each numeric value (pitch or duration) must be ⤠65535.
- Very long tunes simply delay the menu ā thatās obnoxious for you and terrifying for anyone asking you for help.
Keep tunes short and tasteful (or obnoxious on purpose).
šµ Little Musical Grammar: Notes, Durations and Chords (Fake Ones)
Write notes as frequency numbers (Hz). Example: A4 = 440.
Prefer readable helpers: write a tiny script that converts D4 F#4 A4
into the numbers.
Example minimal tune:

GRUB_INIT_TUNE="480 294 1 370 1 440 1 370 1 392 1 494 1 294 1"
Thatāll give you a jaunty, bouncy opener ā suitable for mild neighbour complaints. šš»
Chords? GRUB canāt play them simultaneously ā but you can fake them by rapid time-multiplexing (cycling the chord notes quickly).
It sounds like a buzzing organ, not a symphony, but itās delightful in small doses.
Fun fact š¾: this time-multiplexing trick isnāt new ā itās straight out of the 8-bit video game era.
Old sound chips (like those in the Commodore 64 and NES) used the same sleight of hand to make
a single channel pretend to play multiple notes at once.
If youāve ever heard a chiptune shimmer with impossible harmonies, thatās the same magic. āØš®
š§° Tools I Like (and That You Secretly Want)
If youāre not into manually counting numbers, do this:
Use a small composer script (I wrote one) that:
- Accepts melodic notation like
D4 F#4 A4
orC4+E4+G4
(chord syntax). - Can preview via your system audio (so you donāt have to reboot to hear it).
- Can install the result into
/etc/default/grub
and runupdate-grub
(only as sudo).
Preview before you install. Always.
Your ears will tell you if your āode to systemdā is charming or actually offensive.
For chords, the script time-multiplexes: e.g. for a 500 ms chord and 15 ms slices,
it cycles the chord notes quickly so the ear blends them.
Itās not true polyphony, but itās a fun trick.
(If you want the full script I iterated on: drop me a comment. But it’s more fun to leave as an exercise to the reader.)
š§® Limits, Memory, and āHow Big Before It Breaks?ā
Yes, my Red Team colleague will love this paragraph ā and no, Iām not going to hand over a checklist for breaking things.
Short answer: GRUB doesnāt advertise a single fixed limit for GRUB_INIT_TUNE
length.
Longer answer, responsibly phrased:
- Numeric limits: per note pitch/duration ⤠65535 (
uint16_t
). - Tempo: can go up to
uint32_t
. - Parser & memory: the tune is tokenized at boot, so parsing buffers and allocators impose practical limits.
Expect a few kilobytes to be safe; hundreds of kilobytes is where things get flaky. - Usability: if your tune is measured in minutes, youāve already lost. Donāt be that.
If you want to test where the parser chokes, do it in a disposable VM, never on production hardware.
If youāre feeling brave, you can even audit the GRUB source for buffer sizes in your specific version. š§©
āļø How to Make It Sing
Edit /etc/default/grub
and add a line like this:
GRUB_INIT_TUNE="480 440 1 494 1 523 1 587 1 659 3"
Then rebuild your config:
sudo update-grub
Reboot, and bask in the glory of your new startup sound.
Your BIOS will literally play you in. š¶
š” Final Thoughts
GRUB_INIT_TUNE
is the operating-system equivalent of a ringtone for your toaster:
ridiculously low fidelity, disproportionately satisfying,
and a perfect tiny place to inject personality into an otherwise beige boot.
Use it for a smile, not for sabotage.
And just when I thought Iād been all clever reverse-engineering GRUB beeps myselfā¦
I discovered that someone already built a web-based GRUB tune tester!
š https://breadmaker.github.io/grub-tune-tester/
Yes, you can compose and preview tunes right in your browser ā
no need to sacrifice your system to the gods of early boot audio.
Itās surprisingly slick.
Even better, thereās a small but lively community posting their GRUB masterpieces on Reddit and other forums.
From Mario theme beeps to Doom startup riffs, thereās something both geeky and glorious about it.
Youāll find everything from tasteful minimalist dings to full-on āsomeone please stop themā anthems. š®š¶
Boot loud, boot proud ā but please boot considerate. šš»š»