wifiパワーマネジメントを無効にする

ラズベリーパイ3の内蔵wifiを使ってAPを提供しているのですが、どうもパワーマネジメントが有効になっているらしく勝手にお休みして、このままではAPとして役に立たず困ります。というわけでwifiパワーマネジメントをoffにする方法を解説します。


まず、現在wifiインタフェースのパワーマネジメントが有効になっているかどうかは、iwconfigで調べます。次は私のラズベリーパイ3での例です。

pi@RPi-Dev:~$ iwconfig
wlan0     IEEE 802.11bgn  Mode:Master  Tx-Power=31 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on
...

wlan0のPower Managementを見てください。ここがonになっているとパワーマネジメントが有効になっています。普通はこれをiwconfigのオプションでオフにできます。

pi@RPi-Dev:~$ sudo iwconfig wlan0 power off

しかし、ラズベリーパイ3の内蔵wifiでは、このコマンドを実行すると次のエラーメッセージが出てパワーマネジメントを無効に出来ないことがあります。(メッセージが出なくてもパワーマネジメントを無効に出来きてないこともあります)

Error for wireless request "Set Power Management" (8B2C) :
    SET failed on device wlan0 ; Invalid argument.

というわけで色々調べてみたら、iwコマンドを使う方法なら無効にできるとわかりました。

pi@RPi-Dev:~$ sudo iw dev wlan0 set power_save off

これを実行したあとのiwconfigの出力は次のようになりました。

pi@RPi-Dev:~$ iwconfig
wlan0     IEEE 802.11bgn  Mode:Master  Tx-Power=31 dBm
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:off

Power Managementがoffになっていることを確認してください。

さて私のwlan0はAPとして使用しているので、Power Managementは必ずoffになっていて欲しいものです。しかしリセットすると元に戻ってしまうので、確実に毎回実行されるようにしましょう。幾つか方法がありますが、どれも一長一短なので、自分に合った方法を選んでください。

カーネルモードドライバのパラメータで変更する方法

実際にハードウェアのドライバレベルで指定されているパラメータを調べるには次のコマンドを使います。8192cuはRealtekのwifiチップで、私のラズベリーパイ3のものです。

cat /sys/module/8192cu/parameters/rtw_power_mgnt

この値が1ならパワーマネジメントを起動時に有効にするように指定されています。これを無効にするには、/etc/modprobe.d/8192cu.confというファイルを作り、次の行を追加してセーブして下さい。

options 8192cu rtw_power_mgnt=0 rtw_enusbss=0

/etc/network/interfaceで指定する方法1

/etc/network/interfaceのアダプタの設定で、wireless-power offを指定すると、パワーマネジメントを無効に出来ます。次がその例です。

allow-hotplug wlan1
iface wlan1 inet dhcp
    wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
    wireless-power off

(この方法が本来のDebian系wifiマネジメントのお勧めなのですが、wireless firmwareとカーネルのバージョンの組合せ次第ではpi3内蔵wifiでは動かないことがあります。その場合は、方法2を試してください。)

/etc/network/interfaceで指定する方法2

iwconfigを使うwireless-power offは使えなくても、iwコマンド自体は動くので、それを実行しましょう。ifaceの設定には、pre-up(インタフェース起動前), post-up(起動後), pre-down(終了前), post-down(終了後)のイベント毎に実行させるコマンドを指定することが出来ます。そこで、wifiインタフェースが起動した後のpost-upイベントでiwコマンドを実行させます。

allow-hotplug wlan0
iface wlan0 inet static
    address 172.24.1.1
    netmask 255.255.255.0
    network 172.24.1.0
    broadcast 172.24.1.255
    post-up /sbin/iw dev wlan0 set power_save off

/etc/rc.localで設定する方法

起動時に実行されるrc.localでコマンドを直に叩くのももちろん有りです。rc.localのexit 0より前の行に次の一行を追加しましょう。

/sbin/iw dev wlan0 set power_save off

コメントを残す