Bagaimana cara menghubungkan kembali WiFi secara otomatis?

74

Saya menggunakan pi saya untuk memonitor meter kekuatan saya. Data ditransfer ke PC melalui koneksi WiFi menggunakan adaptor USB Edimax EW-7811UN. Ketika koneksi Wifi turun (dimatikan malam hari, atau koneksi yang goyah), adaptor USB tetap dinonaktifkan.

Apakah ada cara untuk me-restart koneksi WiFi secara otomatis tanpa memasukkan kembali adaptor WiFi?

andig
sumber

Jawaban:

31

Saya lebih suka menonaktifkan sebagian besar konfigurasi jaringan otomatis dan hal-hal daemon manajemen koneksi dan menanganinya sendiri. Berikut ini skrip (bash) yang akan menjaga koneksi selama jaringan masih ada dan Anda tidak memiliki driver wifi yang bermasalah atau masalah daya; idenya adalah melakukan ping ke router setiap N detik, dan jika itu gagal, sambungkan kembali:

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

Jadi, /etc/wifi.confdalam hal ini mungkin mengandung:

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

Ini semua menganggap jaringan terbuka tidak terenkripsi (jika tidak, Anda harus menambahkan perintah yang sesuai). Saya telah menggunakan pendekatan ini pada berbagai mesin linux, termasuk pi, dan ia bekerja dengan sempurna; itu akan membuat sistem online tanpa batas, bahkan jika secara berkala pergi tidur (yang pi tidak bisa tetap).

Interval pemeriksaan yang layak adalah 3-5 detik; kegiatan ini tidak akan berdampak signifikan terhadap sumber daya sistem sama sekali.

Anda benar-benar perlu menonaktifkan konfigurasi jaringan terlebih dahulu ,. termasuk ifplugddan daemon jaringan lainnya, atau ini akan mengganggu upaya Anda:

Bagaimana saya bisa menonaktifkan jaringan yang dikonfigurasi otomatis pada Raspbian?

Saya sebenarnya digunakan apt-get remove ifplugd.

Untuk memulai jaringan saat boot (karena saya menggunakan pi headless), saya memiliki set ini untuk dijalankan pada raspbian dari /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/wifiadalah skrip. Jika Anda tidak tahu untuk apa nice, baca man nice.

Intinya ifadalah bahwa jika dongle wifi saya dicolokkan ke pi, modul 8192cu akan dimuat oleh kernel pada saat ini - jadi wifi harus dimulai. Jika tidak, maka diasumsikan bahwa ethernet dicolokkan dan harus digunakan (jika tidak, dhclient hanya akan omong kosong dan tidak ada akses jaringan).

Agar ini berfungsi, Anda mungkin harus melakukannya

Jadi, ini mendapatkan pi tanpa kepala ke jaringan saat boot dan menyimpannya di sana. Jika Anda ingin cara untuk beralih ke eth saat berjalan tanpa masuk, Anda bisa melakukan sesuatu dengan aturan udev untuk menarik dongle wifi keluar.

goldilocks
sumber
Kedengarannya layak untuk diuji. Bukan menjadi linux pro- bagaimana saya mengatur script untuk dijalankan pada startup-dimasukkan ke cron? Apakah mungkin / perlu menambahkan rotasi log juga?
andig
1
@ andig: Saya menambahkan beberapa paragraf tentang start-up via rc.local. Rotasi log WRT, yaitu pertanyaan terpisah yang berhubungan dengan file log secara umum (tetapi lihat man logrotate). Sekarang skrip itu akan mengecam (menimpa) log sebelumnya jika ada dengan jalur yang sama, bukan ditambahkan. Untuk debugging saya kadang-kadang digunakan wifi.$$.logdalam file wifi.conf, sehingga log terakhir adalah (tidak mungkin) untuk musnah dan saya dapat membandingkan satu sesi dengan yang lain setelah saya men-tweak sesuatu. $$adalah pid dari proses "wifi".
goldilocks
Saya khawatir bahwa kadang-kadang skrip shell dapat rapuh dan sulit ditemukan ketika ada pembaruan atau jika perangkat lunak jaringan lainnya diinstal. Sekadar mengingatkan tentang pendekatan ini.
jeremiah
3
@ Jeremiah: Itu ketakutan yang bagus. Saya menulis naskahnya, men-tweak-nya selama bertahun-tahun, dan merasa saya memiliki pemahaman tentang konteks umum di mana ia beroperasi dan oleh karena itu apa yang perlu saya perhatikan. Namun, mungkin lebih sulit untuk meneruskan pemahaman daripada cuplikan kode. Bagi saya itu hanyalah pendekatan alternatif untuk mencoba bekerja dengan NetworkManager, dengan mengurangi situasi menjadi beberapa elemen yang sangat mendasar. Ini adalah sesuatu untuk menawarkan orang-orang dengan perspektif yang sama seperti "ini yang bekerja untuk saya" di seluruh spektrum distro linux dalam keadaan sistem yang berdiri sendiri sederhana.
goldilocks
Jadi: Saya mengetahui postingan ini dan bermaksud memperbaruinya jika salah satu distro stream utama (debia dan fedora dan turunannya) memperkenalkan sesuatu yang mengacaukannya. Saya juga akan menambahkan beberapa penekanan pada poin tentang apa yang perlu dinonaktifkan dan bagaimana caranya.
goldilocks
68

Nah, ada solusi yang sangat sederhana:

  1. Pergi ke /etc/ifplugd/action.d/dan ganti nama ifupdownfile menjadiifupdown.original
  2. Kemudian lakukan: cp /etc/wpa_supplicant/ifupdown.sh ./ifupdown
  3. Akhirnya: sudo reboot

Itu saja. Uji ini dengan mematikan / menggunakan AP Anda; Anda harus melihat bahwa Raspberry Pi Anda terhubung kembali dengan benar.

AndaluZ
sumber
2
Ini adalah jawaban paling sederhana dan paling efektif. Diuji pada 2 Rpi dan berhasil. Menemukan tautan ini dari: raspberrypi.org/phpBB3/…
Mauvis Ledford
12
Maaf untuk pertanyaan sederhana - mengapa ini berhasil?
Jeff Meatball Yang
@JeffMeatballYang, mulai utas baru untuk pertanyaan Anda.
AndaluZ
6
Bagi saya tidak ada file ifupdown di sana, hanya sebuah tautan action_wpa -> ../../wpa_supplicant/action_wpa.sh, jadi mungkin ini adalah default sekarang?
Zitrax
2
Yap, seperti yang dikatakan orang lain: ini tidak bekerja pada dhcpcddistro berbasis, untuk menjalankan ini pada RPI3 Anda perlu apt-get install rcconfdan beralih dari dhcpcdkenetworking
test30
22

Baru-baru ini saya menemukan aplikasi konsol yang menyortir semua konfigurasi nirkabel. Anda juga dapat menggunakan alat ini untuk mengkonfigurasi antarmuka LAN.

sudo apt-get install wicd-curses

Ini akan menginstal beberapa paket lain dan menjalankan daemonnya sendiri di latar belakang, tetapi tentu saja membuat semuanya lebih mudah. Jalankan dengan

sudo wicd-curses

masukkan deskripsi gambar di sini

Jika Anda menerima pesan yang mengatakan tidak ada jaringan yang terdeteksi, tekan P(harus huruf besar, jadi gunakan [SHIFT] p) dan ketik wlan0 di bidang antarmuka nirkabel dan tekan F10 untuk menyimpan.

  1. R untuk menyegarkan daftar.
  2. Gunakan kursor pada keyboard untuk menavigasi daftar ke atas dan ke bawah
  3. Tekan kanan untuk mengonfigurasi koneksi nirkabel
  4. Tekan beberapa kali dan centang "Sambungkan secara otomatis ke jaringan ini"
  5. Tekan beberapa kali lagi dan ketik kata sandi Anda di bidang kunci
  6. Tekan F10 untuk menyimpan

masukkan deskripsi gambar di sini

Anda mungkin harus menekan Cuntuk menghubungkan ke titik akses. Jika Anda menggunakan kabel, kemungkinan besar akan mematikan antarmuka LAN dan memunculkan nirkabel.

Itu juga mengelola koneksi sehingga akan menyambung kembali ke titik akses nirkabel yang dikonfigurasi jika putus karena alasan apa pun.

Saya diuji memasukkan adaptor WiFi dan memasangnya kembali. Butuh sekitar 60 ~ 90 detik tetapi itu akan terhubung kembali ke WiFi (saya pikir LAN harus dicabut meskipun)

Semoga ini bisa membantu!

Piotr Kula
sumber
1
Tidak yakin bagaimana cara menangani koneksi ulang-koneksi awal bukan pertanyaan di sini!
andig
Saya memperbarui jawabannya karena ada langkah di mana Anda harus memeriksa koneksi secara otomatis. Juga dalam preferensi Anda harus gulir ke bawah. Opsi terakhir adalah layar mati. Ia juga mengatakan Secara otomatis mencoba terhubung ke jaringan untuk Wifi (ini AKTIF secara default). Saya bahkan dapat mengeluarkan konektor adaptor WiFi kembali dan akan terhubung kembali dalam 2 menit. (Saya melakukan ini tanpa LAN terpasang) Ini benar-benar cara terbaik yang saya temukan untuk mengkonfigurasi dan mengelola nirkabel. Anda juga mendapatkan versi GUI yang baru saja dipanggilwicd
Piotr Kula
ada kesalahan ketik pada perintah "sudo wicd-cruses" 'u' dan 'r' dipertukarkan
Gawcio
Setelah menginstal wicd-curses, RPi 3 saya mulai membeku secara acak. Tidak pernah membeku sebelumnya dan pembekuan menghilang segera setelah saya mencopotnya. Waspadalah!
akhmed
1
Setelah menginstal kutukan-wicd, RPi 3 saya yang menjalankan Jessie Lite belum membeku dan tetap terhubung. Tetapi hari ini saya mencoba menghubungkan satu dengan port ethernet, dan menemukan antarmuka akan hilang beberapa detik setelah boot. Saya dapat terhubung dengan baik sebelum mengkonfigurasi kutukan wicd untuk terhubung ke wifi.
Chris Jenks
14

Ini dapat diselesaikan tanpa skrip tambahan.

Di / etc / network / interfaces put:

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

Roaming memungkinkan antarmuka untuk sembuh sendiri.

David Sainty
sumber
Baris terakhir tampaknya menambahkan alamat IP kedua ke antarmuka wlan0; Apakah itu disengaja?
fche
Saya hanya berakhir dengan satu alamat yang ditetapkan DHCP. Itu tidak akan mengejutkan saya sepenuhnya jika skrip boot telah mengubah perilaku - file konfigurasi ini tidak perlu misterius ...
David Sainty
2
Pada kotak pi2 raspbian saya, jika wlan turun cukup lama untuk tiga siklus upaya otentikasi gagal, bahkan dengan "wpa-roam" itu tidak mencoba lagi.
fche
Ini adalah satu-satunya jawaban yang bekerja untuk saya di RPi 3. Terima kasih!
akhmed
1

netcfg

Coba netcfg. Tanpa perincian lebih lanjut tentang distribusi mana yang Anda gunakan, saya tidak dapat memberikan lebih banyak perincian lagi, tetapi harus melakukan apa yang Anda inginkan.

Alex Chamberlain
sumber
4
Saya menggunakan distro raspbian saat ini: pi @ raspberrypi ~ $ man netcfg Tidak ada entri manual untuk netcfg pi @ raspberrypi ~ $ netcfg -bash: netcfg: perintah tidak ditemukan pi @ raspberrypi ~ $ pencarian apt-cache netcfg pi @ raspberrypi ~ $
andig
0

Solusi lain, seperti yang diekstrak dari yang ini .
Pertama-tama konfigurasikan pengaturan wifi Anda: sudo vi /etc/wpa_supplicant/wpa_supplicant.confmenambahkan bagian seperti ini:

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

Kemudian pengaturan jaringan Anda dengan 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

Kemudian buat file skrip ini di suatu tempat, misalnya di /home/pi/reconnect.shdan berikan +xizin untuk dieksekusi.

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

Kemudian login sebagai root dengan sudo sudan edit crontab root dengan crontab -e.
Di akhir file ini tambahkan baris ini:

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

Itu berarti: "jalankan script itu setiap 10 menit (sebagai root)"

Sekarang, jika Anda memiliki koneksi maka skrip akan keluar dan tidak ada yang terjadi. Jika Anda tidak dapat melakukan ping router, maka skrip akan mencoba menyambung kembali menggunakan wpa_supplicant.

Perhatikan bahwa segala sesuatu yang digaungkan dari skrip cron (dalam hal ini hanya saat terputus) akan diemail ke root. Jadi jika Anda telah mengonfigurasi alias email dan catatan tambahan Anda, maka Anda akan menerima email setiap kali koneksi wifi pi Anda turun dan kemudian berhasil kembali lagi berkat skripnya.

Leonardo
sumber
0

Ini berhasil bagi saya, menggunakan Raspian Jessie pada 30 Maret 2014:

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

Colorado MountainBoy
sumber
1
Harap rangkum solusi di pos Anda, jika tautannya mati.
tlhIngan
CMB, selamat datang di sudut RPi StackExchange. Kebijakan situs hanya mencegah jawaban tautan karena tunduk pada pembusukan tautan. Anda tidak perlu menduplikasi konten tautan, tetapi jawaban yang baik setidaknya harus memperluas sorotan yang terkandung dalam tautan.
Jacobm001
Lebih jauh dari komentar Jacobm001 di atas, sesuai dengan kebijakan kami mengenai jawaban tanpa tautan saja, jika posting ini tidak diedit mengandung informasi yang dapat dijadikan jawaban, namun minimal, dalam 48 jam akan dikonversi ke Komunitas Wiki untuk menyederhanakan memiliki itu dikoreksi oleh masyarakat.
goobering