Posted at

wpa_supplicantが原因でubuntuでスリープができないときの対処法

More than 1 year has passed since last update.


対象者

ubuntuの16や18でwifiに繋いだ状態でスリープをしようとしてsystemctl suspendしたり、普通にサスペンドをGUIで選択したときに数十秒たって結局画面が再起動してスリープできないよーっていう症状です。

原因はいろいろ考えられますが、ここではjournalctlというコマンドでシステムのログをみて、Failed to start Suspendや、Dependency failed for Suspend.というエラーログを見つけ、そしてそのエラーメッセージの近くで以下のようなwpa_supplicant由来のエラーを見つけた方向けに記事を書いています。

 5月 23 19:11:51 nkowne63 kernel: Freezing of tasks failed after 20.007 seconds (11 tasks refusing to freeze, wq_busy=0):

5月 23 19:11:51 nkowne63 kernel: wpa_supplicant D 0 1089 1 0x00000004
5月 23 19:11:51 nkowne63 kernel: Call Trace:
5月 23 19:11:51 nkowne63 kernel: __schedule+0x297/0x8b0
5月 23 19:11:51 nkowne63 kernel: schedule+0x2c/0x80
5月 23 19:11:51 nkowne63 kernel: schedule_timeout+0x15d/0x350
5月 23 19:11:51 nkowne63 kernel: ? __next_timer_interrupt+0xe0/0xe0
5月 23 19:11:51 nkowne63 kernel: msleep+0x2d/0x40
5月 23 19:11:51 nkowne63 kernel: ath10k_pci_hif_stop+0x63/0xc0 [ath10k_pci]
5月 23 19:11:51 nkowne63 kernel: ath10k_core_stop+0x4b/0x70 [ath10k_core]
5月 23 19:11:51 nkowne63 kernel: ath10k_halt+0x10c/0x170 [ath10k_core]
5月 23 19:11:51 nkowne63 kernel: ath10k_stop+0x39/0x80 [ath10k_core]
5月 23 19:11:51 nkowne63 kernel: drv_stop+0x39/0x100 [mac80211]
5月 23 19:11:51 nkowne63 kernel: ieee80211_stop_device+0x43/0x50 [mac80211]
...


どういうことか

ざっくり解説するとubuntuではスリープするときにsystemdを用いて、systemd-suspend.serviceなどの複数ファイルに従っていろいろなサービスを終了、もしくはスリープしていたりします。systemd-suspend.serviceについて詳しくはここをご覧ください。

wpa_supplicantはwifi接続を司っているようで、これが死ぬとサスペンドから復帰したときにnetwork-managerが起動せずネットに有線ですら繋がらなくなる。ひどいときにはsudoすらできなくなるということが起きます。


対処法

※以下の対処法は2018年5月24日時点での情報です。実行の際には手順をよく理解して、自己責任で行ってください。

wpa_supplicantが死んでいるので、そいつをどうにかすればいいわけなのですが、apt-getなどで入れようとしても「最新版です」だとか「見つかりません」だとか出てくるので、そして何より最新版で、かつパッチを当てなければバグは解決しないので自分でビルドする必要があります。

ということで、linux from scratchのページに従って最新版のビルドとインストールを行ってください。僕の場合、ubuntu16,18いづれもこの解決策で直すことができました。

ビルドとインストールといっても、基本的にはそのページに従うだけで数分で行けてしまいます。ただ、必要なライブラリが足りずにビルドに失敗することがありますので、その際はそのライブラリをなんとかしてインストールしてください。

では、快適なubuntuライフを。