パワーマネジメント入門

以下で紹介されていた記事の抄訳です。ちなみに原題の101というのは入門とか初級という程度の意味です。アメリカの大学で初学年向け授業の科目番号が100番台で、最初に履修すべき科目番号が101であることに由来しているらしいです。

これを読むとdarkwakeの設定は謎です。いろいろ検索すると、0はPower Napをしない、それ以外はするなど、多少分析しているページもありますが、試してみるしかないようです。また、sleepで再起動してしまうとか、sleepから復帰しないような重篤な状態には対処すべきですが、sleepからすぐ目覚めてしまう症状は、ある程度仕方ないような気がしています。


(以下は上記ページの抄訳です)

Hackintoshが動いたら、次にはパワーマネジメントの設定をします。このガイドは、macOSがインストールできていて、安定して使用できていることを前提としています。まずはパワーマネジメントに関連したマシンの状態を説明します。

  • Shutdown: macOSが終了してハードウェアへの電源供給がoffになった状態です。新しいセッションを始めるためには、電源スイッチを押します。
  • Hibernate: macOS はセッションの内容をRAMからディスクに書き込み、RAMの内容を消去します。ハードウェアはスタンバイモードに入ります。キーマの押下またはマウスのクリックで最後にOSを使用した状態に素早く復帰します。セッション内容はディスクに保存した状態へ復帰します。
  • Hybrid: macOS はセッションの内容をRAMからディスクに書き込み一方で、RAMの内容も保持します。ハードウェアはスタンバイモードに入ります。キーマの押下またはマウスのクリックで最後にOSを使用した状態に素早く復帰します。セッション内容はRAMから読み込まれますが、スタンバイ中に電源が途絶えてRAMの情報が消えていた場合はディスクから読み込まれます。
  • Sleep: macOSはセッションのRAMに保持してディスクには書き込みません。ハードウェアはスタンバイモードに入ります。キーマの押下またはマウスのクリックで最後にOSを使用した状態に素早く復帰します。セッション内容はRAMから読み込まれます。スタンバイ中に電源が途絶えてRAMの情報が消えていた場合は、元に復帰できないので、新規に起動します。

以下ではターミナルを使うことになります。高度な電力制御設定をしてくれるGUIツールはありません。また管理者のみが行える設定のために、sudoやsuコマンドも使います。以下の作業で使う一番重要なコマンドは、次のものです。

  • pmset -g assertions – パワー状態を邪魔した原因を簡潔に示します。
  • pmset -g log – logからパワー状態を詳細に示します。

電力管理設定を行う前に、configでdarkwake=0フラグを指定しておく必要があります。ここで=の後にyesやnoをつけては駄目です。0から10までの数字を指定します。そしてシステム環境設定を開いて以下の設定をします。

  • 省エネルギー > ・・・コンピュータを自動スリープさせない > (チェックする)
  • 省エネルギー > 可能な場合はハードディスクをスリープさせる > (チェックする)
  • 省エネルギー > ネットワークアクセスによるスリープ解除 > (チェックを外す)
  • 省エネルギー > Start up automatically after power failure > (チェックを外す)
  • 省エネルギー > Power Nap を有効にする> (チェックを外す)
  • Bluetooth > 詳細設定 > Bluetoothデバイスでコンピュータのスリープ解除を可能にする > (チェックを外す)

スリープした後で、オーディオが動かなくなる場合があります。その時は、最初にAppleALCを試してみます。次にCloverオプションのAFGLowPowerStateを使ってみます。どちらも駄目で、まだCodecCommanderを入れてなければ、これが役立つかもしれません。Darkwakeは後で扱うことにして、ここでは簡単な部分を手がけます。

この記事の最初に示したスリープの状態から、どれを使うかをまずは決めます。もし電源喪失が心配ならば、3を使います。私は安心のために3を使っています。(訳注:デスクトップの場合は0で良いと思います。)

  • hibernatemode=0 – デスクトップのデフォルト。基本的なスリープ(訳注:手元の10.14.6 19G95ではiMac19,1でもデフォルトが3でした。)
  • hibernatemode=3 – ラップトップのデフォルト。ハイブリッドと呼ばれている。
  • hibernatemode=25 – pmsetからのみ設定可能。伝統的なHibernate。

どれを使用するか決めたら、それを指定します。でも、この変更を有効にする電源状況も指定することになります。pmsetコマンドは、いくつかのタイプの電源に対して設定できて、それらは-a, -b, -c, -uで指定します。

  • -a 全ての電源を対象にする
  • -b バッテリー電源を対象にする
  • -c 充電器を対象にする
  • -u UPS電源を対象にする

ラップトップに対しては、-a, -b, -cのいずれかを選びます。デスクトップには-a, -uを選びます。例えば以下のようにします。. 必要ならば、それぞれの電源条件に対して、違う設定をします。デスクトップに対しては、-aまたは-uを指定します。私が使用している設定例は以下です。

pmset -a hibernatemode 3

個人的には、デスクトップには3か25を推薦します(訳注:0でも良いと思います)。ラップトップを使うなら、既に設定してある数値で良いですが、変更もできます。

スリープ時にはセッションが常にRAMに保存されます。これにより素早く復帰できます。そこでdarkwakeの設定が重要になります。darkwakeはPower Napに関係します。Power Napはスリープ中にのみ機能します。そのプロセスは、トラブルを引き起こしやすいです。一連のエラーにより、スリープが機能しなくなり、時にはカーネルパニックを引き起こします。残念ながらdarkwakeで指定する値に関する資料はどこにもありません。他の人たちと同様に、一つづつの値を、正しく動くまで試してみるしかありません。私がみるところでは、多くの人たちはdarkwake=8かdarkwake=9が最良であると言っています。私自身は、darkwake=8を使っています。darkwake=1を使う人も多いです。(訳注:コメントで教えていただきましたが、こちらに参考になりそうな説明があります。また、darkwakeの8と10はCatalinaでは使われなくなったらしいです。)

この記事の最初に示した2つのコマンドで、スリープのデバッグができます。以下は、知っておくべき項目の一部です。

  • Wake from Normal Sleep [CDNVA] due to XDCI XHC/UserActivity Assertion: Using AC (Charge:0%) – これはスリープからの正常な復帰です。私のデスクトップマシンでは、キーボードを押すとスリープから目覚めます。
  • Kernel Idle sleep preventers: <reason> – カーネルがスリープを中断した理由が<reason> 部分で説明されています。Noneであるのが理想です。
  • Wake reason: <reason> – スリープ直後にすぐに電源が復活してしまう場合、この部分を見てください。最も一般的な<reason>は、GLAN (internet)とXHCI (usb)です。

もしXHCIが問題を引き起こしているならば、USB SSDTを作って、不要なハードウェアを除去しておくと良いです。これは重要ですが初心者にはわかりにくいです。SSDTを作ることは、難しそうですがそうではありません。電力設定を正しく行いたいならば、避けては通れません。電力設定以外にも、デバイス接続の問題も解決します。もしコンピュータがGLANによってスリープ復帰しているなら、(訳注:Wake on Lanの)マジックパケット、またはEghernetからの復帰設定を、BIOSで無効にすべきです。これはバニラなインストールガイドにも書かれている項目です。OSの中でも無効にできます。最後にCloverインストーラにも、Ethernetを目覚めさせてしまうSleep Proxy Client (mDNSResponder)を無効にするRCスクリプトがあります。

これで、Power Napを有効にできて、ディスプレイをoffにした時に自動的にコンピュータをスリープにする、スリープの設定ができます。電力設定は以下のコマンドで確認できます。

pmset -g live.

(私が公開するテキスト情報はCC BY-NC-SA 4.0 ライセンスに準拠します。)

4件のコメント

  1. ども、boot macOSさん、

    Catalinaでは、Darkwakeの8と10が使われなくなったような事らしいです。。。

    DarkWake on macOS Catalina | boot args darkwake=8 & darkwake=10 are obsolete
    https://www.insanelymac.com/forum/topic/342002-darkwake-on-macos-catalina-boot-args-darkwake8-darkwake10-are-obsolete/

    Darkwake issues since Catalina
    https://www.insanelymac.com/forum/topic/341367-darkwake-issues-since-catalina/

    Power Management Settings explained:
    displaysleep – display sleep timer; replaces ’dim’ argument in 10.4 (value in minutes, or 0 to disable)
    disksleep – disk spindown timer; replaces ’spindown’ argument in 10.4 (value in minutes, or 0 to disable)
    sleep – system sleep timer (value in minutes, or 0 to disable)
    womp – wake on ethernet magic packet (value = 0/1). Same as “Wake for network access” in the Energy Saver preferences.
    ring – wake on modem ring (value = 0/1)
    powernap – enable/disable Power Nap on supported machines (value = 0/1)
    proximitywake – On supported systems, this option controls system wake from sleep based on proximity of devices using same iCloud id. (value = 0/1)
    autorestart – automatic restart on power loss (value = 0/1)
    lidwake – wake the machine when the laptop lid (or clamshell) is opened (value = 0/1)
    acwake – wake the machine when power source (AC/battery) is changed (value = 0/1)
    lessbright – slightly turn down display brightness when switching to this power source (value = 0/1)
    halfdim – display sleep will use an intermediate half-brightness state between full brightness and fully off (value = 0/1)
    sms – use Sudden Motion Sensor to park disk heads on sudden changes in G force (value = 0/1)
    hibernatemode – change hibernation mode. Please use caution. (value = integer)
    hibernatefile – change hibernation image file location. Image may only be located on the root volume. Please use caution. (value = path)
    ttyskeepawake – prevent idle system sleep when any tty (e.g. remote login session) is ’active’. A tty is ’inactive’ only when its idle time exceeds the system sleep timer. (value = 0/1)
    networkoversleep – this setting affects how OS X networking presents shared network services during system sleep. This setting is not used by all platforms; changing its value is unsupported.
    destroyfvkeyonstandby – Destroy File Vault Key when going to standby mode. By default File vault keys are retained even when system goes to standby. If the keys are destroyed, user will be prompted to enter the password while coming out of standby mode.(value: 1 – Destroy, 0 – Retain)

    このパワーマネジメント説明は詳しいと思います。

  2. こんにちは。Bluetoothカードをマザーボード本体のUSB端子に接続して使用するとスリープしても自動復帰する状態でした。いろいろ調べていた際下記のサイトでUSBポートの制限解除が原因と記載してましたので試しにUSBマップを15個に絞って設定したら正常なスリープ状態になりました。
    同じ悩みを抱えていた方の参考になればと思います。
    https://dortania.github.io/OpenCore-Post-Install/universal/sleep.html#main-culprits

    1. 情報ありがとうございます。USBマップ作成するとスリープにも効果があるのですね。

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です