ラズパイのオンボードWiFiはパワーマネージメントがonになっていて、一定期間時間が経過するとWiFiがサスペンドに入る。例えばサーバー用途やWiFiアクセスポイント、リピーターなど、ラズパイの利用方法によってはこのパワーマネージメントが厄介となり、これを無効にする必要がある。その設定方法についての手順がこちら。
設定確認
まずは初期設定をiwconfigで確認する。
iwconfig wlan0
wlan0 IEEE 802.11 ESSID:"MYNETWORK"
Mode:Managed Frequency:5.745 GHz Access Point: XX:XX:XX:XX:XX:XX
Bit Rate=175.5 Mb/s Tx-Power=31 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:on
Link Quality=42/70 Signal level=-68 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:2 Invalid misc:0 Missed beacon:0
Power Management: on となっている。
パワーマネージメントを無効に
これを無効にするには、同じiwconfigコマンドを使って設定を変更する。
sudo iwconfig wlan0 power off
wlan0 IEEE 802.11 ESSID:"LunaticSol_A"
Mode:Managed Frequency:5.745 GHz Access Point: 20:C0:47:E9:A5:F8
Bit Rate=234 Mb/s Tx-Power=31 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:off
Link Quality=39/70 Signal level=-71 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:2 Invalid misc:0 Missed beacon:0
Power Management: off となったことがわかる。
スクリプトをサービス化
しかし、この設定はラズパイ再起動後に戻ってしまう。以下のスクリプトをsystemdを使ったサービスにすることで起動ごとにパワーマネージメントを無効にすることが可能。
スクリプトは github から /home/pi/services 以下で git clone すれば良い。
git clone https://github.com/takarocks/rpiwlan0poweroff.git
ここでは手動でセットアップする方法を説明。
1. services/rpiwlan0poweroff ディレクトリを作成し、移動
cd ~
mkdir -p services/rpiwlan0poweroff
cd services/rpiwlan0poweroff
2. wlan0poweroff.sh シェルを services/rpiwlan0poweroff ディレクトリに作成
#!/bin/bash
LOG_FILE="/var/log/wlan0poweroff.log"
echo "Setting wlan0 power management off in 5 sec..." > $LOG_FILE
echo "Current wlan0 power management configuration" >> $LOG_FILE
iwconfig wlan0|grep Power\ Management >> $LOG_FILE
sleep 5
echo "Setting wlan0 power management off..." >> $LOG_FILE
iwconfig wlan0 power off
iwconfig wlan0|grep Power\ Management >> $LOG_FILE
3. wlan0poweroff.sh シェルのパーミッションに実行権限を追加
chmod +x wlan0poweroff.sh
4. wlan0poweroff.service ファイルを作成
[Unit]
Description=wlan0 power management disable service
After=network.target
[Service]
ExecStart=/home/pi/services/rpiwlan0poweroff/wlan0poweroff.sh
[Install]
WantedBy=multi-user.target
5. wlan0poweroff.service を /etc/systemd/system/ にコピー
sudo cp wlan0poweroff.service /etc/systemd/system/
6. サービスを有効に設定
sudo systemctl enable wlan0poweroff.service
まとめ
次回の起動以降、このスクリプトが処理されてRPi内臓のWiFiパワーマネージメントが常にオフになる。常時WiFiを稼働させておく必要があるRPi利用目的の場合は、あれ繋がらない?というような問題を回避してくれるので便利だ。
このサービスの実行を停止してパワーマネージメントをONにしておきたい場合は以下のコマンドでサービスを停止すればいい。
sudo systemctl disable wlan0poweroff.service
リポジトリ
https://github.com/takarocks/