MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)がスリープから復帰しなくなっった

またまた私のMacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)がスリープから復帰しなくなってしまいました。

電源ボタンを押しても、全く反応がなく、ディスプレイに何も表示されない状態でしたが、電源コードを付け直したり、電源ボタンを押したりしていると、アップルマークが表示され、起動するようになりなりました。

GW明けで、久しぶりに起動させたのでバッテリーが空になってたのかと思い、バッテリー状態を確認してみましたが、30%程度でまだ余裕はあります。
とりあえずNVRAM(PRAM)のリセットとSMSのリセットを行い、次の日、様子をみることにしましたが、次の日の朝も復帰せず、リセットの効果はありませんでした。

NVRAM(PRAM)のSMCのリセット方法は以下です。

[www.exp-cards.net](http://www.exp-cards.net/entry/how-to-reset-nvram-macbookpro2017) [www.exp-cards.net](http://www.exp-cards.net/entry/how-to-rest-smc-macbookpro2017)

前回でもそうだったのですが、スリープ後、短時間後の復帰なら問題ないです。
長時間放置(一晩とか)した後に復帰で問題が発生していて、復帰できなくなります。
復帰ができず、今回は、完全にフリーズ状態になっているようです。
画面は真っ黒でキーを押しても何も反応しません。
しかも、電源ボタンを押してもすぐには反応しなくなってしまいました。

調べてみると、似たようなケースが発生したとの報告を発見しました。

どうも原因はHigh Sierraのバグがあり、セーフスリープからの復帰時に問題があるようです。(私のOSのバーションは10.13.4で、現時点で最新です。)

解決策というか回避策は、セーフスリープを使わず普通のスリープを使うとのことですが、セーフスリープとスリープの違いは何でしょう。

スリープの種類(Mac

Macには以下の3種のスリープがあるようです。

・スリープ
・セーフスリープ
・ディープスリープ

スリープ

「スリープ」は復帰時に、メモリ内のデータのみ利用しますので、常にメモリへ電力を供給しておく必要があります。
つまりバッテリーが空になりメモリへ電力が供給されなくなると、データは消えてしまうんですね。
作成中のドキュメントを保存してなかったりすると、消えてしまいますが、私としては、バッテリー空の状態になるケースってのがほとんどないし、定期的にドキュメントの保存はするので、スリープでも問題ないかなと思ってます。

セーフスリープ

「セーフリープ」は、「スリープ」とほぼ同じですが、メモリだけじゃなく、スリープ時のデータをファイルシステムへも保存するんですね。
だからバッテリーがなくなって、メモリ上のスリープデータが消えてしまっても、ディスク上にも同じデータがあるので、そちらを使い復帰できるというわけです。
というわけで、「スリープ」より高機能ですが、今回バグが出てるのも、このセーフリープでして、このバグを回避するために、セーフリープを使わないようにしました。

ディープスリープ

最後に「ディープスリープ」についてですが、スリープデータをファイルシステムへ書き出し、復帰時もそのデータを利用するスリープです。
ですので、電力消費がほとんどなくなるのですが、復帰時時間がかかります。

スリープの種類の確認方法

デフォルトではセーフスリープが設定されているので、変更した覚えがない人は、セーフスリープが設定されているはずですが、念の為のため確認しましょう。

以下のコマンドで確認できます。

<pre class="code lang-css" data-lang="css" data-unlink="">pmset -g

すると、以下のように表示されるかと思います。

<pre class="code lang-css" data-lang="css" data-unlink="">System-wide power settings:
Currently in use:
standbydelay         10800
standby              1
halfdim              1
hibernatefile        /var/vm/sleepimage
powernap             0
gpuswitch            2
disksleep            10
sleep                1 (sleep prevented by sharingd, coreaudiod)
autopoweroffdelay    28800
hibernatemode        3
autopoweroff         1
ttyskeepawake        1
displaysleep         2
tcpkeepalive         1
acwake               0
lidwake              1

注目すべきは以下の箇所で

<pre class="code lang-css" data-lang="css" data-unlink=""> hibernatemode        3

「3」がデフォルト値である「セーフリープ」を意味します。

つまり、上記の結果では現在は「セーフリープ」が設定されているんですね。

そして、0が「スリープ」、25が「ディープスリープ」を意味します。

今回はセーフリープからスリープへ変更したいので、hibernatemodeの値を0へ設定します。設定コマンドは以下になります。

セールスリープからノーマルスリープへ変更する方法

<pre class="code lang-css" data-lang="css" data-unlink=""> sudo pmset -a hibernatemode 0

上記コマンド起動にはパスワードが必要ですので、入力しましょう。

再度以下のコマンドで0が設定されたか確認しましょう。

<pre class="code lang-css" data-lang="css" data-unlink="">pmset -g
<pre class="code lang-css" data-lang="css" data-unlink="">System-wide power settings:
Currently in use:
standbydelay         10800
standby              1
halfdim              1
hibernatefile        /var/vm/sleepimage
powernap             0
gpuswitch            2
disksleep            10
sleep                1 (sleep prevented by sharingd, coreaudiod)
autopoweroffdelay    28800
<strong>hibernatemode        0</strong>
autopoweroff         1
ttyskeepawake        1
displaysleep         2
tcpkeepalive         1
acwake               0
lidwake              1

0へ変更されてるのを確認し、OSを再起動しましょう。

おわりに

結局のところ、これの不具合が原因ではなかったようで、この方法では解決しませんでした。引き続き問題を調査したいと思います。