1

我目前正在编写两个脚本,一个用于连接 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 实例,我将失去所有网络连接。很确定有更好的方法来终止与此特定接口关联的进程。我会四处挖掘。希望有人已经有这种情况。

4

2 回答 2

1

忘记 ifconfig,它也会启动 wpa_supplicant。
而是使用ip link set wifi0 uporip link set wifi0 down来上/下接口,和wpa_supplicant/wpa_cli连接到网络。
调用请求者示例:
wpa_supplicant -i wifi0 -D nl80211 -c /etc/wpa_supplicant/my_wpa_supplicant.conf 您可以直接在 .conf 文件中设置网络,也可以动态添加它们。通过 生成 psk wpa_passphrase,将输出放入 .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
于 2017-07-21T01:43:44.150 回答
0

我推荐你使用 wpa_supplicant 前端程序wpa_cli来控制 wpa_supplicant。

  1. 首先通过添加 wpa conf 文件启用 wpa_supplicant 控制套接字,ctrl_interface=/var/run/wpa_supplicant可以根据您的喜好更改确切的路径和名称。
  2. 用于 wpa_cli -p /var/run/wpa_supplicant terminate终止 wpa_supplicant。

更多信息请参考帮助wpa_cli

于 2017-07-21T01:24:27.823 回答