NVRAMリセットをターミナルから

# 前提

概ね問題無いという確認はしたものの、ここに書かれていることを試す場合は**自己責任で**

## 公式のリセット方法

NVRAM リセットについては
[Mac の NVRAM をリセットする方法 - Apple サポート](https://support.apple.com/ja-jp/HT204063)
のように書かれており、こちらでやるのが確実、かつ安全と思われる。

## このページのターゲット

- 再インストールが怖くないぐらい心に余裕がある
- マシンが遠隔地にあるが、 NVRAM リセットしなければならなくて困っている
- コマンドがあるなら使う派

# 確認した環境

- MacBook Pro (Retina, 15-inch, Mid 2014)
- OSX 10.11.2

# そもそも NVRAM とは

前述の Apple サポートのページから引用すると、

>NVRAM には、次のような情報が記憶されます。
・スピーカーの音量
・画面解像度
・選択されている起動ディスク
・最近起きたカーネルパニックの情報 (存在する場合)

と、書かれている。

上記に関連する問題が起きた場合に、とりあえずリセットだよね？というもので、
Kernel Panic 遭遇時にリセットをしたことがある人もいるはず。

頻繁にやると覚えられるけど滅多にやらないので、あれ？何のキーを押しっぱなしで電源ONだっけ？
と、さきほどのページを見る所から始めることになり、意外と面倒だったりする。

# nvram コマンドの使い方

存在を知らなかったが、なんとコマンドがあった...
これを覚えてしまえばわざわざブラウザを起動して検索して〜が不要になる。

さっそくターミナルから使い方を見てみる。

```shell-session
$ man nvram
```

Apple の Man Page はこちら
[nvram(8) Mac OS X Manual Page](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man8/nvram.8.html)

10.9 からあったのね、このコマンド...

EXAMPLES を見ると -s オプションで boot 時にどうするとか指定できるようなので、
そちらも重宝する人がいるのかもしれない。

なお、サクッと Usage を見たい場合は、存在しないオプションを指定すれば良いようなので、

```shell-session
$ nvram -h
nvram: (usage: no such option as -h)
nvram [-x] [-p] [-f filename] [-d name] [-c] name[=value] ...
        -x         use XML format for printing or reading variables
                   (must appear before -p or -f)
        -p         print all firmware variables
        -f         set firmware variables from a text file
        -d         delete the named variable
        -c         delete all variables
        name=value set named variable
        name       print variable
Note that arguments and options are executed in order.
```

と、 -h でも指定しておけば出力される。
-h が将来的に割り当てられると危険かな？と不安を感じたなら --help でも可。

## NVRAM の状態を確認する

-p オプション(XMLが良ければ -xp )付きで実行してみる。

```shell-session
$ nvram -p
BootCampProcessorPstates        %0f%00
SystemAudioVolume       %80
backlight-level %ac%04
bluetoothInternalControllerInfo %89%82%ac%05%00%003%14%80%e6P%16 %bb
prev-lang:kbd   ja:0
SystemAudioVolumeDB     %80
efi-apple-recovery      <array><dict><key>IOMatch</key><dict><key>IOProviderClass</key><string>IOMedia</string><key>IOPropertyMatch</key><dict><key>UUID</key><string>C0554C3A-51F0-4191-9618-2FC1D31C3282</string></dict></dict><key>BLLastBSDName</key><string>disk0s1</string></dict><dict><key>IOEFIDevicePathType</key><string>MediaFilePath</string><key>Path</key><string>\EFI\APPLE\FIRMWARE\MBP112_0138_B16_LOCKED.scap</string></dict></array>%00
efi-boot-device <array><dict><key>IOMatch</key><dict><key>IOProviderClass</key><string>IOMedia</string><key>IOPropertyMatch</key><dict><key>UUID</key><string>XXXXXXXX-NNNN-XXXX-XXXX-XXXXXXXXXXXX</string></dict></dict><key>BLLastBSDName</key><string>disk0s3</string></dict></array>%00
fmm-computer-name       mbp
ALS_Data        %056
Test_ALS_Data   %01%00
efi-boot-device-data    %02%01%0c%00%d0A%03%0a%00%00%00%00%01%01%06%00%04%1c%01%01%06%00%00%00%03%12%0a%00%00%00%00%00%00%00%04%01*%00%03%00%00%008%04%25%1d%00%00%00%00 _%13%00%00%00%00%00%a4B%1b;I %c8O%aa{%db~%8csh%1c%02%02%7f%ff%04%00
bluetoothActiveControllerInfo   %89%82%ac%05%01%00%00%003%14%80%e6P%16 %bb
```

UUID 、マシン名は伏せた(他は伏せなくて大丈夫？)が、似たような出力になるはず。
Apple サポートのページに書かれたように、スピーカーの音量や起動ディスクなどの情報が含まれるようだ。

## 漢リセット

漢なら全部リセット！な人向け。 -c オプションで全てリセットしてしまう。

```shell-session
$ nvram -c
```

実行しても出力は何も出ないが、再起動すれば反映される。
（再起動前後で -p で確認してみると良い）

再起動は Ctrl + Eject でメニューからするなり、そのまま ```sudo shutdown -r now``` を実行するなりで。

## 狙い撃ちリセット

-d オプションで特定の項目のみをリセット。
ここでは、影響の少なそうなスピーカーの音量で説明する。

```shell-session
$ nvram -d SystemAudioVolume
```

これで、スピーカーの音量がリセットされる。
ここでも、やはり再起動が必要。

音量ゼロにしてる人は、再起動したらジャーンって鳴るはず。


# 備考

余談だが、書いてる本人は、 Kernel Panic 頻発に悩まされた時に NVRAM リセットしたが、
結局、OSクリーンインストールしなければ直らなかった...

NVRAM リセットは SMC リセットとセットでやることが多いと思うので、
そちらをコマンドで出来る方法をご存知なら是非コメントを！