Linux でノートパソコンのフタを開いた時にスリープから復帰しないようにする
ノートパソコンをスリープにしたつもりで数時間持ち歩いて、次に開いた時は本体が激熱、バッテリーが残り5%みたいな事象、たまによくあって非常に厄介ですよね。
あれはなにかのきっかけで勝手にスリープから戻ってしまっていて、バッテリーが残り5%になった時に電源管理がまたスリープにしてくれてる、という感じだと思っていたので、電源ボタンを押したとき以外は一切スリープから戻らないようにします。
acpid とかが必要かもしれない。それと Arch Linux / KDE な ThinkPad X240 でしか検証してない。
だいたい使えそうな方法
/proc/acpi/wakeup
を見てみると
Device S-state Status Sysfs node
LID S4 *enabled
SLPB S3 *enabled
IGBE S4 *enabled pci:0000:00:19.0
EXP2 S4 *disabled pci:0000:00:1c.1
XHCI S3 *enabled pci:0000:00:14.0
EHC1 S3 *enabled pci:0000:00:1d.0
こんな感じのイカニモなリストが出てくる。今回の目的は LID ただそれだけ、なのでそれを書き換えてやる。
書き換えかたは root で
echo LID > /proc/acpi/wakeup
ってやってあげると LID の Status がトグルされる。実行結果は
Device S-state Status Sysfs node
LID S4 *disabled
SLPB S3 *disabled
IGBE S4 *disabled pci:0000:00:19.0
EXP2 S4 *disabled pci:0000:00:1c.1
XHCI S3 *disabled pci:0000:00:14.0
EHC1 S3 *enabled pci:0000:00:1d.0
なぜか LID 以外もほとんど disabled になってしまった。理由は分からん。
多分これでうまく行くはず。
XHCI / EHCI は USB まわりの何かだった気がするけど、SLP8, IGBE, EXP2 は見たことも聞いたこともないのでご存知の方教えてください……。
あなたが systemd を溺愛している場合に使えそうな方法
systemd はなんでもできるからね。この方法に関しては GNOME とか KDE みたいなマシマシWMを使ってる場合はそいつらが systemd の電源管理を "inhibit" して、無効にしてるらしい、ので使えないらしい。
Power Management - ArchWiki に2行ぐらい書いてる。
/etc/systemd/logind.conf
の中で
HandleLidSwitch=ignore
にして、systemd-logind を restart するだけ。自分の環境では効かなかった。
下の方に LidSwitchIgnoreInhibited
がコメントアウトされていたが、こちらも特に効果はなかった。