5

我需要什么: 通过调用python脚本连接到archlinux上的不同wifi网络。

我在做什么: 从 python 执行以下语句:

wpa_passphrase "MySSID" "MyPass"> /etc/wpa_supplicant/profile.conf
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/profile.conf
dhcpd wlan0

它仅适用于第一次尝试。当它第二次执行时,它说 dhcpd 已经打开。我不知道如何切换到另一个网络。

我也尝试过 wpa_cli,但不知道如何切换到另一个网络。

请提出一些修复或替代方案(简单)

4

3 回答 3

2

您的具体问题是您启动 wpa_supplicant 和 dhcp 而不是重新启动它们。我有一个脚本,上面写着

#shutdown dhc
dhclient -r
#shutdown wpa_supplicant
killall wpa_supplicant
#down interface
ifdown --force wlan0
sleep 1
#your wpa startup here:
wpa_supplicant -t -fYOUR_LOG_FILE -cYOUR_wpa_supplicant.conf -B -iwlan0
sleep 1
#restart dhc
dhclient -nw

我想您可以通过适当地配置 /etc/network/interfaces 来做得更好。

顺便提一句。原则上,根本不需要重新启动 dhc。过了一段时间,它应该意识到它需要获取一个新的 IP,但对我来说这需要很长时间。;)

于 2016-03-20T07:58:58.903 回答
0

编辑 /etc/wpa_supplicant.conf

nano /etc/wpa_supplicant.conf

完成文件以使其看起来像这样(当然,用它们的真实值替换 wifi_name 和 wifi_key)。

network={
         ssid="wifi_name1"
         psk="wifi_key1"
}

network={
         ssid="wifi_name2"
         psk="wifi_key2"
}

然后保存退出

wifi 网络现在已配置,我们现在必须告诉我们要使用此配置文件连接到它。

wpa_supplicant -B -i wlan0 -c <(wpa_passphrase MYSSID passphrase)

如果您的接口未命名为 wlan0,则将 wlan0 替换为您的接口的真实名称。我们现在必须请求一个 IP 地址。

dhclient wlan0

如果一切顺利,您现在会看到几行包含一些 IP 地址,并且命令 ping 应该可以工作。

于 2016-02-12T13:24:09.293 回答
-1

当您使用 生成新配置时wpa_passphrase,请将其放在与上一个不同的位置以使事情变得更容易。例如,您的家庭 wifi 可能在,/etc/wpa_supplicant/home.conf而您的工作 wifi 可能在/etc/wpa_supplicant/work.conf.

然后,当您需要连接到家庭 wifi 时,您只需运行

killall wpa_supplicant # With root privileges
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/home.conf

当您需要连接到工作 wifi 时,您可以运行

killall wpa_supplicant # With root privileges
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/work.conf

为您想要使用的任何新网络重复并重复。如果您不想保留网络,例如旅途中的星巴克 wifi,只需将其保存到您计划覆盖或删除的 conf 中,例如/etc/wpa_supplicant/temp.conf.

AFAIK,您永远不必重新运行 dhcpcd。我有 dhcpcd 作为启动过程,每当我切换 wifis 时,我都不需要触摸它。

编辑:您也不需要将其作为 python 脚本运行。您可以在外壳中执行此操作。如果您需要编写一个快速更改 wifi 的脚本,我建议您使用如下所示的 shell 脚本。

#!/bin/sh
[ -z "$1" ] && exit 1
[ ! -f "/etc/wpa_supplicant/${1}.conf" ] && echo "$1 is not a wpa_supplicant config file" && exit 1
sudo killall wpa_supplicant
sudo wpa_supplicant -B -i wlan0 -c "/etc/wpa_supplicant/${1}.conf"

像这样跑

wifichange home

或者

wifichange work

[ -z "$1" ]部分说如果您没有输入任何内容,则退出。(喜欢)

wifichange

[ ! -f ...]如果您没有输入真实配置文件的名称,则该部分说要退出。

现在我测试了脚本。

于 2021-01-13T19:50:44.863 回答