GPD WIN Max 2 2023がサスペンド後すぐ復帰しないようにする
GPD WIN Max 2 2023を手に入れたので、ストレージの拡張スロットにFedora Silverblueを入れてみたら利用上ほぼほぼ支障なかった。
ただし、サスペンドは正常に動くものの、勝手に復帰してしまうのでそれを解消した。
同じGPD WIN Max 2所有者の情報がないかなと調べてみた1ら、復帰のACPIイベントを呼んでいるデバイスがありそうなことが分かった。ArchWikiに復帰トリガーに関するページがあったので参考に調べてみると、以下のように幾つかのデバイスで復帰トリガーが有効であることが分かった。2
$ cat /proc/acpi/wakeup
Device S-state Status Sysfs node
GPP1 S4 *enabled pci:0000:00:01.2
GPP0 S4 *disabled
GPP6 S4 *enabled pci:0000:00:02.2
GPP7 S4 *enabled pci:0000:00:02.3
GP11 S4 *disabled
SWUS S4 *disabled
GP12 S4 *enabled pci:0000:00:04.1
SWUS S4 *disabled
XHC0 S4 *enabled pci:0000:65:00.3
XHC1 S4 *enabled pci:0000:65:00.4
XHC2 S3 *disabled pci:0000:67:00.0
XHC3 S3 *enabled pci:0000:67:00.3
XHC4 S3 *enabled pci:0000:67:00.4
NHI0 S4 *disabled
NHI1 S3 *enabled pci:0000:67:00.6
なので復帰トリガーを有効にしているデバイスの復帰トリガーを無効にすればいいんだけど、Fedora Silverblueの場合はOSTreeによる管理上読み取り専用のディレクトリが存在し、 /lib/systemd/system-sleep
配下にフックスクリプトを置く方法をとることができない。
ArchWikiのフックの注記にもあるが、Systemdユニットでも同じタイミングをフックすることができるのでその方針をとろうとした。
これまた似たようなことをしている人がいないか調べた3ら、起動時に一回だけ復帰トリガーを無効にすることで解決していたので、毎回どのデバイスで復帰トリガーが有効になっているか変化しないならこれでもいいかなと思った。
そういうわけで、以下の内容でユニットファイルを用意して /etc/systemd/system/gpd-win-max-2-2023-disable-wakeup.service
に配置した。
[Unit]
Description=Disable Wakeup
[Service]
Type=oneshot
ExecStart=sh -c 'for DEVICE in GPP1 GPP6 GPP7 GP12 XHC0 XHC1 XHC3 XHC4 NHI1; do echo $DEVICE > /proc/acpi/wakeup; done'
[Install]
WantedBy=default.target
その後、 systemctl enable gpd-win-max-2-2023-disable-wakeup.service
を実行して再起動し、サスペンド後勝手に復帰しないことを確認した。
-
https://blog.nhiroki.net/2023/01/07/gpd-win-max-2-ubuntu-22-10 ↩︎
-
実際の出力結果を得るのが面倒くさかったので再現したものであることに注意 ↩︎