背景
Ubuntu16.04あたりから電源周りの挙動が変わったためか、ThinkPad S1 YOGAを閉じると、一度はスリープ(サスペンド)するものの、すぐに起動するようになりました。時間をかけて調べつつ試行錯誤したら解決方法が分かったので、備忘録を兼ねて共有します。
使ったもの
- ThinkPad S1 YOGA
- Ubuntu18.04
すぐに起動してしまう対策: acpi/wakeupをLID0以外をdisabledにする
下記のページを見つけました。サスペンドができない
このページ(とページ内で紹介されているArchWiki)によると、/proc/acpi/wakeupのLID0以外をdisableにすればよいということでした。
acpi/wakeupの内容は、ファイルとして開いたり、catコマンドで表示すると確認できます。
cat /proc/acpi/wakeup
自分の環境では、acpi/wakeupはこのようになっていました。
Device S-state Status Sysfs node P0P1 S4 *disabled XHC S3 *enabled pci:0000:00:14.0 HDEF S4 *disabled pci:0000:00:1b.0 RP01 S4 *disabled pci:0000:00:1c.0 PXSX S4 *disabled RP03 S4 *disabled pci:0000:00:1c.2 PXSX S5 *disabled pci:0000:04:00.0 PXSX S4 *disabled pci:0000:05:00.0 *disabled platform:rtsx_pci_sdmmc.0 *disabled platform:rtsx_pci_ms.0 PEG0 S4 *disabled PEGP S4 *disabled PEG1 S4 *disabled PEG2 S4 *disabled LID0 S4 *enabled platform:PNP0C0D:00
LID0以外にXHCがenabledになっているので、下記のコマンドでXHCの設定を切り替えました。
sudo sh -c "echo XHC > /proc/acpi/wakeup"
LID0以外をdisabledにした状態でPCのモニタを閉じると、見事起動しないままスリープしてくれました!
スリープ状態になると、モニタの裏にあるロゴのLEDが時々ぼんやり明るくなるという光り方になります。
しかしながら、コマンドで設定を変更したacpi/wakeupは、再起動すると元の値に戻ってしまいます。
acpi/wakeupの設定変更を起動時に行うために、configure-acpi-wakeupというサービスを作ります。
まず、下記のようなファイルを作成します。
/etc/systemd/system/configure-acpi-wakeup.service
[Unit] Type=oneshot
Description=configure-acpi-service [Service] ExecStart=/bin/bash -c "echo XHC > /proc/acpi/wakeup" [Install] WantedBy=multi-user.target
ファイルができたら下記のコマンドでサービスを開始し、有効化します。
sudo systemctl daemon-reload sudo systemctl start configure-acpi-wakeup.service sudo systemctl enable configure-acpi-wakeup.service
これにより、再起動するたびacpi/wakeupが書き換わり、期待する状態になってくれるようになりました。
スリープから復帰後にタッチパッドの複数指操作ができない対策: blacklist i2c_i801をコメントアウト
Ubuntuの不具合として報告されていました。psmouse: after sleep/suspend thinkpad touchpad not functional
/etc/modprobe.d/blacklist.conf の blacklist i2c_i801をコメントアウト(行の始まりに#を追加)してPCを再起動すると、スリープから復帰してもタッチパッドが変わらず使えるようになりました。
具体的にはこのようにしました。
/etc/modprobe.d/blacklist.conf
# blacklist i2c_i801
調べたけれど分からなかったこと: スリープ中でもUSBから5Vが供給されたままになる
さて、スリープできない問題とタッチパッドの問題が解決したので、とりあえずはスリープ可能なPCを利用できます。しかしながら、スリープしてもUSBから電気が供給されたままになっていて、USB機器を何か繋いでいると、スリープしてるけどUSB機器は動いて電気を消費するという状態になります。
これを解決しようと調べてはみたのですが、どうもLinuxのUSBの電源モードは、以前はsuspendが設定できていたものの、今はonかautoしか設定できないようで、電源供給を止めるモードというのが存在しないようでした。
Disable USB power for USB controlled power strip
PCがスリープしたらUSBも電源供給を停止する機能をご存知でしたら、コメントなどで共有していただけると嬉しいです。
まとめ
UbuntuをインストールしたPCを使わない時に気軽に画面を閉じてスリープさせられるようになりました。スリープできなかったときと比べてPCをバッグに入れて移動する前後の時間が短くなり、とても便利になりました。(2015年あたりはできてた。)
同じような問題で困っている人にこの情報が届けば嬉しいです。
0 件のコメント :
コメントを投稿