状況
RaspberryPiが一定時間たつとWiFiからの接続が途切れてしまいネットワークにつながらなくなってしまう。ルータから確認すると最初は表示されるのだが一定時間たつとルーターから認識されなくなってしまう。
SSH接続ができなくなってしまい、再度SSH接続できるようにするにはネットワークに接続する必要あり。これは不便。
原因
どうやらウェブで調べてみた感じ、パワーマネジメント設定(省力化設定)のせいらしいということが判明しました。
iwconfig wlan0
と入力して
Power Management:on
と表示されればパワーマネジメントはオンになっているので、これが原因の可能性が高いでしょう。
対策①
Power Managementをオフにしてみる
sudo iwconfig wlan0 power off
これで解決!…とはならないのですよね…これ再起動するともとに戻ってしまうみたいです…
この状態でWiFiが途切れなければこの設定を永続化しちゃいましょう。次の章へ…
設定の永続化
pingをcronで打ち続けてネットワークを維持する方法、切れたら再度ネットにつながるようなスクリプトを実行する方法などいろいろあるみたいですが…今回はSystemdに登録し起動時に自動でスクリプトを実行するようにしようと思います。
sudo nano /etc/systemd/system/disable-wlan0-power.service
上のコマンドでサービスファイルを作成します。
[Unit]
Description=Disable power saving on wlan0
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
ExecStart=/sbin/iwconfig wlan0 power off
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
上のファイルを書き込んで、Ctrl+Oで保存してください。
それができたら下のコマンドを一行ずつ順番に実行してください
sudo systemctl daemon-reload
sudo systemctl enable disable-wlan0-power.service
sudo systemctl restart disable-wlan0-power.service
sudo systemctl status disable-wlan0-power.service
順番に実行してエラーが出ずかつActive:actice(exited)になっていれば成功です。
iwconfig wlan0
を叩いて“Power Management:off” になっているかも確認してみてください。
対策②
これでもうまくいかない場合があります。ラズパイはネットワークマネージャー側でパワーセーブを行っているようなので、そちら側の設定にもパワーセーブオフを行っていきましょう。
sudo mkdir -p /etc/NetworkManager/conf.d
sudo tee /etc/NetworkManager/conf.d/10-wifi-powersave.conf > /dev/null << 'EOF'
[connection]
wifi.powersave = 2
EOF
sudo reboot now
最後に
もしこれで動けばそれでいいですが、動かない際はping作戦などもやってみてください。
自分は対策②で動くようになりました
コマンドだけで機能をオフにできない設定がたたあるのですが、このpower management系にはdebianを触っていると多々悩まされます…
参考文献

コメント