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かどうか調べればそれでいいですね。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です