スリープに関する知識まとめ

前回、よく眠るMacBookにする過程で得た知識を忘れないようにメモ。

マシン環境

以下のスリープに関する知識は、上記のマシン環境で可能な限り確認した。

  • ところで、スリープの仕様は、機種ごとのパワーマネジメントの仕様に左右される。
  • パワーマネージメントの仕様は、ハードウェアの仕様とも密接に関係している。
  • 例えば、初代MacBookは、Wake on Demand がサポートされていない。
  • また、最新のMacBook Airには、deepsleepdelayなんていう設定項目もある。
  • そのため、以下の知識を試すと、機種によっては書いてあることと違う動作をすることもあるかもしれない。

実際に試す場合は、電源オフされても大丈夫な心構えが必要。

  • 特に、スリープの設定を変更する場合は、要注意!

Wake on Demandとは

  • Wake on Demandとは、有線・無線に関係なく、スリープ中であっても共有サービスにアクセスできる技術。

Wake on Demandを有効にする条件

  • MacBook側と無線LANベースステーション側が対応していること。
    • SnowLeopardリリース以降に発売されたハードウェアなら対応しているはず。(それ以前でも対応している機器は多い)
  • MacBookのシステム環境設定 >> 省エネルギー >> 「ネットワークアクセスによってスリープを解除」チェック入りの状態。
  • ディスプレイを開いた状態でスリープすること。(閉じてはダメ)
  • AC電源アダプタから給電されていること。(バッテリー駆動ではダメ)

つまり、ディスプレイを開いた状態でスリープしておけば、最近のマシンはスリープ中でも共有サービスが利用可能なのだ。

  • 共有サービスとは...
    • iTunesiPhotoのライブラリの共有サービスなど。
    • 画面共有やWebサーバーとしての共有サービスなど。(システム環境設定 >> 共有)

自動スリープ解除(メンテナンスアラーム)

  • Wake on Demandなスリープ中でも、ネットワーク上に存在を通知するため、2時間(正確には1時間47、48分)ごとに自動的にスリープを解除する仕様になっている。
  • 存在を通知したら、速やかに再びスリープするのも仕様だ。(正常に稼働している時のログを見ると、およそ30秒前後で再びスリープしている)

ログ

  • スリープとその解除動作は、kernel.logに記録される。
  • スリープが解除された時は、その理由も記録されている。
例:
Wake reason = RTC	2時間(正確には1時間47、48分)ごとの自動スリープ解除(メンテナンスアラーム)
Wake reason = GIGE	有線LAN経由のネットワークアクセスによってスリープ解除
Wake reason = ARPT 	AirMac経由のネットワークアクセスによってスリープ解除
Wake reason = UHC3	内蔵キーボードからスリープ解除
Wake reason = EC LID0	ディスプレイを開くことでスリープ解除
Wake reason = OHC2	ワイヤレスキーボード(Bluetooth)からスリープ解除
Wake reason = EHC2	USBマウスを接続してスリープ解除

スリープの種類

Sleep、Safe Sleep、Deep Sleepの3種類

メモリの状態 ハードディスクに保存
Sleep 維持する(電力を消費する) しない
Safe Sleep 維持する(電力を消費する) する
Deep Sleep 破棄する(電源オフ) する
Sleep
  • メモリの状態を維持するので、素早いスリープ動作が実現される。
  • しかし、維持するための電力は必要になる。電力が不足すればメモリの内容は破棄され、作業状態は消滅する。
    • スリープ、復帰とも3秒で完了する。
    • スリープ中もバッテリーが消耗する。
    • スリープ中にバッテリーが切れると、それまでの状態は破棄される。
Safe Sleep
  • SleepとDeep Sleepの良いとこ取り。
    • スリープに数十秒、復帰は3秒で完了する。
    • スリープ中もバッテリーが消耗する。
    • スリープ中にバッテリーが切れても、ハードディスクに保存された状態から復元される。
Deep Sleep
  • メモリの状態をハードディスクに保存するので、電源をオフにして、消費電力はほぼ0にできる。
  • しかし、ハードディスクの読み書きに時間がかかるので、スリープとその解除にも時間がかかる。
    • スリープに数十秒、復帰にも数十秒かかる。
    • スリープ中は電源オフするので、バッテリーの消耗はほとんどない。

pmsetコマンド

  • パワーマネージメントの状態を確認する
$ pmset -g
Active Profiles:
Battery Power		-1
AC Power		-1*
Currently in use:
 lidwake	1  #ディスプレイを開いた時にスリープを解除する1・しない0
 autorestart	0  #停電後に自動的に起動する1・しない0
 halfdim	1  #ディスプレイがスリープ状態になる前に輝度を下げる1・下げない0
 sms		1  #緊急モーションセンサーを有効にする1・しない0
 hibernatefile	/var/vm/sleepimage #メモリ内容を保存しておく場所
 disksleep	10 #ハードディスクをスリープさせる までの時間
 sleep		5  #コンピュータをスリープさせる までの時間
 hibernatemode	0  #0=Sleep、3=Safe Sleep、25=Deep Sleep
 ttyskeepawake	1  #リモートログインしている最中はスリープしない1・する0
 displaysleep	3  #ディスプレイをスリープさせる までの時間
 acwake		0  #電源が変更されたらスリープを解除する1・しない0
 womp		1  #ネットワークアクセスによってスリープを解除する1・しない0
  • マニュアルによると...
    • デスクトップは、Sleepが工場出荷状態。(hibernatemode 0)
    • ノートブックは、Safe Sleepが工場出荷状態。(hibernatemode 3)
  • 省エネルギー設定では、スリープの種類を選択できないが、pmsetコマンドを使えば変更できる。
sudo pmset -a hibernatemode 0   # Sleep
sudo pmset -a hibernatemode 3   # Safe Sleep
sudo pmset -a hibernatemode 25  # Deep Sleep
  • ディスプレイを開いてもスリープを解除しない設定(キー操作すれば解除される)
sudo pmset -a lidwake 0
  • ちなみに -a -b -c -u オプションの違い。
pmset -b lidwake 0  #バッテリー利用の時、ディスプレイを開いてもスリープを解除しない
pmset -c lidwake 0  #電源アダプタ利用の時、ディスプレイを開いてもスリープを解除しない
pmset -u lidwake 0  #UPS利用の時、ディスプレイを開いてもスリープを解除しない
pmset -a lidwake 0  #すべての状況で、ディスプレイを開いてもスリープを解除しない
  • スリープさせる。
pmset sleepnow
  • 自動スリープさせない。
    • 実行中は、省エネルギー環境設定で設定した時間が経過しても、スリープしない。
    • control-Cで終了させる。(あるいは、killコマンドで終了させる)
pmset noidle

設定ファイル

省エネルギー環境設定・pmsetコマンドでの設定は、以下のplistファイルに保存される。

  • パワーマネジメントの状態
    • /Library/Preferences/SystemConfiguration/com.apple.PowerManagement.plist
  • 起動・終了・スリープのスケジュール
    • /Library/Preferences/SystemConfiguration/com.apple.AutoWake.plist

AppleScript

  • どんな時でも、必ずスリープする書き方。


--確実なスリープ 1例
do shell script "pmset sleepnow"

  • 但し、以下のInsomniaXが有効な時は、エラーになる。
  • ディスプレイがスリープ中だと、以下の書き方ではスリープしない。


--NGなスリープ 3例
tell application "Finder" to sleep
tell application "System Events" to sleep
tell application "loginwindow" to «event aevtslep»

  • ちなみに、電源オフする場合と、再起動する場合


--電源オフ 3例
tell application "Finder" to shut down
tell application "System Events" to shut down
tell application "loginwindow" to «event aevtshut»
--再起動 3例
tell application "Finder" to restart
tell application "System Events" to restart
tell application "loginwindow" to «event aevtrest»

便利なアプリケーション

PleaseSleep
  • 省エネルギー環境設定のとおり忠実に、自動スリープを実現してくれる。(優秀!)
  • それでも自動スリープしてくれない状態に陥った時は、PleaseSleepを一旦無効にして、再び有効にすれば自動スリープが復活した。
InsomniaX

insomniaとは不眠症の意。

  • ディスプレイを閉じてもスリープしないようにする。


↓↓↓↓ここから

NoSleep
  • こちらもディスプレイを閉じてもスリープしないようにするツール。
  • システム環境設定とメニューバー アイコンから有効・無効を設定できる。


InsomniaXとNoSleepの違い

  • InsomniaXは、OSX標準のスリープを完全に無効にしてしまうのに対し、
    • メニューやショートカット・電源ボタン・pmsetコマンド・AppleScriptによるスリープ操作すべてが無効になる。
    • 唯一スリープさせる手段は、InsomniaXのアイコンメニューから Sleep System を実行するのみ。(AppleRemoteでもスリープできるかも)
  • NoSleepは、モニタを閉じた時のスリープ動作のみ、無効にする。
    • モニタを閉じた後は、省エネルギー環境設定で設定した時間が経過すると、自動スリープする。
    • メニューやショートカット・電源ボタン・pmsetコマンド・AppleScriptによるスリープ操作が可能。

↑↑↑↑ここまで

Caffeine
  • 一時的に自動スリープを無効にする。
    • 無効にしておく時間を設定できる。
    • ディスプレイを閉じるとスリープしてしまう。

クラムシェルモード

    • 外部ディスプレイを接続して、
    • キーボードやマウスを接続して、
    • 電源アダプタで給電しておけば、
  • ディスプレイを閉じてもスリープしない運用が可能。Mac miniのように使える。

消費電力

消費電力
電源オフ0.25w
スリープ1w
ディスプレイ消灯5.1w
ディスプレイ点灯10.5w

  • MacBookのバッテリーは、およそ 12V × 5A = 60W なので単純計算すると...
    • 電源オフでも10日間でバッテリー容量0になる。(60÷0.25=240)
    • スリープでも2.5日間でバッテリー容量0になる。(60÷1=60)
    • 普通に使って5、6時間でバッテリー容量0になる。(60÷10.5=5.7)

ショートカット

  • 電源ボタンの代わりになる、キーボードからの操作。
  • ディスプレイのみ消灯は、電源ボタンでは実現できない操作。
    • システム環境設定 >> セキュリティ で「スリープ後、パスワードを要求する」設定にしておけば、
    • ディスプレイのみ消灯の操作で、パスワードロック状態になる。(便利かもしれない)

動作
command-option-ejectスリープ
command-control-eject再起動
command-option-control-ejectシステム終了
control-ejectシステム終了ダイアログを表示(=電源ボタン)
control-shift-ejectディスプレイのみ消灯