【问题标题】:Stop auto connect on ifconfig wlan0 up在 ifconfig wlan0 up 上停止自动连接
【发布时间】:2017-07-20 14:03:20
【问题描述】:

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

【问题讨论】:

  • 您当前是否有多个网络接口在运行。如果没有,你最好运行“systemd network restart”
  • 是的,我在 eth0 上也有一个正在运行的接口,稍后我可能在 wlan1 上还有第三个。

标签: linux networking ifconfig wpa-supplicant


【解决方案1】:

忘记 ifconfig,它也会启动 wpa_supplicant。
而是使用ip link set wifi0 upip 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

【讨论】:

  • 嗨,我正在尝试使用 wpa_cli 但我总是收到错误 Failed to connect to non-global ctrl_ifname: wlan0 error: No such file or directory 我也使用 -i wlan0 启动了 wpa_supplicant 但 wpa_cli 似乎无法识别此界面,因为它总是给我同样的错误
  • 该消息意味着没有正在运行的 wpa_supplicant。使用ps -aux | grep wpa 进行检查。如果它没有运行,用ifconfig 确认如果wlan0 真的上升了?如果没问题,看看/etc/wpa_supplicant/my_wpa_supplicant.conf文件是否存在。如果可以的话,尽量省略驱动部分-D nl80211
  • 但是有一个正在运行的 wpa_supplicant root 1799 0.0 0.8 6692 3816 ? Ss 09:18 0:00 wpa_supplicant -B -c /etc/wpa_supplicant/SSID.conf -i wlan0 实例。 /etc/wpa_supplicant/wpa_supplicant.conf 文件也存在。此外,我从不使用 -D 选项运行。
  • 尝试关闭所有网络守护进程:NM、connman。他们有可能会干扰
  • 我虽然没有更多的干扰问题,因为 strech ?问题是我使用 NM 作为我的 eth0 接口:/
【解决方案2】:

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

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

更多信息请参考wpa_cli的帮助。

【讨论】:

  • 嗨,我已经在/etc/wpa_supplicant/wpa_supplicant.conf 中有一行ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev。但是,即使有一个正在运行的 wpa_supplicant 实例,我也没有任何 /var/run/wpa_supplicant
  • 请删除字符串“DIR”。正确的配置应该是:'ctrl_interface=/var/run/wpa_supplicant'
  • 做了,但还是没有/var/run/wpa_supplicant
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多