我目前正在编写两个脚本,一个用于连接到wifi网络,另一个用于断开连接。
连接脚本效果很好,但是当我这样做时
sudo ifconfig wlan0 down
sudo ifconfig wlan0 up
即使/ etc / network / interfaces中没有wlan0,接口也会自动重新连接到网络。
但是,如果我重新启动,则wlan0未连接。
这是我感兴趣的人的脚本
#!/bin/bash
SSID="ssid"
PASSWORD="pass"
CONF_FILE="/etc/wpa_supplicant/$SSID.conf"
if [ -f "$CONF_FILE" ]; then
echo "wpa configuration file already exists"
else
echo "wpa configuration file doesn't exists"
#Generating configuration file
sudo wpa_passphrase $SSID $PASSWORD > $CONF_FILE
#Delete the line containing the password
sudo sed -i '/$PASSWORD/d' $CONF_FILE
fi
#Connecting to network
sudo wpa_supplicant -c $CONF_FILE -i wlan0 &
我认为这是因为wpa_supplicant仍然在后台运行,是否有人知道如何在不知道其pid的情况下终止wpa_supplicant运行进程?
编辑: 我确认它来自在后台运行的wpa-supplicant。 我找到解决问题的唯一方法是打电话给
sudo killall wpa_supplicant
然而,这个解决方案并不能让我满意,想象一下,我在另一个接口上运行另一个wpa_supplicant实例,我将丢失所有网络连接。 非常确定有更好的方法可以终止与此特定接口关联的进程。 我会四处寻找。 希望有人已经有这种情况。
答案 0 :(得分:0)
我建议您使用wpa_supplicant前端程序wpa_cli
来控制wpa_supplicant。
ctrl_interface=/var/run/wpa_supplicant
启用wpa_supplicant控件套接字,可以根据您的喜好更改确切的路径和名称。 wpa_cli -p /var/run/wpa_supplicant terminate
来修复wpa_supplicant。请参阅wpa_cli
的帮助以获取更多信息。
答案 1 :(得分:0)
忘记ifconfig,它 也会启动wpa_supplicant
而是使用ip link set wifi0 up
或ip link set wifi0 down
上/下界面,wpa_supplicant
/ wpa_cli
连接到网络。
调用请求者的示例:
wpa_supplicant -i wifi0 -D nl80211 -c /etc/wpa_supplicant/my_wpa_supplicant.conf
您可以直接在.conf文件中设置网络,也可以动态添加它们。
通过wpa_passphrase
生成psk,将输出放在.conf文件中。
network={
ssid="TOPGUN"
#psk="qwerty123"
psk=f910451a8a67c0e061d1a296955ad604b4fe6fb0e442b8a997f350f434e07f00
}
network={
ssid="TOPGUN2"
#psk="qwerty123"
psk=538a2337031c5308082285cee3e433c62aaf49260cbb35768eeb3e6baa2d5191
}
现在您可以使用wpa_cli从脚本中更改这些网络,就像这样。
wpa_cli -iwifi0 select_network 0
wpa_cli -iwifi0 enable_network 0
和
wpa_cli -iwifi0 select_network 1
wpa_cli -iwifi0 enable_network 1
其中0是.conf文件中第一个网络的编号,1是第二个网络
或强>
每次在脚本中动态添加网络,这样您就可以更好地控制网络中的数字。请记住,那些不是持久的,应该在每次重启系统时运行。
wpa_cli -iwifi0 add_network <-- this command returns number of network which is used in following commands, you should remember returned value
wpa_cli -iwifi0 set_network 0 key_mgmt WPA-PSK
wpa_cli -iwifi0 set_network 0 psk '"qwerty123"'
wpa_cli -iwifi0 set_network 0 ssid '"TOPGUN"'
wpa_cli -iwifi0 select_network 0
wpa_cli -iwifi0 enable_network 0