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
编辑一次后就可以在断电或复位后自动连接。