Jak połączyć się z Wi-Fi bez restartu?

17

Właśnie włożyłem świeżo flashowaną kartę (z 2017-09-07-raspbian-stretch-lite) do Raspberry Pi Zero W.

Następnie dodałem następujące linie:

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

do /etc/wpa_supplicant/wpa_supplicant.conf.

Podane dane były w 100% poprawne. Czekałem 10 minut i sprawdziłem: Nie łączy się automatycznie.

Potem wróciłem do oficjalnych instrukcji i pobiegłem sudo wpa_cli reconfigurezgodnie z sugestią. Ten sam wynik: nie udało się połączyć.

Następnie próbowałem ręcznie zrestartować wlan0:

sudo ifconfig wlan0 down
sudo ifconfig wlan0 up

Nadal to samo: nie można się połączyć.

Potem dokonałem restartu i natychmiast się automatycznie połączył.

To takie frustrujące. Wygląda na to, że oficjalne instrukcje wcale nie są testowane.

Czego tu brakuje, jak można to zrobić bez ponownego uruchomienia?

Forivin
źródło
1
Zauważyłem to również. Bardzo frustrujące!
Quintin Balsdon

Odpowiedzi:

20

Ja też widziałem ten problem z moim Raspberry Pi Zero W użyciu 2017-09-07-raspbian-stretch-lite.

Aktualizacja wpa_supplicant.confpliku sudo wpa_cli reconfigurei sudo systemctl restart wpa_supplicantnie działała. Moje Pi nie uzyskałoby adresu IP wlan0.

Zauważyłem, że wpa_supplicantpojawia się jako dziecko dhcpcdusługi.

$ sudo systemctl status

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

Odkryłem, że użycie przeładowania demona i zrestartowanie dhcpcd.serviceurządzenia działało dla mnie.

sudo systemctl daemon-reload
sudo systemctl restart dhcpcd

To wydaje się najpierw należy uruchomić sudo systemcl daemon-reloadprzed ponownym uruchomieniem dhcpcd. Nie jestem do końca pewien, dlaczego, ale wydaje się, że daemon-reloadostrzeże jednostki usługowe, aby zmieniły pliki konfiguracyjne.

Jeśli zrestartuję się dhcpcdbez uruchamiania daemon-reload, dostanę to ostrzeżenie. Warning: dhcpcd.service changed on disk. Run 'systemctl daemon-reload' to reload units., ale wznowił się dobrze z lub bez daemon-reload. Nie sądzę więc, aby to było konieczne, ale prawdopodobnie dobra praktyka.

Will Haley
źródło
To działa i jest poprawnym rozwiązaniem. Ale dla każdego, kto chce zrobić podwójny tryb Wi-Fi (tj. Raspberry pi hostujący hotspot, a także działający jako stacja bazowa), pamiętaj, że to nie zadziała. Jeśli ustawiasz tryb podwójny wifi, po tej instrukcji tutaj: raspberrypi.stackexchange.com/questions/89803/... . Zakładając, że wykonałeś konfigurację zgodnie z tym przewodnikiem i chcesz uruchomić rzeczy bez ponownego uruchamiania; po prostu uruchom sudo systemctl uruchom ponownie [email protected], a następnie sudo systemctl daemon-reload
thewebjackal
4

Używam Raspberry Pi 3 2018-03-13-raspbian-stretchi mój problem jest nieznacznie inny, ale znalazłem rozwiązanie, więc myślę, że to też może ci pomóc.

Uruchamiam RPi z /etc/wpa_supplicant/wpa_supplicant.confustawieniami tak, że mam jeden identyfikator SSID i hasło, a RPi łączy się automatycznie ze skonfigurowanym SSID podczas rozruchu. Ponadto chciałem zmienić /etc/wpa_supplicant/wpa_supplicant.conf za pomocą skryptu automatycznego przetwarzania tekstu, a następnie ponownie załadować ustawienia Wi-Fi .

Po krótkich poszukiwaniach znalazłem ten post na oficjalnych forach Raspberry Pi i znalazłem w nim zestaw poleceń, które działały dla mnie przynajmniej:

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

Nie wiem jak i dlaczego działają, więc nie ma gwarancji ...

rmarques
źródło
To jedyna odpowiedź, która zadziałała dla mnie, także na Pi3 z raspian stretch - dzięki!
smörkex
3

Po dodaniu sieci do pliku wpa_supplicant.conf:

Uruchom cli
(używane są tutaj 3 polecenia: interfejs, rekonfiguracja i wyjście)

root@raspberrypi:~# wpa_cli
wpa_cli v2.4
Copyright (c) 2004-2015, Jouni Malinen <[email protected]> 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

Następnie sprawdź, czy masz adres 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
erpguy
źródło
1

Należy uruchomić ten wiersz poleceń, aby zrestartować sieć

/etc/init.d/networking restart

Darryl RN
źródło
3
Nie w odcinku!
MatsK
6
Najlepiej też nie w jessie, ponieważ jest również oparty na systemie (nie SysV); to polecenie jest anachroniczne i co najwyżej obsługiwane dla kompatybilności wstecznej.
złotowłosy
Nie, to nie działa. Musisz ponownie skonfigurować suplikant wpa i zrestartować dhcpcd
Hola Soy Edu Feliz Navidad
0

Możesz użyć narzędzia NetworkManager, które używa nmclipoleceń do skonfigurowania profilu połączenia.

Zainstaluj go za pomocą apt:

sudo apt-get install network-manager

Komentuj wlani Ethernetinterfejsy w /etc/network/interfaces.

Uruchom ponownie urządzenie.

Następnie użyj:

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

połączyć się z siecią Wi-Fi.

Rituraj Rautela
źródło
Nie radzę mieszać innego narzędzia sieciowego z już istniejącymi trzema (dhcpcd, Debian networking ifupdown, systemd-networkd). Menedżer sieci nie jest obsługiwany przez Raspbian, więc musisz to wszystko skonfigurować ręcznie. Najpierw konfliktuje z dhcpcdi ifupdown. Nie szanujesz tego w swojej odpowiedzi. W Raspbian Stretch nie ma żadnych wpisów, /etc/network/interfaceswięc nie ma nic do komentowania.
Ingo
Tak, masz rację, kolidują z siecią z innymi programami dhcpcd i ifupdown. Jednak NetworkManager wydaje się być jedynym sposobem, aby to zrobić, po wykonaniu powyższych wskazówek. Wersje raspbian lite Raspberry pi nie mają innej opcji niż nmcli. Nie próbowałem tego na Stretch, ale podczas instalacji sam Network Manager ostrzeże o konflikcie. Jeśli masz rozwiązanie, zawsze jestem gotów nauczyć się tej metody.
Rituraj Rautela
Wystarczy sudo systemctl stop [email protected]i sudo systemctl start [email protected]możesz zatrzymać i uruchomić połączenie WiFi tak, jak chcesz. Jak to zrobić, możesz spojrzeć na Konfigurowanie Raspberry Pi jako punktu dostępu - prosty sposób lub Punkt dostępu jako repeater WiFi, opcjonalnie z mostkiem lub Przełącz między klientem WiFi a punktem dostępu bez ponownego uruchamiania lub innych podobnych rozwiązań.
Ingo
1
Bardzo ważny punkt autorstwa @Ingo. Wystarczy dodać - jeśli używasz Node.js i chcesz robić rzeczy przy użyciu pakietów npm, dokładnie sprawdź dokumentację. Większość pakietów npm używa nmcli w tle, co nie działa na Raspberry pi. Nie jest nawet zainstalowany. Postępuj więc ostrożnie.
thewebjackal
Rzeczywiście możliwe jest użycie network-manager(lub wicddowolnego innego narzędzia sieciowego w tym zakresie) w Raspbian. Przydałoby się jednak, jeśli opisałeś, jak je skonfigurować.
Dmitrij Grigoriew
0

Miałem podobny problem z Raspbian GNU / Linux 10 (buster). Wprowadziłem zmiany w pliku wpa_supplicant.conf i uruchomiłem

# wpa_cli -i wlan0 reconfigure

Ale to nie działało do końca.

# dhclient -v

sprawiło, że zadziałało.

Znalazłem informacje na https://kb.isc.org/docs/isc-dhcp-44-manual-pages-dhclient

Wyjście z

$ 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.
Joni
źródło
0

EDYCJA 1:

Wylądowałem na tej odpowiedzi z moim Raspberry pi Zero W skonfigurowanym jako dual mode Wi-Fi i chciałem zmienić poświadczenia Wi-Fi (router Wi-Fi, z którym wlan0 musi się połączyć), udostępniając je przez interfejs ap0 (który miał interfejs API REST hostowany na it) z aplikacją mobilną.

Chodzi o to, że założyłem, że zaakceptowana odpowiedź lub jakakolwiek inna odpowiedź zadziała w moim przypadku. Ale tak nie było.

Tak więc dla każdego, kto wylądował tutaj tak jak ja, wykonaj kroki konfiguracji wymienione tutaj .

Następnie, w celu zmiany połączenia Wi-Fi bez ponownego uruchomienia, obecnie testuję na 2 sposoby:

  1. wpa_cli -i wlan0 rekonfiguruj
  2. sudo systemctl uruchom ponownie [email protected]

Po zakończeniu testów będę go aktualizować tutaj.

thewebjackal
źródło
Obecnie jestem w trakcie testowania rzeczy. Będzie to aktualizować.
thewebjackal