我需要什么: 通过调用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,再次,不知道如何切换到另一个网络。
请建议一些修复或替代方案(简单)
答案 0 :(得分: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应该有效。
答案 1 :(得分:0)
您的具体问题是您启动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 /接口来做得更好。
顺便说一下。原则上,根本不需要重新启动dhc。一段时间后,它应该意识到它需要获取一个新的IP,但对我来说这需要很长时间。 ;)
答案 2 :(得分:-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 作为启动过程,每当我切换 wifi 时,我都不需要触摸它。
编辑:您也不需要将其作为 python 脚本运行。你可以在 shell 中做到这一点。如果您需要编写快速更改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 ...]
部分表示退出。
现在我测试了脚本。