ฉันชอบที่จะปิดการใช้งานการกำหนดค่าอัตโนมัติของเครือข่ายและการจัดการการเชื่อมต่อสิ่งต่างๆและจัดการด้วยตัวเอง นี่คือสคริปต์ (ทุบตี) ที่จะทำให้การเชื่อมต่อของเครือข่ายตราบใดที่มีอยู่และคุณไม่มีไดรเวอร์ wifi หรือปัญหาด้านพลังงานที่ผิดพลาด แนวคิดคือการ ping เราเตอร์ทุก ๆ 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
ดังนั้น/etc/wifi.conf
ในกรณีนี้อาจมี:
router_ip=192.168.0.1
log=/var/log/wifi.log
wlan=wlan0
eth=eth0
essid=someNetwork
check_interval=5
ทั้งหมดนี้ทึกทักเครือข่ายที่ไม่ได้เข้ารหัสเปิด (ถ้าเป็นอย่างอื่นคุณจะต้องเพิ่มคำสั่งที่เหมาะสม) ฉันใช้วิธีนี้กับเครื่อง linux ที่หลากหลายรวมถึง pi และใช้งานได้อย่างไม่มีที่ติ มันจะทำให้ระบบออนไลน์ไม่สิ้นสุดแม้ว่ามันจะเข้าสู่โหมดสลีปเป็นระยะ (ซึ่งไพก็ไม่สามารถทำได้)
ช่วงเวลาตรวจสอบที่เหมาะสมคือ 3-5 วินาที; กิจกรรมนี้จะไม่ส่งผลกระทบอย่างมีนัยสำคัญต่อทรัพยากรระบบเลย
คุณอย่างจะต้องปิดการใช้งานเครือข่ายการกำหนดค่าอัตโนมัติครั้งแรก , รวมถึงifplugd
และ daemons เครือข่ายอื่น ๆ หรือสิ่งนี้จะรบกวนความพยายามของคุณ:
ฉันจะปิดการใช้งานเครือข่ายที่กำหนดค่าโดยอัตโนมัติบน 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
ก็คือว่าถ้าดองเกิล wifi ของฉันเสียบเข้ากับปี่โมดูล 8192cu จะถูกโหลดโดยเคอร์เนล ณ จุดนี้ - ดังนั้น WiFi ควรเริ่มต้น ถ้าไม่เช่นนั้นจะสันนิษฐานว่าอีเธอร์เน็ตเสียบปลั๊กและควรใช้ (ถ้าไม่ใช่, dhclient จะเพิ่งอึและไม่มีการเข้าถึงเครือข่าย)
สำหรับการทำงานคุณอาจจะต้อง
ดังนั้นสิ่งนี้จะได้รับ pi ที่ไม่มีส่วนหัวบนเครือข่ายเมื่อบูตและเก็บไว้ที่นั่น หากคุณต้องการวิธีเปลี่ยนเป็น eth ในขณะที่ทำงานโดยไม่ต้องลงชื่อเข้าใช้คุณสามารถทำอะไรกับกฎ udevเพื่อดึง wifi dongle ออก