RaspberrypiのWifi接続に関するあれこれ。
別にファイルに設定を書いとけばよいというけれど。。
RaspberryPiにWifiの設定をします。
でも、そんな記事いくらでもありますよねー。
でも、あんまり深く考えたコト無い人も多いですよねー。きっと。
ということで、一応いろいろやってみました。
wpa_supplicant.confとか書かなくても良いのです
色んな記事をぐぐると、、きまって、、
/etc/wpa_supplicant/wpa_supplicant.conf を記述
なんて書いてあります。
いや、少なくても家で繋ぐときはそんなめんどいことはしたくないし、ルーターにWPSボタンとかあるじゃないですか。
で、、WPSで繋ぐには。
で、、WPSで繋ぐには、、ルーターのWPSを押した後に、
wpa_cli -i wlan0 wps_pbc
って打つだけです。
さぁ、だいたいつながりますよね。
まぁ”wlan0”限定ですが、、ディフォルトだとまぁだいたいこれでしょうから、問題ないかと思います。
もちろん、iwconfigの内容をmatchしてgrepしてとりだせばいいっちゃいいですが。
WPSで繋ぐとどうなるか。
どうなるかって、つながるんですが、それだけではないです。
wpa_supplicant.conf が、書き変わるっていうか、内容が追加
されます
wpa_supplicant.conf に追加される記述
つながるまえ
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
つながったあと
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="Buffalo-G-XXXXX"
psk="xxxxxxxxxxxxx"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
pbss=2
}
network={
ssid="Buffalo-A-XXXXX"
psk="xxxxxxxxxxxxx"
proto=RSN
key_mgmt=WPA-PSK
pairwise=CCMP
auth_alg=OPEN
}
まぁこんな感じです。
では、起動時に実行させればいいかっていうと、、
じゃぁ起動時に実行させればいいかっていうと、、
2回目以降は、 wpa_supplicant.conf に設定が書かれるので、WPSしなくても勝手につながるわけで。
でも、別な場所にいったら繋がらないし、、
じゃぁどうする?
そう、こうすればいいです。
【RaspberryPi起動】➡ 【wlanが繋がってるか調べて】➡ 【つながってなければWPS】➡ 【つながるまでLOOP】
でよいです。
起動時設定は、、起動でそのあと終了する前提なので、serviceではなくて、
rc.local
あたりに記述しましょう。
でも、いくつか気を付けないとダメですよね。
- wlanが繋がっているかどうやって調べるのか?
- 繋がるまでLOOPの場合には、どうやって終了させるのか?
- というか、rc.localで書くなら、バックグラウンド実行だよね(o^^o
まぁこのくらいでしょうか・
wlanがつながっているかどうかの確認
そんなの、ifconfigみれば一目瞭然ですよね。
だって、ifconfig打てば、こんなの返るじゃないですか(o^^o)
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.98.2 netmask 255.255.255.0 broadcast 192.168.98.255
inet6 xxxx::xxxx:xxxx:xxxx:xxxx prefixlen 64 scopeid 0x20<link>
ether xx:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
RX packets 535 bytes 46250 (45.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 365 bytes 69242 (67.6 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 2 bytes 78 (78.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2 bytes 78 (78.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.98.5 netmask 255.255.255.0 broadcast 192.168.98.255
inet6 xxxx::xxxx:xxxx:xxxx:xxxx prefixlen 64 scopeid 0x20<link>
ether xx:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet)
RX packets 91 bytes 7492 (7.3 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 39 bytes 6325 (6.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
だから、これを実行して、この文字列をひろって、あとは文字列処理で検索すれば、
inet~
から始まる文字列をとってくればよいです。
と、書きましたが、その他の方法として、
# wpa_cli -i wlan0 status
って打てば、
bssid=xx:xx:xx:xx:xx:xx
freq=5220
ssid=Buffalo-A-9E98
id=0
mode=station
pairwise_cipher=CCMP
group_cipher=CCMP
key_mgmt=WPA2-PSK
wpa_state=COMPLETED
ip_address=192.168.98.5
p2p_device_address=xx:xx:xx:xx:xx:xx
address=xx:xx:xx:xx:xx:xx
uuid=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
ieee80211ac=1
こんな感じで戻ってきますから、
wpa_statusがCOMPLETEDかどうか調べればそれでいいですね。