Kubuntu::サスペンドから勝手に復帰してしまう件

事象

Kubuntuであれこれ作業したのち、サスペンド状態にしておいたのですが、どういうわけか勝手に復帰していて、バッテリーが残りわずかになっていました。

環境

類例を探す

多分、このあたりでしょうか。

askubuntu.com

自分の環境で設定を確認してみます。

$ cat /proc/acpi/wakeup | grep enable
XHC       S3    *enabled  pci:0000:00:14.0

現状、XHC(USB 3.0)の設定が、唯一*enabledとなってるので、サスペンドからの復帰の原因としては有力です。

対処

XHCの設定を永続的に*disabledに切り替える仕組みがあれば良さそうです。 今回は、Unitを書いて自動起動する方法で実現してみます。

設定の切り替え方法を確認

まず、/proc/acpi/wakeupのXHCの設定を一時的に切り替える方法の確認です。

切り替えたいDevice名の文字列を/proc/acpi/wakeupに向けてリダイレクトすることで、設定値がトグル方式で切り替わります。

# echo XHC > /proc/acpi/wakeup

ただし、/proc内の仮想ファイルはプロセス終了時には消えてしまうので、永続化には別の方法が必要となります。

Unitを作成

さて今回は、設定切り替え用のUnitを作成し、自動起動することで設定を永続化していきます。

以下の場所に、Unitファイルを作成します。

$ sudo vim /etc/systemd/system/suspendfix.service

設定した内容は以下の通りです。

[Unit]
Description=fix to prevent system from waking immediately after suspend

[Service]
ExecStart=/bin/sh -c '/bin/echo XHC > /proc/acpi/wakeup'
Type=oneshot
RemainAfterExit=yes

[Install]
WantedBy=graphical.target

Serviceセクションでは、Unitとして実行するサービス内容を指定します。

ExecStartには、先程確認した切り替えコマンドを指定しています。今回のように、ファイルへのリダイレクトを行う場合は、/bin/sh -c 'コマンド > ファイル'とする必要があるのがポイントです*1Type=oneshotは、1度だけ実行するサービスであることを示しています。

さらに、InstallセクションのWantedByでは、自動起動設定を有効化した際に、どのUnitに合わせて起動するかを指定しています。今回はGUIでの利用が前提なので、graphical.targetを指定すると良いでしょう。

Unitの自動起動

作成したUnitの自動起動設定を有効化します。

$ sudo systemctl enable suspendfix.service

これを行うと、/etc/systemd/system/graphical.target.wants/配下にsuspendfix.serviceへのシンボリックリンクが作成され、graphical.targetの起動に合わせて実行されるようになります。

以上で、作業は完了です。

最後に、再起動して設定が切り替わっていることを確認します。

$ cat /proc/acpi/wakeup 
Device  S-state   Status   Sysfs node
RP05      S3    *disabled  pci:0000:00:1c.4
PXSX      S3    *disabled
GLAN      S4    *disabled
XHC       S3    *disabled  pci:0000:00:14.0
XDCI      S4    *disabled
HDAS      S4    *disabled  pci:0000:00:1f.3

大丈夫そうですね。

おわりに

「 "XHC" をリダイレクトで渡す」という点については、以下の記事が勉強になりました。

えっ? 何でリダイレクトなの? - Qiita

しばらくこの設定で様子を見ようと思います。

*1:Debian系では/bin/shはDashへのシンボリックリンクとなっています。Bashに比べて軽量なシェルです。Bashの機能を使う場合はbin/bashを指定します。