経験値カード

健康やフィットネスなど良い習慣を気ままに綴るブログ

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

www.exp-cards.net

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

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

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

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

スリープの種類(Mac

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

 

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

 

スリープ

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

セーフスリープ

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

ディープスリープ

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

 

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

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

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

pmset -g

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

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
 

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

 hibernatemode        3    

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

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

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

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

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

 sudo pmset -a hibernatemode 0    

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

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

pmset -g
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        0
 autopoweroff         1
 ttyskeepawake        1
 displaysleep         2
 tcpkeepalive         1
 acwake               0
 lidwake              1

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

おわりに

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