BPI-M2-Zero Armbian_22.11.0 连接WiFi的方法,使用wpa_cli,wpa_supplicant,可创建自动连接
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
编辑一次后就可以在断电或复位后自动连接。