スリープに関する知識まとめ
前回、よく眠るMacBookにする過程で得た知識を忘れないようにメモ。
マシン環境
以下のスリープに関する知識は、上記のマシン環境で可能な限り確認した。
- ところで、スリープの仕様は、機種ごとのパワーマネジメントの仕様に左右される。
- パワーマネージメントの仕様は、ハードウェアの仕様とも密接に関係している。
- 例えば、初代MacBookは、Wake on Demand がサポートされていない。
- また、最新のMacBook Airには、deepsleepdelayなんていう設定項目もある。
- そのため、以下の知識を試すと、機種によっては書いてあることと違う動作をすることもあるかもしれない。
実際に試す場合は、電源オフされても大丈夫な心構えが必要。
- 特に、スリープの設定を変更する場合は、要注意!
Wake on Demandとは
- Wake on Demandとは、有線・無線に関係なく、スリープ中であっても共有サービスにアクセスできる技術。
Wake on Demandを有効にする条件
- MacBook側と無線LANのベースステーション側が対応していること。
- SnowLeopardリリース以降に発売されたハードウェアなら対応しているはず。(それ以前でも対応している機器は多い)
- MacBookのシステム環境設定 >> 省エネルギー >> 「ネットワークアクセスによってスリープを解除」チェック入りの状態。
- ディスプレイを開いた状態でスリープすること。(閉じてはダメ)
- AC電源アダプタから給電されていること。(バッテリー駆動ではダメ)
つまり、ディスプレイを開いた状態でスリープしておけば、最近のマシンはスリープ中でも共有サービスが利用可能なのだ。
自動スリープ解除(メンテナンスアラーム)
- 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
- man pmset によると、hibernatemodeは上記の値が推奨らしい。
- しかし、非推奨ながらその他の値も設定できるようだ。
- 例:hibernatemode 1 でもDeep Sleepが機能しているみたい。
- 【コラム】OS X ハッキング! (179) "pmset"でMacBookを「冷凍睡眠」させる | パソコン | マイコミジャーナル
- ディスプレイを開いてもスリープを解除しない設定(キー操作すれば解除される)
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コマンドのマニュアル
設定ファイル
省エネルギー環境設定・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とは不眠症の意。
- ディスプレイを閉じてもスリープしないようにする。
- 最新の64ビットマシン アップデートを適用しないと、正常に稼働しないかもしれない。(自分のMacBookがそうだった)
- Insomnia updated for 64bit machines!
- 通常、ディスプレイを閉じてしまうと、Wake on Demandは無効になる。(スリープ中にアクセスできない)
- ところが、InsomniaXを利用すれば、ディスプレイを閉じた状態でのWake on Demandな運用が可能になる。
- InsomniaXのメニューからスリープを指定すれば、ちゃんとスリープもするのだ。
- モニタを閉じてスリープ中のMacBookをリモート操作できる環境にする - ザリガニが見ていた...。
↓↓↓↓ここから
NoSleep
- こちらもディスプレイを閉じてもスリープしないようにするツール。
- システム環境設定とメニューバー アイコンから有効・無効を設定できる。
InsomniaXとNoSleepの違い
- InsomniaXは、OSX標準のスリープを完全に無効にしてしまうのに対し、
- メニューやショートカット・電源ボタン・pmsetコマンド・AppleScriptによるスリープ操作すべてが無効になる。
- 唯一スリープさせる手段は、InsomniaXのアイコンメニューから Sleep System を実行するのみ。(AppleRemoteでもスリープできるかも)
- NoSleepは、モニタを閉じた時のスリープ動作のみ、無効にする。
- モニタを閉じた後は、省エネルギー環境設定で設定した時間が経過すると、自動スリープする。
- メニューやショートカット・電源ボタン・pmsetコマンド・AppleScriptによるスリープ操作が可能。
↑↑↑↑ここまで
Caffeine
- 一時的に自動スリープを無効にする。
- 無効にしておく時間を設定できる。
- ディスプレイを閉じるとスリープしてしまう。
消費電力
消費電力 | |
---|---|
電源オフ | 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 | ディスプレイのみ消灯 |