WiFi otomatik olarak yeniden nasıl bağlanır?


74

Pi'leri güç ölçerlerimi izlemek için kullanıyorum. Veriler, Edimax EW-7811UN USB adaptörü kullanılarak WiFi bağlantısı ile PC'ye aktarıldı. Wifi bağlantısı kesildiğinde (gece boyunca kapalı veya titrek bir bağlantı), USB adaptörü devre dışı kalır.

WiFi adaptörünü tekrar takmadan WiFi bağlantısını otomatik olarak yeniden başlatmanın bir yolu var mı?

Yanıtlar:


31

Ağ otomatik konfigürasyonunun ve bağlantı yönetimi arka plan programlarının çoğunu devre dışı bırakmayı ve kendimle ilgilenmeyi tercih ediyorum. İşte ağ orada olduğu sürece bağlantıyı sürdürecek ve bir aksak wifi sürücüsü ya da güç sorunları olmadıkça bir (bash) betiği; Buradaki amaç yönlendiriciye her N saniyede bir ping atmak ve bu başarısız olursa yeniden bağlanın:

#!/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

Yani, /etc/wifi.confbu durumda şunları içerebilir:

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

Bunların tümü açık şifrelenmemiş bir ağ varsayar (aksi takdirde uygun komutları eklemeniz gerekir). Bu yaklaşımı pi de dahil olmak üzere çeşitli linux makinelerinde kullandım ve kusursuz çalışıyor; Düzenli olarak uykuya geçse bile (ki pi'nin yapamadığı) bir sistemi süresiz olarak çevrimiçi tutacaktır.

İyi bir kontrol aralığı 3-5 saniyedir; Bu aktivite, sistem kaynaklarını hiç bir şekilde etkilemeyecektir.

Önce otomatik olarak ağ otomatik yapılandırmasını devre dışı bırakmanız gerekir ,. dahil olmak üzere ifplugdve diğer ağ kurma görevlileri de dahil , yoksa bu çabalarınızı engelleyecektir:

Raspbian'da otomatik yapılandırılmış ağı nasıl devre dışı bırakabilirim?

Aslında kullandım apt-get remove ifplugd.

Ağ açmayı başlatmak için (pi'yi başsız kullandığımdan beri), şu şekilde raspbian'da çalışacak şekilde ayarlamıştım /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/wifikomut dosyası. Ne için olduğunu bilmiyorsan nice, oku man nice.

Noktası ifböylece wifi başlamalıdır - benim wifi dongle pi takılırsa, 8192cu modülü bu noktada çekirdek tarafından yüklenecek olmasıdır. Eğer değilse, o zaman ethernetin takılı olduğu ve kullanılması gerektiği varsayılır (eğer değilse, dhclient çöker ve ağ erişimi olmaz).

Bunun çalışması için muhtemelen yapmanız gerekecek

Yani, bu açılışta ağa başsız bir pi alır ve orada tutar. Giriş yapmadan çalışırken ete geçiş yapmanın bir yolunu istiyorsanız , wifi dongle'ını çıkarmak için udev kuralları olan bir şey yapabilirsiniz .


Test etmeye değer. Linux olmayan bir program olarak, betiği başlangıçta çalışacak şekilde nasıl cron'a koyarım? Günlük döndürme eklemek de mümkün mü / gerekli mi?
andig

1
@ andig: Ben başlatma hakkında birkaç paragraf ekledim rc.local. WRT günlük dönüşü, genel olarak günlük dosyaları ile ilgili ayrı bir sorudur (ancak bakınız man logrotate). Şu anda, bu komut dosyası, eklemeden değil, aynı yolla mevcutsa önceki herhangi bir günlüğü gizler (üzerine yazar). Hata ayıklama için bazen wifi.$$.logwifi.conf dosyasında kullandım, böylece son günlüğü (olasılıkla) clobbered olur ve bir şeyi ayarladıktan sonra bir oturumu diğeriyle karşılaştırabilirim. $$"wifi" sürecinin pid.
goldilocks

Bazen kabuk komut dosyalarının kırılgan olabileceğinden ve güncelleme olduğunda veya başka bir ağ yazılımı yüklüyse yollarını görmek zorlaşabileceğinden endişe ediyorum. Bu yaklaşıma bir dikkat notu.
jeremiah

3
@jeremiah: Bu iyi bir korku. Senaryoyu yazdım, yıllar içinde çimdikledim ve çalıştığı genel bağlamı ve dolayısıyla neye dikkat etmem gerektiğini anladığımı hissediyorum. Bununla birlikte, anlaşmaya devam etmek kod parçacıklarından zordur. Bana göre bu, durumu çok temel unsurlara indirgeyerek NetworkManager ile çalışmaya çalışmak için alternatif bir yaklaşım. Bu, basit bir bağımsız sistem koşulunda, linux distro spektrumunda insanlara "benim için çalıştığım" gibi benzer bir bakış açısı sunan bir şeydir.
goldilocks

Öyleyse: Bu yayının farkındayım ve belli başlı dağıtımlardan biri (debia ve fedora ve türetilmiş) bunlarla uğraşan bir şey ortaya çıkarsa güncel kalmasını istiyorum. Ayrıca neyin devre dışı bırakılması gerektiği ve nasıl yapılması gerektiği ile ilgili noktalara biraz vurgu yapacağım.
goldilocks

68

Çok basit bir çözüm var:

  1. Git /etc/ifplugd/action.d/ve ifupdowndosyayı yeniden adlandırifupdown.original
  2. O zaman yapın: cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown
  3. En sonunda: sudo reboot

Bu kadar. AP'nizi kapatarak / açarak bunu test edin; Raspberry Pi'nizin doğru şekilde bağlandığını görmelisiniz.


2
Bu en basit ve en etkili cevaptır. 2 Rpi'de test edilmiştir ve çalışır. Bu linki bulundu: raspberrypi.org/phpBB3/…
Mauvis Ledford

12
Basit bir soru için üzgünüm - bu neden işe yarıyor?
Jeff Meatball Yang

@JeffMeatballYang, sorunuz için yeni bir konu başlat.
AndaluZ

6
Benim için orada ifupdown dosyası yoktu, sadece bir link vardı action_wpa -> ../../wpa_supplicant/action_wpa.sh, o yüzden belki bu şimdi varsayılandır?
Zitrax

2
Evet, diğerleri gibi düşünelim: Bu çalışmaz dhcpcd, temelli dağıtımlar bu Gerekirse RPI3 üzerinde çalışan almak için apt-get install rcconfve geçiş dhcpcdiçinnetworking
test30

21

Kısa bir süre önce tüm kablosuz yapılandırmayı cehenneme çeviren bir konsol uygulamasında rastladım. LAN arabirimini yapılandırmak için bu aracı da kullanabilirsiniz.

sudo apt-get install wicd-curses

Epeyce başka paketler kuracak ve arka planda kendi arka planını çalıştıracaktır ancak her şeyi yapılandırmayı çok daha kolay hale getirir. Çalıştır

sudo wicd-curses

görüntü tanımını buraya girin

Herhangi bir şebeke tespit edilemediğini belirten bir mesaj alırsanız, tuşuna basın P(büyük harf olmalıdır, bu yüzden [SHIFT] p kullanın) ve kablosuz arayüz alanına wlan0 yazın ve kaydetmek için F10 tuşuna basın.

  1. R Listeyi yenilemek için
  2. Listede aşağı yukarı gezinmek için klavyedeki imleçleri kullanın.
  3. Kablosuz bağlantıyı yapılandırmak için sağa basın
  4. Birkaç kez basın ve "Bu ağa otomatik olarak bağlan" seçeneğini işaretleyin
  5. Birkaç kez tekrar basın ve şifrenizi anahtar alanına yazın
  6. Kaydetmek için F10 tuşuna basın.

görüntü tanımını buraya girin

CErişim noktasına bağlanmak için tuşuna basmanız gerekebilir . Eğer kablolu olsaydınız, bu büyük olasılıkla LAN arayüzünü öldürür ve kablosuz açılır.

Aynı zamanda bağlantıyı da yönetir, böylece herhangi bir nedenden dolayı çıkarsa yapılandırılmış kablosuz erişim noktalarına yeniden bağlanacaktır.

WiFi adaptörünü takıp tekrar takmayı test ettim. Yaklaşık 60 ~ 90 saniye sürüyor, ancak WiFi'ye geri bağlanacak (LAN'ın takılı olmasına rağmen)

Umarım yardımcı olur!


1
Bunun yeniden bağlantıyı nasıl hallettiğinden emin değilim.
andig,

Yanıtı güncelledim çünkü otomatik olarak bağlanmayı kontrol etmeniz gereken bir adım var. Ayrıca tercihlerde tamamen aşağı kaydırmalısınız. Son seçenek ekran dışı. Ayrıca, Wifi için ağlara otomatik olarak bağlanmayı deneyin (varsayılan olarak AÇIK'tır). WiFi adaptörünü tekrar takabiliyorum ve 2 dakika içinde tekrar bağlanabiliyorum. (LAN takılı olmadan yaptım) Bu gerçekten kablosuz yapılandırmak ve yönetmek için bulduk en iyi yoldur. Ayrıca az önce denilen GUI versiyonunu da alırsınızwicd
Piotr Kula

"sudo wicd-cruses" komutunda 'u' ve 'r' komutunda bir yazım hatası var
Gawcio

wicd-cursesKurduktan sonra RPI 3'üm rastgele donmaya başladı. Daha önce hiç donmamıştım ve kaldırdığımda dondurma hemen kayboldu. Dikkat!
akhmed

1
Wicd-curses programını yükledikten sonra, Jessie Lite çalıştıran RPI 3'lerim donmadı ve bağlı kalıyorlar. Fakat bugün ethernet portu ile birine bağlanmayı denedim ve önyüklemeden birkaç saniye sonra arayüzün kaybedileceğini gördüm. Wifi'a bağlanmak için wicd-curses'u yapılandırmadan önce iyi bağlanabildim.
Chris Jenks,

14

Bu, fazladan komut dosyası olmadan çözülebilir.

/ Etc / network / interface arayüzlerinde:

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

Dolaşım, arabirimin kendi kendine iyileşmesini sağlar.


Son satır wlan0 arayüzüne ikinci bir IP adresi ekliyor gibi görünüyor; Bu kasıtlı mı?
fche

Sadece bir DHCP tarafından atanmış bir adres buldum. Önyükleme komut dosyalarının davranışını değiştirmiş olması beni şaşırtmazdı - bu yapılandırma dosyası gereksiz yere yayıldı ...
David Sainty

2
Raspbian pi2 kutumda, eğer wlan üç doğrulama aşaması başarısız olursa, wlan yeterince başarısız olursa, "wpa-roam" ile bile tekrar denemez.
18’de

RPI 3'te benim için çalışan tek cevap bu. Teşekkürler!
saat

1

netcfg

Dene netcfg. Hangi dağıtımı kullandığınızla ilgili daha fazla ayrıntı olmadan, daha fazla ayrıntı sağlayamıyorum, ancak istediğinizi yapmalı.


4
Şu anki raspbian distro'sunu kullanıyorum: pi @ raspberrypi ~ $ man netcfg netcfg pi @ raspberrypi için el ile giriş yok ~ $ netcfg -bash: netcfg: komut bulunamadı pi @ raspberrypi ~ $ apt-cache arama netcfg pi @ raspberrypi ~ $
andig

0

Başka bir çözüm, çıkarılmış olarak bu bir .
Öncelikle wifi ayarlarınızı yapılandırın: sudo vi /etc/wpa_supplicant/wpa_supplicant.confşuna benzer bir bölüm ekleyin :

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

Ardından ağ ayarlarınız 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

Ardından bu komut dosyasını bir yerde oluşturun, örneğin içinde /home/pi/reconnect.shve +xçalıştırılabilir olmasına izin verin .

#!/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

Sonra root olarak giriş yapın sudo suve root'un crontab komutunu düzenleyin crontab -e.
Bu dosyanın sonuna şu satırı ekleyin:

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

Bunun anlamı: "Bu betiği her 10 dakikada bir çalıştır (root olarak)"

Şimdi, bir bağlantınız varsa, komut dosyası çıkacak ve hiçbir şey olmayacak. Yönlendiricinize ping atamıyorsanız, komut dosyası wpa_supplicant kullanarak tekrar bağlanmaya çalışacaktır.

Bir cron betiğinden gelen her şeyin (bu durumda yalnızca bağlantı kesildiğinde) kök e-postaya gönderileceğini unutmayın. Bu nedenle, posta takma adlarınızı ve postscript'inizi yapılandırdıysanız, pi'nizin wifi bağlantısı kesildiğinde bir e-posta alacaksınız ve ardından komut dosyası sayesinde başarıyla geri döneceksiniz.


0

Bu benim için çalıştı, 30 Mart'ta Raspian Jessie kullanarak.

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


1
Lütfen bağlantının kopması durumunda yazınızdaki çözümü özetleyiniz.
tlhIngan

SPK, StackExchange'in RPi aromalı köşesine hoş geldiniz. Site politikası, yalnızca bağlantı çürümesine maruz kaldıklarından, bağlantıyı yalnızca önerilmez . Bağlantının içeriğini çoğaltmanıza gerek yoktur, ancak iyi bir yanıt, en azından bağlantıda yer alan vurgulamaları genişletmelidir.
Jacobm001

Jacobm001'in yukarıdaki yorumuna ek olarak, yalnızca bilgi içermeyen bağlantı cevaplarıyla ilgili politikamıza uygun olarak, eğer bu yazı bir cevap olarak yer alabilecek bilgiler içerecek şekilde düzenlenmemişse, ancak asgari olarak 48 saat içinde basitleştirilmesi için Topluluk Wiki'sine dönüştürülecek. topluluk tarafından düzeltildi.
17:17
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.