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 A4orC4+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/gruband 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. ๐๐ป๐ป