WiFiモジュールの電源管理(パワーセーブ)をオフにする方法について。 また一時的/恒久的に設定する方法について。
- 検証および動作確認に使用したデバイス・OS
- Raspberry Pi 5 / Ubuntu 24.04 LTS
- Raspberry Pi 3 Model B+ / Ubuntu Server 22.04 LTS
- Raspberry Pi Zero 2 W / Ubuntu Server 24.04 LTS
一時的にオフにする
iwコマンドでpower_saveにoffをセットすることで、パワーセーブをオフにできる。 例として、WiFiインターフェイスwlan0のパワーセーブをオフにする場合は次のようにする。
$sudo iw wlan0 set power_save off
この設定はpersistentではないので、再起動すると元の設定に戻る。
現在の設定状態を取得する場合は、次のようにする。
パワーセーブがオフの場合 $iw wlan0 get power_save Power save: off パワーセーブがオンの場合 $iw wlan0 get power_save Power save: on
iwconfigコマンドでも、Power Management:の項目で設定状態が確認できる。
$iwconfig wlan0
wlan0 IEEE 802.11 ESSID:"<WiFi-AP>"
Mode:Managed Frequency:5.24 GHz Access Point: XX:XX:XX:XX:XX:XX
Bit Rate=390 Mb/s Tx-Power=31 dBm
Retry short limit:7 RTS thr:off Fragment thr:off
Power Management:off
Link Quality=60/70 Signal level=-50 dBm
Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0
Tx excessive retries:0 Invalid misc:0 Missed beacon:0
常にオフにする
起動するたび、あるいはネットワークインターフェイスが有効になるたびに、パワーセーブをオフに設定する方法について。
Netplanの場合
ネットワーク設定をNetplanで管理している場合について。
Ubuntu 24.04 LTS時点でのNetplanでは、設定ファイルにネットワーク・インターフェースが有効になったときにコマンドを実行させるためのフックを記述することができない。 ここではその代わりとしてudevを使用する場合を考える。
udevルールでコマンドをトリガーする
udevルールファイルを作成して、ネットワークデバイスが作成(ACTION=="add")されたときにiwコマンドを実行させるようにする。 以下のudevルールファイルを/etc/udev/rules.d/に作成する。
# 特定のMACアドレスを持つwlanデバイスのみをoffにする場合
ACTION=="add", SUBSYSTEM=="net", ENV{DEVTYPE}=="wlan", ATTR{address}=="XX:XX:XX:XX:XX:XX", RUN+="/usr/sbin/iw dev $name set power_save off"
# すべてのwlanデバイスをoffにする場合
ACTION=="add", SUBSYSTEM=="net", ENV{DEVTYPE}=="wlan", RUN+="/usr/sbin/iw dev $name set power_save off"
# 上記のRUN+=について、コマンド実行時に$nameの部分が実際に追加されたネットワークデバイスの名前(wlan0など)に展開される
udevadm testコマンドを使って作成したルールが実際に動作するかテストする。 WiFiインターフェイス名がwlan0の場合は、テスト対象として引数に/sys/class/net/wlan0を指定する。
$udevadm test /sys/class/net/wlan0
This program is for debugging only, it does not run any program
specified by a RUN key. It may show incorrect results, because
some values may be different, or not available at a simulation run.
:
:
Reading rules file: /etc/udev/rules.d/90-disable-wifi-powersave.rules
:
:
wlan0: /etc/udev/rules.d/90-disable-wifi-powersave.rules:2 RUN '/usr/sbin/iw dev $name set power_save off'
:
:
run: '/usr/sbin/iw dev wlan0 set power_save off'
:
:
上記のようにルールファイルの読み込み(Reading rules file)と、コマンドの実行(run:)が行われていることを確認する。
udevadm triggerコマンドで、デバイスが追加されるときのアクションをトリガーさせ、実際にルールを適用させる。
sudo udevadm trigger -v -c add /sys/class/net/wlan0
問題なく動作すれば、トリガーした後にpower_saveがoffとなっている。 また、再起動も同様にルールが適用され、パワーセーブがオフとなるはず。
$iw wlan0 get power_save
Power save: off
その他の方法
netplan以外の場合
/etc/network/interfacesなどでネットワーク設定を行っている場合は、upオプションなどでフックを利用することができる。 この方法については未検証のため省略。