BPI-M2-Zero Armbian_22.11.0 连接WiFi的方法,使用wpa_cli,wpa_supplicant,可创建自动连接

发布时间 2023-06-05 15:57:34作者: wind-stormger

image

wpa_supplicant 工具包含wpa_supplicant和wpa_cli这2个程序,其中wpa_supplicant程序作为服务端在后台运行,服务wpa_cli客户端的请求,从而实现WiFi的配置连接。

使用 wpa_supplicant

要运行wpa_cli就必须先运行wpa_supplicant,wpa_supplicant作为wpa_cli的服务端,必须先启动,才能给wpa_cli访问使用。使用命令:

wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B
//-D nl80211 : 表示驱动类型名称为nl80211
//-i wlan0:表示网络接口名称为wlan0
// -c /etc/wpa_supplicant/wpa_supplicant.conf :
// 配置文件wpa_supplicant.conf的路径,
// BPI-M2-Zero Armbian_22.11.0 中的路径为此。
//-B:表示将守护进程wpa_supplicant 挂到后台运行

使用 wpa_cli

启动wpa_cli应用

$ wpa_cli -i wlan0 scan             // 搜索附近wifi网络
$ wpa_cli -i wlan0 scan_result      // 打印搜索wifi网络结果
$ wpa_cli -i wlan0 list_network     // 列出已有网络连接id
$ wpa_cli -i wlan0 add_network      // 添加一个网络连接,会返回一个id编号

如果要连接加密方式是[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS] (wpa加密),wifi名称是name,wifi密码是:psk,网络连接id 为 0,添加多个会递增。

$ wpa_cli -i wlan0 set_network 0 ssid '"name"'
$ wpa_cli -i wlan0 set_network 0 psk '"psk"'
$ wpa_cli -i wlan0 select_network 0
$ wpa_cli -i wlan0 enable_network 0

如果要连接加密方式是[WEP][ESS] (wep加密),wifi名称是name,wifi密码是psk。

$ wpa_cli -i wlan0 set_network 0 ssid '"name"'
$ wpa_cli -i wlan0 set_network 0 key_mgmt NONE
$ wpa_cli -i wlan0 set_network 0 wep_key0 '"psk"'
$ wpa_cli -i wlan0 select_network 0
$ wpa_cli -i wlan0 enable_network 0

如果要连接加密方式是[ESS] (无加密),wifi名称是name。

$ wpa_cli -i wlan0 set_network 0 ssid '"name"'
$ wpa_cli -i wlan0 set_network 0 key_mgmt NONE
$ wpa_cli -i wlan0 select_network 0
$ wpa_cli -i wlan0 enable_network 0

分配ip/netmask/gateway/dns

$ udhcpc -i wlan0 -q

如果遇到command not found,补充安装一个必要的,用于分配ip/netmask/gateway/dns的工具 udhcpc.

sudo apt update
sudo apt install udhcpc

如果遇到:

Warning: /etc/resolv.conf is not a symbolic link to /run/resolvconf/resolv.conf`

这样做:

// 比较这两个文件
$ cat /run/resolvconf/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
# 127.0.0.53 is the systemd-resolved stub resolver.
# run "systemd-resolve --status" to see details about the actual nameservers.

nameserver 192.168.223.150
nameserver 127.0.0.53

$ cat /etc/resolv.conf
// /etc/resolv.conf 很可能没有/run/resolvconf/resolv.conf的内容,删除它然后再次ln
$ sudo rm /etc/resolv.conf
$ sudo ln -s /run/resolvconf/resolv.conf /etc/resolv.conf

$ udhcpc -i wlan0 -q
udhcpc: started, v1.30.1
udhcpc: sending discover
udhcpc: sending select for 192.168.223.189
udhcpc: lease of 192.168.223.189 obtained, lease time 3599

执行完毕,就可以连接网络了。

// 验证
$ ifconfig
$ ping baidu.com
$ ping google.com
// 保存连接
$ wpa_cli -i wlan0 save_config
// 断开连接
$ wpa_cli -i wlan0 disable_network 0
// 连接已有的连接
$ wpa_cli -i wlan0 list_network             // 列举所有保存的连接
$ wpa_cli -i wlan0 select_network 0         // 连接第1个保存的连接
$ wpa_cli -i wlan0 enable_network 0         // 使能第1个保存的连接
// 断开wifi
$ ifconfig wlan0 down
$ killall udhcpc
$ killall wpa_supplicant

编辑 保存WiFi的方法

ip link set wlan0 up
iw dev wlan0 scan | grep SSID

vim /etc/wpa_supplicant/wpa_supplicant.conf
network={    
ssid="ssid"    
psk="password"    
priority=1 
}

wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B
dhclient wlan0

编辑一次后就可以在断电或复位后自动连接。