Something was Missing
The very first Apple laptop I’ve ever owned was the 2015 Macbook Air. This machine was great as a student and it provided me with everything I needed at the time. There were times when I would need to reboot the system, especially after a major update and I would be greeted by the startup chime. This is no longer present in the new Macbook lineup beyond 2016 (touchbar era).
This quick hack/fix can be found here by 9to5mac.
By saving you time, here’s the tl;dr. Open up terminal and enter the following:
sudo nvram StartupMute=%00
Assuming your audio isn’t muted, you’ll be once again greeted by the startup chime after your machine has been rebooted.
After the discovery of this command, there were no clear answers of how this came about. I initially began to investigate this by visiting the man page.
nvram(8) nvram(8) NAME nvram - manipulate firmware NVRAM variables SYNOPSIS nvram [ -p ] [ -f filename ] [ -d name ] [ -c ] [ name [= value ]] ... DESCRIPTION The nvram command allows manipulation of firmware NVRAM variables. It can be used to get or set a variable. It can also be used to print all of the variables or set a list of variables from a file. Changes to NVRAM variables are only saved by clean restart or shutdown. In principle, name can be any string. In practice, not all strings will be accepted. New World machines can create new variables as desired. Some variables require administrator privilege to get or set. The given value must match the data type required for name. Binary data can be set using the %xx notation, where xx is the hex value of the byte. The type for new variables is always binary data. OPTIONS -d name Deletes the named firmware variable. -f filename Set firmware variables from a text file. The file must be a list of "name value" statements. The first space on each line is taken to be the separa- tor between "name" and "value". If the last character of a line is \, the value extends to the next line. -x Use XML format for reading and writing variables. This option must be used before the -p or -f options, since arguments are processed in order. -c Delete all of the firmware variables. -p Print all of the firmware variables. EXAMPLES example% nvram boot-args="-s rd=*hd:10" Set the boot-args variable to "-s rd=*hd:10". This would specify single user mode with the root device in hard drive partition 10. example% nvram my-variable="String One%00String Two%00%00" Create a new variable, my-variable, containing a list of two C-strings that is ter- minated by a NUL. example% nvram -d my-variable Deletes the variable named my-variable. October 28, 2003 nvram(8)
As you can see, the man page was created a long time ago, 17 years from this post. This is the 8th section and there doesn’t seem to be other sections for the
nvram command. The options that displayed the firmware variables only displayed variables currently in use by the EFI firmware.
This is what is displayed when I ran
sudo nvram -p.
bluetoothInternalControllerInfo %bluetooth%controller%info) fmm-computer-name MacBook Pro bluetoothActiveControllerInfo %active%bluetooth%controller%info) backlight-level D%01 gpu-policy %01 StartupMute %00 <-- THIS IS WHAT I RECENTLY ADDED TO ENABLE THE CHIME HW_BOOT_DATA %01%00%00%00%01%00%some%foobar%0000%00
StartupMute used to be enabled in older versions of MacOS and was promptly extracted or hidden from the system and someone decided to re-enable it out of curiosity which fortunately still works in Catalina. I also assume most critical NVRAM variables are closed-source and are hidden away by Apple.