目次
launchd で動かしている夜間処理が想定より早く止まっていて、原因を追ったら自動シャットダウンのスケジュールが残っていた、ということがありました。GUI の「省エネルギー」設定では見えない項目もあるので、CLI から扱える pmset のよく使うサブコマンドをまとめておきます。
pmset で扱える設定
pmset は macOS の電源管理を CLI から触るためのコマンドです[1]。主にできるのは次の3つです。
- 現在の設定値・スケジュール・アサーションを表示する(参照系)
- スリープ・ディスプレイスリープ・ディスクスリープなどのタイマーを変更する(変更系)
- 起動・停止・スリープ・復帰のスケジュールを登録する(スケジュール系)
変更系・スケジュール系は基本的に sudo が要ります。参照系は不要です。
現在の状態を見る(-g)
-g は get の意味で、現在の状態を引っ張ってきます。1つの -g に渡す引数は1つだけです。
システム全体の設定を見る
引数なしで叩くと、現在有効な設定が一覧で出てきます。
$ pmset -g
System-wide power settings:
Currently in use:
standby 1
Sleep On Power Button 1
hibernatemode 3
ttyskeepawake 1
displaysleep 10
disksleep 10
sleep 30
ノート機の場合は AC 電源接続中とバッテリー駆動中で値が違うので、pmset -g custom を叩くと両方の設定を並べて表示できます。
スケジュールされた電源イベントを見る
pmset -g sched で、登録されている起動・停止・スリープ・復帰のスケジュールが見えます。
$ pmset -g sched
Scheduled power events:
[0] wakepoweron at 05/21/2026 08:00:00 by user
[1] sleep at 05/22/2026 02:00:00 repeating weekdays
身に覚えのないスケジュールが入っていないか定期的に見ておくと、想定外の停止に気付きやすくなります。
スリープを止めているアサーションを見る
何かがスリープを抑止していて Mac が寝ない、というときは pmset -g assertions で確認できます。caffeinate の動きを覗いたり、特定アプリが裏で抑止していないか確認できる窓口です。
$ pmset -g assertions
Assertion status system-wide:
BackgroundTask 0
PreventUserIdleDisplaySleep 1
PreventUserIdleSystemSleep 1
...
Listed by owning process:
pid 12345(caffeinate): [0x0000000000123456] 00:01:23 PreventUserIdleSystemSleep
Listed by owning process セクションで、どのプロセスが何を抑止しているか PID 付きで見えるので、誰が原因か特定するのが楽です。
設定を変更する
変更は sudo 必須です。値はだいたい分単位で、0 を渡すと「タイマー無効」になります。
スリープタイマーを直接いじる
sudo pmset -a sleep 60
sudo pmset -a displaysleep 15
sudo pmset -a disksleep 10
-a は all、つまり全電源モード(AC・バッテリー・UPS)に同じ値を適用する指定です。電源モードごとに変えたいときは次のフラグを使い分けます。
-b:バッテリー駆動中の設定-c:AC 電源接続中の設定-u:UPS 駆動中の設定
ノート機で「電源につないでいるときはスリープに入らない、バッテリーのときは短めに寝る」のように設定するなら次のようになります。
sudo pmset -c sleep 0
sudo pmset -b sleep 20
よく触るキーワード
displaysleepディスプレイのスリープ(分)disksleepディスクのスリープ(分)sleepシステム全体のスリープ(分)wompWake-on-LAN を有効化(0/1)lidwakeノート機のフタを開けた時に復帰するか(0/1)acwakeAC 電源を接続した時に復帰するか(0/1)
イベントをスケジュールする
pmset schedule で、特定の日時に起動・停止・スリープ・復帰を登録できます。
一回だけのスケジュール
明日の朝 8 時に Mac を起こす例です。
sudo pmset schedule wake "05/21/2026 08:00:00"
日付は MM/DD/YYYY HH:MM:SS の順で、12 時間表記ではなく 24 時間表記です。第1引数で動作(wake / sleep / poweron / poweroff / wakepoweron)を指定します。
繰り返しスケジュール
schedule repeat を使うと曜日指定の繰り返しが登録できます。
sudo pmset repeat wakeorpoweron MTWRF 08:00:00 sleep MTWRF 23:00:00
曜日は M(月)/T(火)/W(水)/R(木)/F(金)/S(土)/U(日)の1文字略号で、続けて並べます。平日だけなら MTWRF です。
登録した繰り返しを全部消したいときは引数なしで cancel を渡します。
sudo pmset repeat cancel
ハマったところ
pmset で書き換えた設定が GUI の省エネルギー設定にすぐ反映されない、ということが何度かありました。設定画面は開きっぱなしだとキャッシュした値を表示し続けるので、確認するときは閉じて開き直すか pmset -g で素直に CLI から確認するのが正解です。
もう一つは「コマンドが受理されたのに反映されない」ケースです。csrutil で SIP(System Integrity Protection)が無効化されていたり、設定プロファイル(MDM 配下の Mac でよくある)で電源管理がロックされていると、pmset の変更が黙って無視されることがあります。pmset -g | grep で実際の値を読み返して確認する癖をつけておくと、原因切り分けが早くなります。
まとめ
pmset は GUI に出てこない項目(womp, acwake, lidwake, スケジュールの履歴など)を含めて電源管理を覗ける窓口でした。普段は GUI でいい場面が多いですが、launchd でジョブを組むときに「スリープに引っ張られて止まらないか」を機械的に確認するなら CLI のほうが速いです。
逆に短時間だけスリープを止めたいだけなら caffeinate の方が向きます。pmset は永続設定とスケジュール、caffeinate はその場限りの抑止、という棲み分けで使い分けると迷いません。
