WiFi를 자동으로 다시 연결하는 방법?


74

파워 미터를 모니터링하기 위해 파이를 사용하고 있습니다. Edimax EW-7811UN USB 어댑터를 사용하여 WiFi 연결을 통해 데이터가 PC로 전송됩니다. Wi-Fi 연결이 끊어지면 (밤에 스위치가 꺼 지거나 흔들리는 경우) USB 어댑터는 비활성화 된 상태로 유지됩니다.

WiFi 어댑터를 다시 연결하지 않고 WiFi 연결을 자동으로 다시 시작하는 방법이 있습니까?

답변:


31

나는 대부분의 네트워크 자동 구성 및 연결 관리 데몬을 비활성화하고 직접 처리하는 것을 선호합니다. 다음은 네트워크가 있고 연결이 끊긴 와이파이 드라이버 나 전원 문제가없는 한 연결을 유지하는 (bash) 스크립트입니다. N 초마다 라우터를 핑 (ping)하는 것이 아이디어가 실패하면 다시 연결하십시오.

#!/bin/bash    

# make sure we aren't running already
what=`basename $0`
for p in `ps h -o pid -C $what`; do
        if [ $p != $$ ]; then
                exit 0
        fi
done

# source configuration
. /etc/wifi.conf

exec 1> /dev/null
exec 2>> $log
echo $(date) > $log
# without check_interval set, we risk a 0 sleep = busy loop
if [ ! "$check_interval" ]; then
        echo "No check interval set!" >> $log
        exit 1
fi

startWifi () {
        dhclient -v -r
    # make really sure
        killall dhclient
        iwconfig $wlan essid $essid
        dhclient -v $wlan
}

ifconfig $eth down
ifconfig $wlan up
startWifi

while [ 1 ]; do
        ping -c 1 $router_ip & wait $!
        if [ $? != 0 ]; then
                echo $(date)" attempting restart..." >> $log
                startWifi
                sleep 1
        else sleep $check_interval
        fi
done

따라서이 /etc/wifi.conf경우 다음이 포함될 수 있습니다.

router_ip=192.168.0.1
log=/var/log/wifi.log
wlan=wlan0
eth=eth0
essid=someNetwork
check_interval=5

이것은 모두 암호화되지 않은 열린 네트워크를 가정합니다 (그렇지 않으면 적절한 명령을 추가해야합니다). 필자는 pi를 포함하여 다양한 Linux 시스템에서이 접근 방식을 사용했으며 완벽하게 작동합니다. 주기적으로 휴면 상태가 되더라도 (파이는 어쨌든) 시스템을 무기한 온라인 상태로 유지합니다.

적절한 검사 간격은 3-5 초입니다. 이 활동은 시스템 리소스에 전혀 영향을 미치지 않습니다.

먼저 네트워크 자동 구성을 비활성화해야합니다 . ifplugd및 기타 네트워킹 데몬을 포함 하면 다음 작업에 방해가됩니다.

Raspbian에서 자동 구성 네트워킹을 비활성화하려면 어떻게해야합니까?

나는 실제로 사용했다 apt-get remove ifplugd.

부팅시 네트워킹을 시작하려면 (pi 헤드리스를 사용하기 때문에) 다음에서 raspbian에서 실행되도록 설정했습니다 /etc/rc.local.

wifi_mod=`lsmod | grep 8192cu`
if [ "$wifi_mod" ]; then
        echo "Starting wifi..."
        /usr/bin/nice -n -10 /usr/local/bin/wifi &
else
        echo "Starting ethernet..."
        /sbin/ifconfig eth0 up
        /sbin/dhclient eth0
fi

/usr/local/bin/wifi스크립트입니다. 무엇 nice을위한 것인지 모른다면를 읽으십시오 man nice.

의 요점은 if너무 와이파이가 시작됩니다 - 내 와이파이 동글 파이에 연결되어있는 경우 8192cu 모듈이이 시점에서 커널이로드 될 것입니다. 그렇지 않은 경우 이더넷이 연결되어 있고 사용되어야한다고 가정합니다 (그렇지 않은 경우 dhclient는 중단되고 네트워크 액세스가 없음).

이것이 작동하려면 아마해야 할 것입니다

따라서 부팅시 네트워크에 헤드리스 파이를 가져 와서 유지합니다. 로그인하지 않고 달리면서 eth로 전환하는 방법을 원한다면 , wifi 동글을 꺼내기위한 udev 규칙으로 무언가를 할 수 있습니다.


테스트 할 가치가있는 것 같습니다. 리눅스가 아니라면 시작시 cron에 넣을 때 스크립트가 실행되도록 어떻게 설정합니까? 로그 회전을 추가하는 것이 가능 / 필요합니까?
andig

1
@andig : 시작을 통해 몇 가지 단락을 추가했습니다 rc.local. WRT 로그 순환-일반적으로 로그 파일과 관련된 별도의 질문입니다 (하지만 참조 man logrotate). 현재 해당 스크립트는 추가하지 않고 동일한 경로로 존재하는 경우 이전 로그를 복제 (덮어 쓰기)합니다. 디버깅 wifi.$$.log을 위해 wifi.conf 파일에서 때때로 사용 했기 때문에 마지막 로그가 (거의 들리지 않게) 방해를받으며 무언가를 조정 한 후 한 세션을 다른 세션과 비교할 수 있습니다. $$"wifi"프로세스의 pid입니다.
goldilocks

때로는 쉘 스크립트가 깨지기 쉽고 업데이트가 있거나 다른 네트워킹 소프트웨어가 설치되어있는 경우보기가 어려울 수 있습니다. 이 방법에 대한주의 사항입니다.
예레미아

3
@jeremiah : 좋은 두려움입니다. 나는 대본을 작성하고 수년에 걸쳐 그것을 수정했으며, 그것이 작동하는 일반적인 맥락과 내가 조심해야 할 것을 이해하고 있다고 생각합니다. 그러나 코드 스 니펫보다 이해를 전달하는 것이 어려울 수 있습니다. 나에게 상황을 매우 기본적인 요소로 줄여서 NetworkManager로 작업을 시도하는 다른 방법 일뿐입니다. 이것은 간단한 독립형 시스템의 상황에서 리눅스 배포판 스펙트럼에서 "이것이 저에게 효과가 있습니다"와 유사한 관점을 가진 사람들에게 제공하는 것입니다.
goldilocks

그래서 : 나는이 게시물을 알고 있으며 주요 배포 스트림 중 하나 (debia 및 fedora 및 파생)가 그 게시물을 혼란스럽게하는 경우 계속 업데이트하려고합니다. 또한 비활성화해야 할 사항과 방법에 대한 요점을 강조합니다.
goldilocks

68

글쎄, 매우 간단한 해결책이 있습니다.

  1. 파일로 이동하여 /etc/ifplugd/action.d/이름을 바꿉니다.ifupdownifupdown.original
  2. 그런 다음 수행하십시오. cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown
  3. 드디어: sudo reboot

그게 다야. AP를 켜거나 켜서이를 테스트하십시오. Raspberry Pi가 올바르게 다시 연결되었음을 확인할 수 있습니다.


2
가장 간단하고 효과적인 답변입니다. 2 Rpi에서 테스트되었으며 작동합니다. raspberrypi.org/phpBB3/…
Mauvis Ledford

12
간단한 질문으로 죄송합니다. 왜 작동합니까?
Jeff Meatball Yang

@JeffMeatballYang, 질문에 대한 새로운 스레드를 시작하십시오.
AndaluZ

6
나에게 ifupdown 파일이없고 링크 만 있었 action_wpa -> ../../wpa_supplicant/action_wpa.sh으므로 이것이 기본값입니까?
Zitrax

2
네, 다른 사람처럼 말 :이 작동하지 않습니다 dhcpcd기반 배포판이 당신이 필요 RPI3에서 실행 얻기 위해 apt-get install rcconf및 전환 dhcpcdnetworking
test30

21

나는 최근에 모든 무선 구성을 정리하는 콘솔 응용 프로그램을 우연히 발견했습니다. 이 도구를 사용하여 LAN 인터페이스를 구성 할 수도 있습니다.

sudo apt-get install wicd-curses

꽤 많은 다른 패키지를 설치하고 백그라운드에서 자체 데몬을 실행하지만 모든 것을 훨씬 쉽게 구성 할 수 있습니다. 로 실행

sudo wicd-curses

여기에 이미지 설명을 입력하십시오

네트워크가 감지되지 않았다는 메시지가 표시되면 P(자본은 반드시 [SHIFT] p를 사용하고) 무선 인터페이스 필드에 wlan0을 입력하고 F10을 눌러 저장하십시오.

  1. R 목록을 새로 고칩니다.
  2. 키보드의 커서를 사용하여 목록을 위아래로 탐색하십시오.
  3. 무선 연결을 구성하려면 오른쪽을 누르십시오
  4. 몇 번 누르고 "이 네트워크에 자동 연결"을 확인하십시오.
  5. 다시 몇 번 누르고 키 필드에 비밀번호를 입력하십시오.
  6. F10을 눌러 저장

여기에 이미지 설명을 입력하십시오

를 눌러 C액세스 포인트에 연결 해야 할 수도 있습니다 . 유선 인 경우 LAN 인터페이스가 종료되고 무선이 켜질 가능성이 높습니다.

또한 연결을 관리하므로 어떤 이유로 든 끊어지면 구성된 무선 액세스 지점에 다시 연결됩니다.

WiFi 어댑터의 플러그를 꽂았다가 다시 꽂는 것을 테스트했습니다. 약 60 ~ 90 초가 걸리지 만 WiFi에 다시 연결됩니다 (LAN의 플러그를 뽑아야한다고 생각합니다)

그것이 도움이되기를 바랍니다!


1
재 연결을 어떻게 처리해야할지 잘 모르겠습니다. 초기 연결은 여기서 문제가되지 않았습니다!
andig

연결을 자동으로 확인 해야하는 단계가 있기 때문에 답변을 업데이트했습니다. 또한 환경 설정에서 맨 아래로 스크롤해야합니다. 마지막 옵션은 화면이 아닙니다. 또한 Wi-Fi 네트워크에 자동으로 연결하려고합니다 (기본적으로 켜져 있음). WiFi 어댑터 플러그를 다시 꽂을 수 있고 2 분 이내에 다시 연결됩니다. 또한 단지라는 GUI 버전을 얻을wicd
피오트르 쿨라

"sudo wicd-cruses" 'u'와 'r'명령에 오타가 있습니다
Gawcio

을 (를) 설치 한 후 wicd-cursesRPi 3이 무작위로 정지되었습니다. 전에 얼어 붙지 않았고 얼른 즉시 얼어 붙었습니다. 조심해!
5

1
wicd-curses를 설치 한 후 Jessie Lite를 실행하는 RPi 3이 멈추지 않고 연결 상태를 유지합니다. 그러나 오늘 이더넷 포트로 하나의 연결을 시도했지만 부팅 후 몇 초 후에 인터페이스가 손실되는 것을 발견했습니다. 와이파 이에 연결하기 위해 wicd-curses를 구성하기 전에 잘 연결할 수있었습니다.
Chris Jenks 2016 년

14

추가 스크립트없이이 문제를 해결할 수 있습니다.

/ etc / network / interfaces에 다음을 입력하십시오.

allow-hotplug wlan0 iface wlan0 inet manual wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf iface default inet dhcp

로밍을 통해 인터페이스가자가 치유됩니다.


마지막 줄은 wlan0 인터페이스에 두 번째 IP 주소를 추가하는 것 같습니다. 의도적인가요?
fche

하나의 DHCP 할당 주소로 끝납니다. 부트 스크립트가 동작을 바꾸 었다고해도 놀라지 않을 것입니다. –이 설정 파일은 불필요합니다.
David Sainty

2
내 raspbian pi2 상자에서 wlan이 "wpa-roam"을 사용하더라도 3 회 인증 시도가 실패 할 정도로 오래 중단되면 다시 시도하지 않습니다.
fche

이것은 RPi 3에서 나를 위해 일한 유일한 대답입니다. 감사합니다!
16:14에

1

netcfg

시도하십시오 netcfg. 사용중인 배포에 대한 추가 세부 정보가 없으면 더 많은 세부 정보를 제공 할 수 없지만 원하는 작업을 수행해야합니다.


4
현재 raspbian 배포판을 사용하고 있습니다 : pi @ raspberrypi ~ $ man netcfg netcfg에 대한 수동 항목 없음 pi @ raspberrypi ~ $ netcfg -bash : netcfg : 명령을 찾을 수 없음 pi @ raspberrypi ~ $ apt-cache search netcfg pi @ raspberrypi ~ $
andig

0

이것 에서 추출 된 또 다른 솔루션 .
먼저 wifi 설정을 구성하십시오. 다음 sudo vi /etc/wpa_supplicant/wpa_supplicant.conf과 같은 섹션을 추가하십시오.

network={
   ssid="MyNetworkName"
   psk="MyPaz0rdz"
   key_mgmt=WPA-PSK
}

그런 다음 네트워크 설정 sudo vi /etc/dhcpcd.conf:

interface wlan0
inform 192.168.1.200 # the static ip for the wifi card
static routers=192.168.1.254 # your router's ip
static domain_name_servers=192.168.1.254 # your dns, usually=your router

그런 다음 예를 들어이 스크립트 파일을 작성 하여 실행 권한을 /home/pi/reconnect.sh부여하십시오 +x.

#!/bin/bash
router=`ip route | awk '/default/ {print $3}'`
/bin/ping -q -c1 $router > /dev/null

if [ $? -eq  0 ]
then
  true
  # echo "Network OK"
else
  echo "Network down, fixing..."
  # ifdown --force wlan0
  # sleep 5
  /bin/kill -9 `pidof wpa_supplicant`
  /sbin/ifup --force wlan0
  /sbin/ip route add default via $router dev wlan0
  /bin/mount -a
  echo "wlan0 reconnected at `date`"
fi

그런 다음로 루트로 로그인하고로 루트 sudo sucrontab을 편집하십시오 crontab -e.
이 파일의 끝에 다음 줄을 추가하십시오.

10 * * * * /home/pi/reconnect.sh

즉, "10 분마다 스크립트를 실행합니다 (루트로)"

이제 연결되어 있으면 스크립트가 종료되고 아무 일도 일어나지 않습니다. 라우터를 ping 할 수 없으면 스크립트는 wpa_supplicant를 사용하여 라우터에 다시 연결을 시도합니다.

cron 스크립트에서 에코되는 모든 것 (이 경우에는 연결이 끊긴 경우에만)이 root로 이메일로 전송됩니다. 따라서 메일 별칭과 포스트 스크립트를 구성한 경우 pi의 Wi-Fi 연결이 끊어 질 때마다 이메일을 수신 한 다음 스크립트 덕분에 성공적으로 다시 돌아옵니다.


0

이것은 2017 년 3 월 30 일 Raspian Jessie를 사용하여 나를 위해 일했습니다.

http://alexba.in/blog/2015/01/14/automatically-reconnecting-wifi-on-a-raspberrypi/


1
링크가 끊어 질 경우 게시물에 솔루션을 요약하십시오.
tlhIngan

CMB는 StackExchange의 RPi 맛 코너에 오신 것을 환영합니다. 사이트 정책 은 링크가 썩을 수 있으므로 링크 만 응답 합니다. 링크의 내용을 복제 할 필요는 없지만 최소한 링크에 포함 된 하이라이트를 확장해야합니다.
Jacobm001

위의 Jacobm001의 의견에 더해, 정보가없는 링크 전용 답변에 대한 정책을 준수하면서,이 게시물이 48 시간 내에 최소한 답변으로 표시 될 수있는 정보를 포함하도록 편집되지 않은 경우 커뮤니티 Wiki로 변환되어 커뮤니티에서 수정했습니다.
goobering
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.