WiFiモジュールの電源管理(パワーセーブ)をオフにする方法について。 また一時的/恒久的に設定する方法について。

一時的にオフにする

iwコマンドでpower_saveoffをセットすることで、パワーセーブをオフにできる。 例として、WiFiインターフェイスwlan0のパワーセーブをオフにする場合は次のようにする。

パワーセーブをoffにする
$sudo iw wlan0 set power_save off

この設定はpersistentではないので、再起動すると元の設定に戻る。

現在の設定状態を取得する場合は、次のようにする。

iwコマンドでパワーセーブの設定を取得する
パワーセーブがオフの場合
$iw wlan0 get power_save
Power save: off

パワーセーブがオンの場合
$iw wlan0 get power_save
Power save: on

iwconfigコマンドでも、Power Management:の項目で設定状態が確認できる。

iwconfigコマンドでパワーセーブの設定を確認する
$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/に作成する。

/etc/udev/rules.d/90-disable-wifi-powersave.rules
# 特定の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コマンドで作成したルールをテストする
$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コマンドで、デバイスが追加されるときのアクションをトリガーさせ、実際にルールを適用させる。

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オプションなどでフックを利用することができる。 この方法については未検証のため省略。