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.conf
dalam 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 ifplugd
dan 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/wifi
adalah skrip. Jika Anda tidak tahu untuk apa nice
, baca man nice
.
Intinya if
adalah 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.