Tôi thích vô hiệu hóa hầu hết các công cụ daemon cấu hình và quản lý kết nối tự động và tự xử lý nó. Đây là tập lệnh (bash) sẽ duy trì kết nối miễn là mạng ở đó và bạn không gặp phải sự cố về trình điều khiển wifi hoặc sự cố về điện; ý tưởng là ping bộ định tuyến mỗi N giây và nếu thất bại, hãy kết nối lại:
#!/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
Vì vậy, /etc/wifi.conf
trong trường hợp này có thể chứa:
router_ip=192.168.0.1
log=/var/log/wifi.log
wlan=wlan0
eth=eth0
essid=someNetwork
check_interval=5
Tất cả điều này giả định một mạng không được mã hóa mở (nếu không, bạn sẽ phải thêm các lệnh thích hợp). Tôi đã sử dụng phương pháp này trên các máy linux khác nhau, bao gồm cả pi và nó hoạt động hoàn hảo; nó sẽ giữ cho một hệ thống trực tuyến vô thời hạn, ngay cả khi nó định kỳ đi ngủ (điều mà dù sao thì pi cũng không thể).
Một khoảng thời gian kiểm tra tốt là 3-5 giây; hoạt động này sẽ không ảnh hưởng đáng kể đến tài nguyên hệ thống.
Bạn hoàn toàn cần phải vô hiệu hóa cấu hình tự động mạng trước tiên ,. bao gồm ifplugd
và các trình nền mạng khác, hoặc điều này sẽ cản trở nỗ lực của bạn:
Làm cách nào tôi có thể tắt kết nối mạng được cấu hình tự động trên Raspbian?
Tôi thực tế đã sử dụng apt-get remove ifplugd
.
Để bắt đầu kết nối mạng khi khởi động (vì tôi sử dụng pi không đầu), tôi có bộ này để chạy trên raspbian từ /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
là kịch bản. Nếu bạn không biết cái gì nice
để làm, hãy đọc man nice
.
Điểm quan trọng if
là nếu dongle wifi của tôi được cắm vào pi, mô-đun 8192cu sẽ được nạp bởi kernel vào thời điểm này - vì vậy wifi nên bắt đầu. Nếu không, thì giả sử rằng ethernet đã được cắm và nên được sử dụng (nếu không, dhclient sẽ ngừng hoạt động và không có quyền truy cập mạng).
Để làm việc này có lẽ bạn sẽ phải
Vì vậy, điều này nhận được một pi không đầu vào mạng khi khởi động và giữ nó ở đó. Nếu bạn muốn có một cách để chuyển sang eth trong khi chạy mà không cần đăng nhập, bạn có thể làm gì đó với các quy tắc udev để kéo dongle wifi ra.