如何在不重启的情况下连接到WiFi?


17

我只是将一张新刷过的卡(带有2017-09-07-raspbian-stretch-lite)放入Raspberry Pi ZeroW。

然后我添加了以下几行:

network={
    ssid="myWifiSsid"
    psk="myWifiPassword"
}

/etc/wpa_supplicant/wpa_supplicant.conf

输入的数据是100%正确的。我等待了10分钟,然后检查:它没有自动连接。

然后,我回到了官方说明sudo wpa_cli reconfigure按照建议运行。结果相同:没有连接。

然后,我尝试手动重新启动wlan0:

sudo ifconfig wlan0 down
sudo ifconfig wlan0 up

还是一样:是不连接。

然后我重新启动,并立即自动连接。

太令人沮丧了。感觉官方说明根本没有经过测试。

那么,这里缺少什么,如何在不重新启动的情况下完成呢?


1
我也注意到了这一点。很沮丧!
Quintin Balsdon '17

Answers:


20

我也看到了我的这个问题树莓派零点W使用2017-09-07-raspbian-stretch-lite

正在更新wpa_supplicant.conf文件,sudo wpa_cli reconfigure并且sudo systemctl restart wpa_supplicant无效。我的Pi无法获得IP wlan0

我注意到这wpa_supplicant是作为dhcpcd服务的子级产生的。

$ sudo systemctl status

└─dhcpcd.service
  ├─890 wpa_supplicant -B -c/etc/wpa_supplicant/wpa_supplicant.conf -iwlan0
  └─912 /sbin/dhcpcd -q -w

我发现使用daemon-reload并重新启动dhcpcd.service单元对我有用。

sudo systemctl daemon-reload
sudo systemctl restart dhcpcd

好像你应该首先运行sudo systemcl daemon-reload重新启动之前dhcpcd。我不完全确定为什么,但是似乎daemon-reload会警告服务单元更改配置文件。

如果我dhcpcd没有运行daemon-reload就重新启动,则会收到此警告。Warning: dhcpcd.service changed on disk. Run 'systemctl daemon-reload' to reload units.,但无论有没有,它都可以重新启动daemon-reload。因此,我认为这不是至关重要的,但可能是一种好的做法。


这有效,是正确的解决方案。但是,对于任何想要进行双模wifi的人(例如,承载热点并充当基站的Raspberry pi),请注意,这将无法工作。如果要设置双模wifi,请在此处遵循此指南:raspberrypi.stackexchange.com/questions/89803/…。假设您已按照本指南进行了配置,并且希望不重新启动就可以运行;只需运行sudo systemctl restart wpa_supplicant@wlan0.service,然后执行sudo systemctl daemon-reload
thewebjackal


4

我使用的是Raspberry Pi 3 2018-03-13-raspbian-stretch,但问题略有不同,但是我找到了解决方案,因此我认为这也可以为您提供帮助。

我通过/etc/wpa_supplicant/wpa_supplicant.conf设置启动RPi,以便设置了一个SSID和密码,并且RPi在启动时自动连接到已配置的SSID。另外,我想使用一些自动文本处理脚本进行更改 /etc/wpa_supplicant/wpa_supplicant.conf,然后重新加载wifi设置

经过一番搜索之后,我在Raspberry Pi官方论坛上找到了这篇文章,并且发现里面的这组命令至少对我有用:

sudo dhclient -r wlan0
sudo ifdown wlan0
sudo ifup wlan0
sudo dhclient -v wlan0

我不知道它们如何运作或为什么运作,因此无法保证...


这是唯一对我有用的答案,也适用于带有树突拉伸的Pi3-谢谢!
smörkex

3

在wpa_supplicant.conf中添加网络后:

运行cli
(此处使用3个命令:interface,reconfigure和quit)

root@raspberrypi:~# wpa_cli
wpa_cli v2.4
Copyright (c) 2004-2015, Jouni Malinen <j@w1.fi> and contributors

This software may be distributed under the terms of the BSD license.
See README for more details.


Selected interface 'p2p-dev-wlan0'

Interactive mode

<3>CTRL-EVENT-SCAN-RESULTS
> interface wlan0
Connected to interface 'wlan0.
> reconfigure
OK
<3>CTRL-EVENT-SCAN-STARTED
<3>CTRL-EVENT-SCAN-RESULTS
<3>WPS-AP-AVAILABLE
<3>Trying to associate with XX:Xa:aX:Xa:XX:Xa (SSID='wifissid' freq=2437 MHz)
<3>Associated with XX:Xa:aX:Xa:XX:Xa
<3>WPA: Key negotiation completed with XX:Xa:aX:Xa:XX:Xa [PTK=CCMP GTK=CCMP]
<3>CTRL-EVENT-CONNECTED - Connection to XX:Xa:aX:Xa:XX:Xa completed [id=0 id_str=]
> quit

然后验证您是否具有IP地址。

root@raspberrypi:~# ifconfig wlan0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.10.XX.XXX  netmask 255.255.255.0  broadcast 10.10.XX.XXX
        inet6 fe80::aab2:d96e:d3ef:836d  prefixlen 64  scopeid 0x20<link>
        ether bX:XX:Xb:XX:Xe:aX  txqueuelen 1000  (Ethernet)
        RX packets 162  bytes 31128 (30.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 75  bytes 11385 (11.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

1

您应该运行此命令行来重新启动网络

/etc/init.d/networking重新启动


3
不能拉伸!
MatsK

6
理想情况下也不是在jessie中,因为它也是基于systemd(而不是SysV)的;该命令是不合时宜的,并且最多支持向后兼容。
goldilocks

不,它不起作用。您必须重新配置wpa请求者并重新启动dhcpcd
Hola Soy Edu Feliz Navidad

0

您可以使用NetworkManager工具,该工具使用nmcli命令来设置连接配置文件。

使用apt安装它:

sudo apt-get install network-manager

注释掉wlan和中的Ethernet接口/etc/network/interfaces

重新启动设备。

然后使用:

sudo nmcli device wifi con "SSID" password "PSK" 

连接到Wi-Fi网络。


请不要建议将另一个网络工具与现有的三个工具(dhcpcd,Debian网络ifupdown,systemd-networkd)混淆。Raspbian不支持网络管理器,因此您必须手动进行配置。首先,它与dhcpcd和相冲突ifupdown。您在回答中不尊重它。然后在Raspbian Stretch中没有任何条目,/etc/network/interfaces因此没有注释掉。
Ingo,

是的,您是正确的伙伴,它们与其他dhcpcd和ifupdown网络冲突。但是遵循上述建议后,NetworkManager似乎是唯一的方法。Raspberry pi的raspbian lite版本除了nmcli外没有其他选择。我没有在Stretch上尝试过它,但是在安装过程中,网络管理器本身会发出冲突警告。如果您有解决方案,我将随时准备学习该方法。
Rituraj Rautela,

只要使用sudo systemctl stop wpa_supplicant@wlan0.servicesudo systemctl start wpa_supplicant@wlan0.service您就可以根据需要停止和启动WiFi连接。如何做,您可以查看将Raspberry Pi设置为接入点-简单的方法或将接入点设置为WiFi中继器,可选带网桥在wifi客户端和接入点之间切换,而无需重启或其他类似解决方案。
Ingo,

1
@Ingo的一个非常有效的观点。只是要添加-如果您使用的是Node.js,并且想使用npm包来做事情,请彻底检查文档。大多数npm软件包在后台使用nmcli,这在Raspberry pi上不起作用。它甚至没有安装。因此,请谨慎操作。
thewebjackal

实际上,可以在Raspbian上使用network-manager(或wicd其他任何联网工具)。但是,如果您描述了如何设置它们,将很有用。
德米特里·格里戈列耶夫

0

我在Raspbian GNU / Linux 10(失败者)中遇到了类似的问题。我在wpa_supplicant.conf中进行了更改并运行

# wpa_cli -i wlan0 reconfigure

但这并不能一直有效。

# dhclient -v

使它工作。

我在https://kb.isc.org/docs/isc-dhcp-44-manual-pages-dhclient中找到了信息

来自的输出

$ sudo dhclient -v
Internet Systems Consortium DHCP Client 4.4.1
Copyright 2004-2018 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/wlan0/a0:f3:c1:26:04:9c
Sending on   LPF/wlan0/a0:f3:c1:26:04:9c
Listening on LPF/eth0/b8:27:eb:1f:ab:6e
Sending on   LPF/eth0/b8:27:eb:1f:ab:6e
Sending on   Socket/fallback
DHCPREQUEST for 192.168.7.28 on wlan0 to 255.255.255.255 port 67
DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 4
DHCPACK of 192.168.7.28 from 192.168.7.1
RTNETLINK answers: File exists
bound to 192.168.7.28 -- renewal in 1717 seconds.

0

编辑1:

我通过将Raspberry pi Zero W配置为双模式wifi来获得此答案,我想通过在ap0接口(托管REST API)上共享它们来更改wifi凭据(wlan0必须连接到的wifi路由器)。它)。

问题是我认为接受的答案或任何其他答案对我而言都是有效的。但是事实并非如此。

因此,对于像我一样登陆这里的任何人,请按照此处提到的设置步骤进行操作。

然后,为了在不重新启动的情况下更改wifi连接,我目前使用2种方法进行测试:

  1. wpa_cli -i wlan0重新配置
  2. sudo systemctl重新启动wpa_supplicant@wlan0.service

测试完成后,我将在此处进行更新。


我目前正在测试事物。将保持此更新。
thewebjackal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.