मैं अधिकांश नेटवर्क ऑटो कॉन्फ़िगरेशन और कनेक्शन प्रबंधन डेमॉन सामान को अक्षम करना चाहता हूं और खुद से निपटता हूं। यहाँ (bash) स्क्रिप्ट है जो कि कनेक्शन को तब तक बनाए रखेगा जब तक नेटवर्क है और आपके पास एक गड़बड़ वाईफाई ड्राइवर या पावर इश्यू नहीं है; विचार राउटर को हर 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
यह सब एक खुले अनएन्क्रिप्टेड नेटवर्क को मानता है (यदि अन्यथा, आपको उपयुक्त कमांड जोड़ना होगा)। मैंने विभिन्न लाइनक्स मशीनों पर इस दृष्टिकोण का उपयोग किया है, जिसमें पाई भी शामिल है, और यह त्रुटिपूर्ण रूप से काम करता है; यह एक प्रणाली को अनिश्चित काल तक ऑनलाइन रखेगा, भले ही यह समय-समय पर सो जाए (जो पीआई वैसे भी नहीं कर सकता)।
एक सभ्य चेक अंतराल 3-5 सेकंड है; यह गतिविधि सिस्टम संसाधनों को बिल्कुल प्रभावित नहीं करेगी।
आपको पहले नेटवर्क ऑटो-कॉन्फ़िगरेशन को अक्षम करने की आवश्यकता है , सहित ifplugd
और अन्य नेटवर्किंग डेमन, या यह आपके प्रयासों में हस्तक्षेप करेगा:
मैं रास्पबियन पर ऑटोकॉन्फ़िगर्ड नेटवर्किंग को कैसे अक्षम कर सकता हूं?
मैं वास्तव में इस्तेमाल किया apt-get remove ifplugd
।
बूट पर नेटवर्किंग शुरू करने के लिए (चूंकि मैं पीआई हेडलेस का उपयोग करता हूं), मेरे पास यह सेट है कि मैं रास्पियन से चला जाऊं /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
है कि अगर मेरे वाईफाई डोंगल को पीआई में प्लग किया जाता है, तो 8192cu मॉड्यूल को इस बिंदु पर कर्नेल द्वारा लोड किया जाएगा - इसलिए वाईफाई शुरू होना चाहिए। यदि नहीं, तो यह माना जाता है कि ईथरनेट को प्लग किया गया है और इसका उपयोग किया जाना चाहिए (यदि ऐसा नहीं है, तो dhclient सिर्फ बकवास करेगा और नेटवर्क एक्सेस नहीं है)।
इस काम के लिए आपको शायद करना होगा
इसलिए, यह बूट पर नेटवर्क पर एक हेडलेस पाई प्राप्त करता है और इसे वहां रखता है। यदि आप लॉग-इन किए बिना दौड़ते हुए एथ पर स्विच करने का एक तरीका चाहते थे, तो आप वाईफाई डोंगल को बाहर निकालने के लिए udv नियमों के साथ कुछ कर सकते थे।