ここ数年、Macをスリープモードにした状態でも、異常に排熱してバッテリーを喰ってしまい、3〜4時間後に開いた時にはバッテリー残量が0。というケースが頻発していました。
詳しく調べるのも面倒で諦めてしまい、1時間以上も移動する予定がある時には、Macをシャットダウンするという対策をしていましたが、いい加減それも面倒に思い、そろそろもう少し向き合って解決させようと調べて実行したことをまとめます。
ネットで調べたところ、「pmset」というコマンドでMacの省電力の設定をいくつか変更できるようなので、これを使ってみることにしました。
この記事の目次
pmsetについて
ひとまずpmsetコマンドの説明を見ます。$ man pmset
pmset manages power management settings such as idle sleep timing, wake on administrative access, automatic restart on power loss, etc.
(直訳)pmset は、アイドルスリープタイミング、管理者アクセス時のウェイク、電源断時の自動再起動などの電源管理設定を管理する。
現在のpmsetの設定確認
pmset -g
をターミナルで実行することで、現在の電源管理設定を確認できます。
$ pmset -g System-wide power settings: Currently in use: lidwake 1 lowpowermode 1 standbydelayhigh 86400 proximitywake 0 standby 1 standbydelaylow 10800 ttyskeepawake 1 hibernatemode 3 powernap 0 gpuswitch 2 hibernatefile /var/vm/sleepimage highstandbythreshold 50 displaysleep 2 womp 0 networkoversleep 0 sleep 1 halfdim 1 acwake 0 tcpkeepalive 1 disksleep 10
スリープモード時の異常排熱の話でよく聞く「Power Nap」はすでに無効化されているようでした。
pmsetの各設定項目の説明
各項目の説明を直訳でまとめます。※いくつかmanコマンドで説明が見つからない項目もありました。
項目 | 説明 |
displaysleep | ディスプレイスリープタイマー; 10.4の’dim’引数を置き換える(値は分単位、0を指定すると無効になる) |
disksleep | ディスクスピンダウンタイマー。10.4の’spindown’引数を置き換える(分単位の値、または0を指定すると無効になる)。 |
sleep | システムスリープタイマー (値は分単位、0 で無効化) |
womp | イーサネットマジックパケットでウェイク(値 = 0/1)。システム設定の「Wake for network access」と同じ。 |
ring | モデム着信時にウェイク(値 = 0/1) |
powernap | サポートされているマシンでPower Napを有効/無効にします(値=0/1)。 |
proximitywake | サポートされているシステムでは、このオプションは、同じiCloud IDを使用しているデバイスの近接に基づいてスリープからのシステムのウェイクを制御します。 |
autorestart | 電源が切れたときに自動的に再起動する(値 = 0/1) |
lidwake | ラップトップの蓋(またはクラムシェル)が開いたときにマシンをスリープ解除します。 |
acwake | 電源(AC/バッテリー)が変更されたときにマシンをウェイクアップ(値=0/1) |
lessbright | この電源に切り替えたとき、ディスプレイの輝度を少し下げる(値=0/1) |
halfdim | ディスプレイのスリープ時に、フル輝度とフル消灯の間の中間的な半輝度状態を使用する (値 = 0/1) |
sms | サドン・モーション・センサを使用して、急激なGの変化に対してディスク・ヘッドをパークする(値 = 0/1) |
hibernatemode | ハイバネーションモードを変更します。注意してください。(value = integer) |
hibernatefile | ハイバネーションイメージファイルの場所を変更します。イメージはルートボリュームにのみ配置できます。注意してください。(値 = パス) |
ttyskeepawake | 任意の tty(リモート・ログイン・セッションなど)が「アクティブ」なときに、アイドル状態のシステム・スリープを防止します。ttyが「非アクティブ」になるのは、そのttyのアイドル時間がシステムスリープタイマーシステムスリープタイマーを超えた場合のみ (値 = 0/1) |
networkoversleep | この設定は、システムスリープ中に OS X ネットワークが共有ネットワークサービスをどのように表示するかに影響します。この設定はすべてのプラットフォームで使用されるわけではありません。 値を変更することはサポートされていません。 |
destroyfvkeyonstandby | スタンバイ・モードに移行するときにファイル保管庫キーを破棄します。デフォルトでは、システムがスタンバイ状態に移行してもファイル保管庫キーは保持されます。もし キーが破棄された場合、スタンバイ・モードから復帰する際にパスワードの入力を求められます(値: 1 – 破棄、0 – 保持)。 |
今回の設定と変更方法
以下のような考えの元、後述の設定に変更をしました。
- バッテリー残量にかかわらず、30分異常スリープで放置ならスタンバイモードへ移行させたい。
- リモート・ログイン・セッションがアクティブな時にスリープ阻害する設定があるので、これも切りたい。
- ハイバネーションモードはディープスリープが最も消費電力が低くなりそうな説明だったため、”25″に設定してみる。
- TCPの接続を継続させる設定を無効化。ブラウザを開いたままスリープさせる時に、この設定によって裏側で通信が発生して、スリープの阻害に繋がっているかもしれないと考えました。
- standbydelayhigh 86400 - standbydelaylow 10800 - hibernatemode 3 - ttyskeepawake 1 + standbydelayhigh 1800 + standbydelaylow 1800 + hibernatemode 25 + ttyskeepawake 0
変更する際のコマンドは以下です。
$ sudo pmset -a standbydelayhigh 1800 standbydelaylow 1800 hibernatemode 25 ttyskeepawake 0
もしタイミングがあれば、体感レベルにはなりますが、設定後の感想を追記したいと思います。