Self-starting Macs, startup chimes, and other secrets of NVRAM

Until the launch of the MacBook Pro in the autumn of 2016, every Mac had chimed when it started up. The rather tinny sound emitted by early models, through their small built-in speakers, had evolved into a sonorous chord, often heard through a hefty audio system.

Then came the 2016 MacBook Pros, which needed to have a setting changed before they gained a voice, and now the 2017 iMacs, which are forever mute.

Two tricks discovered by Dan at could customise the MacBook Pro to emit a startup chime, and stop it from starting up whenever you opened its case. Both involve changing settings in non-volatile RAM (NVRAM) – and that is what this article is about.

NVRAM was originally much smaller, and called Parameter RAM (PRAM). It contains a few settings which are used from early on during the startup process, so cannot be read from disk. Among its most enduring have been audio volume settings; as Mac hardware has become progressively more complex, new settings have been added, which determine the time allowed for a wireless keyboard to connect during startup, for example, and set whether a MacBook Pro should chime on startup.

NVRAM varies between models, and can change with firmware updates. All Macs which are upgraded to High Sierra undergo firmware update as part of the upgrade, to add another variable to their NVRAM. This stores the third-party kernel extension (KEXT) policy setting, which has only been introduced with High Sierra.

If your NVRAM settings get messed up, you will need to reset the NVRAM to ‘factory’ defaults, a process detailed here. Before you try altering any settings in your NVRAM, ensure that you know how to reset it, in case you cause a problem.

You can inspect the current data stored in your Mac’s NVRAM using the Terminal command
nvram -p or nvram -xp
which simply displays a list of variable names, and their current values. I give two different sets of options, as Macs will display one in XML format, and the other may be less intelligible; models vary as to how they behave, so you may need to try both.

The NVRAM in my iMac17,1 contains settings for the following variables:

  • EFIBluetoothDelay – time allowed for a wireless keyboard to connect during startup
  • SystemAudioVolume – set this to %01 in other Macs to silence their startup chime
  • SystemAudioVolumeDB
  • backlight-level
  • bluetoothActiveControllerInfo
  • bluetoothInternalControllerInfo
  • prev-lang:kbd
  • fmm-computer-name
  • efi-apple-recovery
  • efi-boot-device
  • efi-boot-device-data
  • aht-results – details of the last run of Apple Hardware Test
  • display-config
  • LocationServicesEnabled.

The 2016 MacBook Pro adds at least two more:

  • BootAudio – a boolean indicating whether the startup chime is to be played
  • AutoBoot – an integer determining boot behaviour when opening the case.

You can alter the value of any variable in NVRAM using the nvram command in Terminal; for most if not all variables this requires that you assume root privileges using the sudo command, so you are best prefacing each command with sudo. Thus, the command
sudo nvram BootAudio=%01
sets that variable to true, and enables the startup chime on an otherwise mute 2016 MacBook Pro. Turn it off again with
sudo nvram BootAudio=%00
However, this doesn’t work with 2017 iMacs, which seem to have lost the startup chime for good.

The AutoBoot variable, which determines whether a 2016 MacBook Pro starts up automatically when its case is opened, is not a simple boolean value. To turn AutoBoot off, use the command
sudo nvram AutoBoot=%00
but to return it to the default behaviour, use
sudo nvram AutoBoot=%03

The % sign indicates that the next two characters are given in hexadecimal, which is the default format; if you are really smart, you can use XML format with the -x option to nvram, but that gets more complex. If you’re changing a variable which normally contains a string, you should use a command of the form
sudo nvram fmm-computer-name="Howard%e2%80%99s iMac"

Once your Mac has started up, it keeps NVRAM settings in memory. They are automatically written out to the NVRAM when you clean restart or shut down, and resetting them puts them back to their defaults.

One significant effect of resetting the NVRAM of a Mac running High Sierra is that it resets the variable recording third-party KEXT policy. If you are not using the default for that Mac, that will mean that you will have to restore your custom policy after resetting the NVRAM.