Raspberry Piで無線LANアダプタを使っていて、しばらく放置するとSSHの入力の反応が悪くなったり、下手するとネットワークへの接続が切断されたりすることがあります。
対処法は無線LANアダプタの設定を変更することです。それでいつでも素早くアクセスできるようになります。
Raspberry Pi向けの無線LANのUSBアダプタの購入や基本的な設定は、Raspberry Piに無線LANのUSBアダプタをつけるを参考にしてみてください。
パワーマネジメント機能をOFFにする
Raspberry Piで無線LANの反応が悪い原因は、無線LANのUSBアダプタのパワーマネジメント機能がONになっているためです。
パワーマネジメント機能がONになっていると、しばらくアクセスがないと、電気を節約するために省エネモードになります。この省エネモードがSSHの入力を鈍らせたり、悪い時にはネットワークへの接続を切断したりしたりします。
そもそも無線LANのUSBアダプタ程度の電気なんかたかが知れているので、パワーマネジメント機能をOFFにしてしまいましょう。
パワーマネジメント機能の切り方1: iwconfig wlan0 power off?
パワーマネジメント機能をOFFにする方法はいくつかありますが、そのうちの一つが下記のコマンドです。
iwconfig wlan0 power off
使っている無線LANのUSBアダプタによっては上記のコマンドでパワーマネジメント機能をOFFにできるそうですが、私が使ってるUSBアダプタは下記のエラーを出すだけでした。
Error for wireless request "Set Power Management" (8B2C) : SET failed on device wlan0 ; Operation not permitted.
パワーマネジメント機能の切り方2: /etc/network/interfaces
切り方1と同じ結果になるのですが、interfacesでパワーマネジメント機能をOFFにすることができるかもしれません。
sudo vim /etc/network/interfaces wireless-power off //保存して終了 sudo /etc/init.d/networking restart
私が使ってるUSBアダプタは前回と同じエラーを出るだけでした。
パワーマネジメント機能の切り方3: 8192cu.conf (推奨)
参考: Dropouts with USB WiFi (802.11b/g/n) Module: For Raspberry Pi
この方法が正解でした。
sudo vim /etc/modprobe.d/8192cu.conf # Disable power saving options 8192cu rtw_power_mgnt=0 rtw_enusbss=1 rtw_ips_mode=1 //保存して終了 sudo reboot
これでほとんどストレスなしでいつでも素早くアクセスできるようになります。
おまけ: iwconfigとPower Managementは嘘をつく?
無線LANのUSBアダプタのパワーマネジメント機能がONになっているかOFFになっているかを調べるにはiwconfigを使います。
iwconfig wlan0 IEEE 802.11bgn ESSID:"HOGEHOGE-HOGE-H" Nickname:"<HOGE@HOGETEK>" Mode:Managed Frequency:2.412 GHz Access Point: 00:2B:1C:HO:GE:GE Bit Rate:150 Mb/s Sensitivity:0/0 Retry:off RTS thr:off Fragment thr:off Power Management:off Link Quality=99/100 Signal level=71/100 Noise level=0/100 Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0 Tx excessive retries:0 Invalid misc:0 Missed beacon:0 lo no wireless extensions. eth0 no wireless extensions.
Power Management:off
になっているからパワーマネジメント機能はOFFになっているはず!
とか思っていると間違いです。無線LANのUSBアダプタによってはPower Management:offとか言っておいて、実際はONになっている場合があります。というか、私が持っているアダプタがそうです。
原因は知りませんが、おそらく私の持っているアダプタが省エネに特化したアダプタだから、内部でごにょごにょやっているのかなと思います。とりあえず、切り方3の8192cu.confを使うことで、パワーマネジメント機能は実質的にOFFになるっぽいんで、それを使いましょう。
追加の方法:ServerAliveIntervalを1以上にする
切り方3をやることで無線LANの反応はよくなると思いますが、それでもSSHのセッションが切れる場合は、ServerAliveIntervalを1以上にしてみましょう。
ServerAliveIntervalを1以上に設定することで、何もしないときでもSSH上で定期的にアクセスしてくれるので、セッションが切れたりアクセスが鈍るということはなくなると思います。
Windowsの場合
Puttyjp.exeを起動
カテゴリ → 接続
Keepaliveの間隔 10
Macの場合
sudo vim /etc/sshd_config ServerAliveInterval 10
サーバー側(Raspberry Pi)で設定する場合
sudo vim /etc/ssh/sshd_config ClientAliveInterval 10
ちなみに私が使っている無線LANのUSBアダプタ
PLANEX 無線LAN子機 (USBアダプター型) 11n/g/b 150Mbps GW-USNANO2A
パワーマネジメント機能を完全にOFFにしてしばらく使っていると無線LANのUSBアダプタがほんのり温かくなりました。私が使っているPLANEXのアダプタは問題なさそうですが、消費電力が高いアダプタの場合、パワーマネジメント機能をOFFにすると結構熱くなるかもしれません。
おかげさまで問題が解決しました。ありがとうございました!