MacBook Pro (13-inch, 2017, Two Thunderbolt 3 ports)がスリープから復帰しなくなっった
- 11 May, 2018
またまた私の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を再起動しましょう。
おわりに
結局のところ、これの不具合が原因ではなかったようで、この方法では解決しませんでした。引き続き問題を調査したいと思います。