USB機器がスリープを阻害することがあります

スリープするとすぐに目覚めてしまうマシンがありました。ずっと諦めていたのですがようやく原因がわかりました。5インチベイに取り付けたUSBハブでした。取り外したら正しくスリープし続けるようになりました。

スリープからすぐに目覚める

こちらで紹介したコンピュータ(ASUSのZ390チップセットマザーボードを使用)が、ここのところずっと、スリープからすぐに目覚めてしまう問題を抱えていました。一旦はスリープに入るのですが、2~3秒で目覚めてしまいます。

上の記事を書いた時点では、ケースに入れない状態で仮組をして動かしていたのですが、その時は正しくスリープしていました。ケースに入れて、本格的に使用し始めたら、スリープからすぐに目覚める現象が発生しました。pmset -gなどで目覚める原因を調べると、色々なデーモンがスリープを解除したと表示されて、またiCloudやDropboxの同期がずっと動いて、ドライブへのアクセスが続いていたので、環境構築過程の一時的な状況だと思っていました。

でもよく思い出してみたら、このマザボの先代のMSIのマザーボードでも同様にスリープから目覚める問題がありました。6年くらい前から引きずっていた問題でした。MSIマザーボードでは、BIOSメニューからOSからスリープ復帰しないという設定をして、電源ボタンでスリープ復帰していました。新しいASUSのBIOSでは同様な設定項目が見つからなくて、回避できません。そこで本格的に原因究明することにしました。

目覚めのきっかけ

スリープから目覚める原因には色々なものがあります。電源遮断するのではなくスリープすることの目的は、すぐに目覚めて動作再開することです。ですから、いろんなきっかけで目覚める事自体は正しい動作と言えます。

目覚めのきっかけは、大きく分けて2通りに分類できると思います。一つはOSのデーモンが引き起こす目覚めです。Power Napなどは代表的なものです。iCloud関連の同期や、Spot Lightの索引作成作業もスリープを妨げるようです。実際の仕組みは、RTCを目覚まし時計のように使って、デーモンが一定時間間隔で動作しているものと思われます。もう一つは入出力関係の信号変化です。キーボードを押すとスリープ復帰しますが、これはUSBに信号が来ることがきっかけです。他にも、ネットワーク, SATA, ディスプレイなどからの信号でスリープ復帰することもあります。

目覚める原因を調べる

macOSで設定する

目覚めの原因になりそうな要素を取り除いていくことで、原因究明できると考えました。

まずは「システム環境設定」の「省エネルギー」で、「ネットワークアクセスによるスリープ解除」「Power Napを有効にする」のチェックを外します。また、「Bluetooth」の「詳細設定…」で、「Bluetoothデバイスでコンピュータのスリープ解除を可能にする」のチェックも外します。これで、一般ユーザ向けのmacOS設定でできることをやり尽くしたはずです。でもスリープからすぐに復帰する問題は解決しませんでした。

ネットワークは問題なし

不本意なスリープ復帰は、ネットワークがらみで発生することも多いようです。そこで、まずはLANケーブルを取り外し、WiFiをoffにしました。これでネットワークからの働きかけで目覚める事はなくなると思いました。でも、スリープからすぐに復帰してしまいました。

USBとBluetoothを調べる

次に、バックパネルのUSBケーブルを全部外しました。これでもすぐに復帰します。Apple純正Magic Trackpad/KeyboardをBluetooth接続しているのですが、BTもoffにしてみました。その代わりに前回ご紹介した非Bluetooth接続の無線キーボードを取り付けました。それでもすぐに復帰します。OSでBTをoffにするのでは生ぬるいのかもしれないと考えて、BTアダプタが接続されているUSBポートをoffにしました。本当はケースの蓋を開けてコネクタを外すのが確実だったのですが、面倒だったので、まずはUSBInjectAll.kextの機能を使いました。config.plistのブートオプションに、以下を追加しました。BTはHS13に接続しているからです。これで13番目のUSB 2.0ポートが無効になります。するとスリープし続けるようになりました!

uia_exclude=HS13

どうもHS13に接続されている何かが問題のようです。ここには純正BTアダプタのBroadcom BCM94360CDが接続されています。macOSと高い互換性のあるアダプタでOOBで動くはずのものです。ここでようやく、ケースの蓋を開けてBCM94369CDのUSB接続を外しました。そしてuia_excludeの設定を削除してもと通りに戻しました。なんとスリープからすぐに復帰する現象が再発するようになりました。ということで、HS13が原因であるものの、これに接続したBTモジュールの問題ではなかったようです。

原因は5インチベイI/Oパネル

実は、ASUSのこのマザーボードでは、HS13はマザーボード内部のUSBハブに接続され4本に分岐します。これらはマザーボード上の4個のUSB 2.0ピンに接続されています。取扱説明書の図を以下に引用します。USB_E12とUSB_E34が、HS13から分岐したUSB 2.0ピンです。

そのうち1個 (ISB_E34のうちの1つ) がBTアダプタに接続されていて、今はそれを外したところです。残りのUSB 2.0ピンのうち、2個 (USB_E12) は、実は5インチベイに取り付けたUSBハブ+SDカードリーダーに接続していました。もう販売中止になっているこの製品です。これを買ったのがちょうど6年前でした。スリープが解除される現象が発生した頃です。

この5インチベイパネルには、USB 3.1 gen1ポートとUSB 2.0ポートがぞれぞれ4個あります。またUSB 3.1 gen1接続のSDカードリーダが搭載されています。このうちのUSB 2.0ポートをHS13 (USB_E12) に接続していました。そこで、マザーボードからこの5インチベイパネルへの接続を外してみました。するとスリープからすぐに復帰してしまう現象は治まりました。5インチベイアダプタの中にあるUSB 2.0ハブが、スリープ直後になんらかの信号(ノイズ?)を出して、スリープを妨げているようです。USB 3.1の接続には問題ないようなので、USB 3.1ポートとSDカードリーダは引き続き使用できます。でもUSB 2.0のポートは諦めました。

まとめ

スリープからすぐに目覚めてしまう原因はUSBハブでした。pmsetコマンドやDSDTファイルを駆使して高度な技術で解決するのだと意気込んでいたのですが、あっけない結末でした。USB機器は、スリープ設定でトラブルの原因になりがちな気がします。以前にも、USBスピーカーが原因でスリープしないことがありました。スリープ開始でUSBスピーカへの供給電源が遮断されることで、USB信号線に何らかの信号(ノイズ?)が出るようで、これが引き金でスリープを妨げていました。その時は、外部電源からUSB電力を供給し続けるタイプのUSBハブを調達して、これを介して接続したところスリープするようになりました。何らかの入力によってスリープが復帰される状況自体は、ソフトウェアとしては正しい動作です。なので、機器を取り外して様子を見るという単純なアプローチが有効なようです。

4件のコメント

  1. asrock h370m ですが seep=rebootになっていることに気がつきました。放っておくとスリープしてくれたのですが、option sleep=reboot にはまいりました。
    そこで、hdmi から急遽 dviケーブルに交換したところ見事寝付くようになりました。
    貴殿のおかげです。
    と思ったら、今度はusbのスピーカー増設した所、寝付かなくなってしまったのです。急遽、これを外し、
    ちゃんと寝付くようになってくれました。
    貴殿のおかげです。ありがとうございました。

  2. お役に立って何よりです。記事にも書きましたが、USBスピーカで目覚めることの原因として、電源供給が途絶えている可能性があります。USBテスターで電圧を調べて、必要ならばBIOS設定やセルフパワー方式(ACアダプター付)のUSBハブを経由して、電圧が途切れないようにすると良いかもです。

  3. 初めまして、お父さん3号と申します。 日頃より、このサイトを参考にさせていただいております。
    Big Surがリリースされたのを機に、このサイトを参考にMy hackintoshにクリーンインストールいたしました。
    何度か苦戦したものの、今は普通に稼働しております、1点、Sleep問題以外は。
    まさにこの記事と同じ状況でして、Sleepに入って1,2秒後にCPUファンが回り始めて醒めてしまいます。
    調べてみたところ内部USBに接続されているBTアダプタだということがわかりました。 アダプタを外してみたら、普通にSleep状態を維持するようになったからです。
    Catalinaの時も同様の状態でしたが、なぜかWhateverGreen.kextを最新ではない古めバージョンにすると上述のSleep問題がなくなりました。 ですのでWhateverGreen.kextはアップデートせず使っておりました。
    今回、Big SurにしてSleep問題が再発、さて、どのように対処したものかと考え込んでおります。
    Catalinaでうまくいっていたので何か案があるのだと思いますが、んー、どうしたものでしょう?
    何か参考になる案がありましたらご教授願いたいと思っております。
    ちなみにPC構成は、
    MB : Asrock Z370M Pro4
    CPU : Core i5-8400 2.8GHz
    BT : BCM943602CS
    SSD : Samsung SSD 970 EVO Plus 500GB

    1. 確かに、システムが変わるとスリープの調子が悪くなったり、後のアップデートで知らないうちに快調になったりするのはよく経験します。スリープをなんとか実現してやろうと楽しく試行錯誤できる気分のときは挑戦してみて、めんどくさい時は、いっそ諦めるというのも手かなとは思ってます

返信を残す

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