필요한 SSID를 찾을 수 없을 때 wpa_supplicant를 종료하는 방법은 무엇입니까?

필요한 SSID를 찾을 수 없을 때 wpa_supplicant를 종료하는 방법은 무엇입니까?

YOCTO로 구축된 최소 버전의 Linux를 실행하는 장치(예: Raspberry Pi)가 있는데 사용 가능한 네트워크 관리자가 없습니다. 특정 시점에 /home/root/wpa.conf 파일에 네트워크 구성이 존재할 수 있지만 해당 구성이 존재할 때 해당 Wi-Fi 네트워크가 감지된다는 보장은 없습니다(장치가 이동할 수 있음). 지속적으로 Wi-Fi 연결을 시도하고 실패하면 재시도하는 서비스를 작성하고 싶습니다. 문제는 SSID를 찾을 수 없을 때 wpa_supplicant가 종료되지 않는다는 것입니다.

이것은 내 서비스입니다.

[Unit]
After=network.target

[Service]
ExecStart=/home/root/connect_to_wifi.sh
Restart=always # this would be useful if wpa_supplicant exited on fail
StandardOutput=file:/home/root/connect_to_wifi.log
StandardError=file:/home/root/connect_to_wifi_error.log

[Install]
WantedBy=default.target

스크립트는 다음과 같습니다.

#!/bin/bash
ifconfig wlan0 up
udhcpc -i wlan0 -b
wpa_supplicant -i wlan0  -c /home/root/wpa.conf

이 명령을 실행한 후 서비스가 종료되어 wpa_supplicant가 종료되므로 wpa_supplicant에서 -B를 생략했습니다. 서비스에서 type=forking 설정을 시도했지만 작동하지 않습니다. 그러나 이번 경우에는 그것이 문제가 되지 않는다고 생각합니다.

지속적으로 연결을 시도하도록 서비스와 스크립트를 수정하려면 어떻게 해야 합니까?

답변1

wpa 요청자는 종료되어서는 안 됩니다. SSID를 "찾는" 방법을 잘못 이해하고 있는 것입니다. SSID를 찾으려면 비콘이 나타날 때까지 기다려야 합니다. AP의 SSID와 BSSID를 알고 있는 경우 등록 패킷을 AP에 보내려고 시도할 수 있지만 단일 실패 응답은 완전히 정상일 수 있으므로 이 역시 여러 번 시도해야 합니다. 이는 결국 공유 매체입니다. 그리고 진입점의 RF 환경에 무슨 일이 일어나고 있는지 알 수 없습니다.

따라서 여러분이 달성하려는 것은 실제로 제가 알고 있는 거의 모든 네트워크 연결 관리자(systemd의 NetworkManager 및 wicd, Android 연결 관리자, Windows 연결 관리자 및 iO에 있는 것)의 관찰 가능한 기본 동작입니다.

따라서 솔직히 말해서 모든 사람들이 이미 "사용 가능한 경우 이 네트워크에 연결"을 제안하고 있다고 생각하지 않습니다.

따라서 올바른 해결책은 네트워크 구성 관리자(Raspberry Pi의 경우 NetworkManager일 가능성이 높음)를 구성하여 해당 네트워크를 찾는 것입니다. 그게 전부입니다.

관련 정보