仙豆のレシピ

ちょっとしたことでも書いていく姿勢で

Thinkpad X1 Carbon Gen6にUbuntu入れたらスリープ時にバッテリー食いまくる問題の対処、簡易版

Thinkpad X1 CarbonにUbuntuを入れて使っていて、先日マシンがGen1からGen6になった。ディスプレイが良くなってたりして満足度は高いが、スリープ時の消費電力がすさまじくスリープで充電が一晩持たないという問題が発生していた。

環境はThinkpad X1 Carbon Gen6にUbuntu 16.04(今回の問題は18.04でも発生するらしいけど、それはともかく早く検証して18に上げよう…)




ググると、この問題は既知であったらしく解決方法が出てきた。

Lenovo ThinkPad X1 Carbon (Gen 6) - ArchWiki

Thinkpad X1 Carbon 第6世代+Ubuntu18.04でスリープが正常に動作しない問題の解決手順

どうやらACPIで定義されているS3というモードがGen6からサポートされなくなったことが問題らしい。(arch wikiは神)

解決策としてはまずACPI DSDTテーブルにパッチをあてるという方法が示されている。

しかし、個人的には手順が煩雑ですべてを理解するのは大変だし、理解しないまま手順を実行して問題が発生したときに対処できないのはつらい。

というわけで挙げられていたこれ以外の方法を試してみた。

ひとつはbiosのThunderbolt BIOS Assist ModeをEnabledにするというもの。

もうひとつはGen6がS3のサポートを切ってあらたにサポートを始めたS0i3というモードをOS側で有効にするという方法。(という理解で合ってるかな)

Re: X1 Carbon Gen 6 cannot enter deep sleep (S3 state aka Suspend-to-RAM) on Linux - Page 9 - Lenovo Community

ここにあるように/etc/default/grubGRUB_CMDLINE_LINUX_DEFAULTにacpi.ec_no_wakeup=1を追加した。
(これによって蓋を開けただけではスリープから復帰しなくなる。ので# echo enabled > /sys/devices/platform/i8042/serio0/power/wakeup した。これによりキー入力でスリープから復帰するようになる)


これらによって、以下のようになった。
19時~翌10時までスリープしたときの残充電量の変化

対策なし 100% -> 0%
BIOS設定変更 100% -> 23%
BIOS設定変更+S0i3有効 100% -> 92%

正確に測ったわけでもなく試行回数も多くないが、体感的にはこれで十分感ある。

ただ、ひとつ別の問題があって、
Bug #1733557 “Login screen showing Authentication Failure Switch...” : Bugs : unity package : Ubuntu
で報告されているようにスリープ復帰時に「Authentication Failure Switch to greeter...」と出てしまうというのが発生しており、これが一連の問題と関連している気がしなくもない。(DSDTテーブルにパッチをあてる方の対策ならこれが直るという保証もないが)