MacBookAirにUbuntu14.04 GNU/Linuxをインストールしました(2012年半ば)。 https://askubuntu.com/a/33192 (特定のユースケースは重要ではありません)のように、rtcwake
を使用して「サスペンドからの遅延休止」を実装しようとしています。ここに)。しかし、rtcwake
、発行された例:なので、
Sudo rtcwake --seconds 120 --mode mem
suspend(--mode mem
)を数秒間だけ(--seconds
オプションの内容に関係なく)入力し、すぐに戻ります。このシステムでは、サスペンドと休止状態の両方が正しく機能します。 pm-suspend
またはpm-hibernate
(カーネルのswsusp
を使用)によってトリガーされたとき、またはふたを閉じたとき。マシンは時間を正しく保持し、Ubuntuで表示または更新できます。同じコマンドが、同様のGNU/Linux OSを搭載した別の(Apple以外の)マシンで期待どおりに機能します。
MAC OS Xには、事前設定された時間または事前設定された期間の後にスリープから復帰するこの種の機能があることを私は知っています。ですから、彼らは内部時計にアクセスしていると思います。私の質問は(すべて関連しています):
この即時のウェイクアップをトリガーする、舞台裏で発生するウェイクアップイベントはありますか?上で述べたように、マシンが正しくサスペンドしないため、これが原因である可能性はありません。 (ただし、正しくサスペンドしない場合は、問題のあるモジュールがそのような「通常の」サスペンドの前にSUSPEND_MODULES
フックによって削除されたことが原因である可能性があります。)また、マシンは通常のサスペンドからウェイクアップしません。スケジュールされたrtcwake
がそうすべきだと言ったときに、たとえばふたを閉じることによってトリガーされます。
「隠された」ウェイクアップイベントがない場合、rtcwake
が機能していないように見えるので、この内部クロックを使用して、GNU/Linuxでサスペンドからスケジュールされたウェイクアップをトリガーするにはどうすればよいですか?このクロックRTCは、GNU/Linuxツールからの標準ドライバーモデルウェイクアップフラグをサポートするために互換性がありますか?この結果を達成するための他の方法/回避策はありますか?
私は犯人を突き止めました。 cat /proc/acpi/wakeup
を実行し、*enabled
デバイスを1つずつ無効にします(たとえば、Sudo echo 'DEVABBRV' > /proc/acpi/wakeup
を使用します。ここで、DEVABBRV
はcat
にリストされているデバイスの略語です。上記の出力)、LID0
がマシンを「時期尚早に」ウェイクアップしていることがわかります。
これはおそらく、蓋にある非標準の独自のハードウェアセンサーが原因です。 LID0
のウェイクアップ機能を無効にすると(echo 'LID0' > /proc/acpi/wakeup
を/etc/rc.local
に追加することで永続化できます)、rtcwake
、特にSudo rtcwake --seconds 120 --mode mem
が機能します。予想通り。
ただし、rtcwake
以降、この問題は私の特定のユースケース(スクリプトは https://askubuntu.com/a/33192 )では未解決のままです。そのスクリプトで実行されたときにマシンをウェイクアップしません。