यदि वायर्ड / केबल नेटवर्क उपलब्ध है तो WLAN को अक्षम करें


39

सवाल यह सब कहता है। मैं केवल इतना चाहता हूं कि जब भी कोई वायर्ड कनेक्शन उपलब्ध हो, तो मेरा डब्ल्यू-लैन कनेक्शन अक्षम कर दिया जाए। उबंटू / सूक्ति में ऐसा करने का सबसे आसान तरीका क्या होगा?

सभी गाइडों में (उदाहरण के लिए कुछ के बारे में अनुमान) मुझे लगता है कि मुझे अपने पूरे नेटवर्क कॉन्फ़िगरेशन (WPA कुंजी, DHCP, ...) को कॉन्फ़िगर करना था, लेकिन मुझे लगता है कि इस तरह के एक सरल उपयोग के मामले में थोड़ा जटिल है। मैं जुड़ा wlan0होने पर सिर्फ अक्षम करना चाहता हूं eth0


इस प्रश्न का उत्तर कंप्यूटर से कंप्यूटर में भिन्न होता है। मुझे नहीं पता कि उबंटू इसकी अनुमति देता है, लेकिन आमतौर पर मैंने पाया है कि यह BIOS में एक विकल्प है।
इस्ज़ि

मेरा मतलब completely disableवलन नहीं है , मेरा मतलब है कि अगर कोई तार कनेक्शन उपलब्ध है तो किसी भी wlans से जुड़ने की कोशिश करने के लिए उबंटू को निष्क्रिय कर दें। तो यह एक ओएस बात है।
इंगो फिशर

जवाबों:


55

आप इस स्क्रिप्ट को छोड़ सकते हैं /etc/NetworkManager/dispatcher.d/99-wlan:

#!/bin/bash
wired_interfaces="en.*|eth.*"
if [[ "$1" =~ $wired_interfaces ]]; then
    case "$2" in
        up)
            nmcli radio wifi off
            ;;
        down)
            nmcli radio wifi on
            ;;
    esac
fi

बाद में मत भूलना:

chmod +x /etc/NetworkManager/dispatcher.d/99-wlan

यह विरासत के eth*नाम और नए कर्नेल "अनुमानित नाम इंटरफेस" को पकड़ता है जो इसके साथ शुरू होते हैं enऔर फिर बस पथ या मैक पते का उपयोग करते हैं ताकि प्रत्येक बूट पर प्रत्येक इंटरफ़ेस का नाम समान हो। इसने USB-C (passthrough) और USB ईथरनेट एडेप्टर के साथ काम किया जिसकी मैंने कोशिश की और मुझे विश्वास है कि यह बिल्ट-इन एडेप्टर के साथ भी काम करेगा।


मेरा वायरलेस बार-बार जुड़ने की कोशिश कर रहा था और यह वास्तव में परेशान करने वाला था। इस स्क्रिप्ट के लिए धन्यवाद, इसने आखिरकार मुझसे नेटवर्क पासवर्ड मांगना बंद कर दिया। जब मैं अपने कंप्यूटर को रिबूट करूंगा तो क्या स्क्रिप्ट अपने आप शुरू हो जाएगी?
जोएल लॉर्ड

2
@joellord: नेटवर्क इंटरफ़ेस शुरू या बंद होने पर यह स्क्रिप्ट हर बार स्वचालित रूप से चलती है। जब आप eth0 को डिस्कनेक्ट करते हैं, तो आपका वायरलेस सक्षम हो जाता है। जब आप eth0 कनेक्ट करते हैं, तो आपका वायरलेस अक्षम हो जाता है।
फोर्ड

1
ठोस - पूरी तरह से और अच्छी न्यूनतम स्क्रिप्ट काम करती है।
वायु

3
Nmcli संस्करण 1.0.2 के साथ मुझे `nmcli nm wifi` बदलना पड़ा nmcli r wifi जहाँ रेडियो काr अर्थ है
Alessandro Pezzato

1
Ubuntu 16.04, bash संस्करण 4.3.48, इस स्क्रिप्ट को काम करने के लिए उद्धरण हटाने की आवश्यकता है।
कार्ल्स सला

8

नेटवर्क मैनेजर के v0.9.10 के बाद से, पहली स्क्रिप्ट को संशोधित करना होगा

#!/bin/bash

if [ "$1" = "eth0" ]; then
    case "$2" in
        up)
            nmcli radio wifi off
            ;;
        down)
            nmcli radio wifi on
           ;;
   esac
fi

आशा करता हूँ की ये काम करेगा!


यह शायद एक स्टैंडअलोन जवाब हो सकता है। यह कहने में बेहद मदद मिलेगी कि नेटवर्क प्रबंधक का यह परिवर्तन किस संस्करण के साथ होता है।
जर्नीमैन गीक

v0.9.10 के बाद से लगता है। wiki.gnome.org/Projects/NetworkManager/nmcli
mruellan

यह समाधान सही नहीं है, क्योंकि यह केवल तभी काम करता है जब आपके लैन इंटरफेस को "eth0" कहा जाता है।
कार्ल्स सला

4

सरल गुई दृष्टिकोण के लिए काफी ...

  1. अपनी घड़ी के ऊपर सूक्ति पैनल में नेटवर्क सिस्टम संकेतक पर राइट क्लिक करें। (संकेतक दो आइकन में से एक होगा; या तो ऊपर / नीचे तीर (LAN) या पारंपरिक WiFi फ़नल। ध्यान दें कि अप / डाउन आइकन तब दिखाई देगा जब LAN और WiFi या केवल LAN कनेक्टेड हों और WiFi फ़नल तब दिखाई दे जब केवल वाईफाई के माध्यम से जुड़ा हुआ है। (LAN डिस्कनेक्टेड)) - [LAN स्वचालित रूप से वाईफाई को ट्रम्प करता है। *)

  2. 'कनेक्शन संपादित करें ...' चुनें

  3. 'वायरलेस' टैब चुनें।
  4. अपनी सूची में पहले कनेक्शन पर डबल क्लिक करें और 'कनेक्ट स्वचालित रूप से' बॉक्स को अनचेक करें।
  5. 'लागू करें ...' बटन पर क्लिक करें।
  6. सूची में प्रत्येक कनेक्शन के लिए दोहराएं।

यह वायरलेस नेटवर्क को ऑन-द-फ्लाई मैनुअल कनेक्शन के लिए चालू कर देगा और नेटवर्क आइकन पर बाईं ओर उपलब्ध डिस्कनेक्ट हो जाएगा, बिना एनएम आपको स्वचालित रूप से हर समय कनेक्ट करने की कोशिश करेगा।

स्वाभाविक रूप से आप नेटवर्क आइकन पर राइट क्लिक करके भी वायरलेस को अक्षम / सक्षम कर सकते हैं और फिर "वायरलेस सक्षम करें" चयन पर क्लिक करके प्रभावी रूप से चेक मार्क की उपस्थिति या अनुपस्थिति के द्वारा वायरलेस इंटरफ़ेस को प्रभावी ढंग से नीचे या ऊपर ला सकते हैं।

  • LAN स्वचालित रूप से WiFi को ट्रम्प कर देता है, WiFi को अक्षम करने की कोई आवश्यकता नहीं है। बस अपने ईथरनेट केबल को अनप्लग करना वाईफाई से कनेक्शन को मूल रूप से स्थानांतरित कर देगा और आप बिना किसी उपद्रव के उठा सकते हैं और स्थानांतरित कर सकते हैं। इसी तरह, LAN को फिर से जोड़ने के साथ।
  • जबकि LAN ट्रम्प वाईफाई को NM (नेटवर्क मैनेजर) करता है, आप जो चाहते हैं वह आपको अलग-अलग नेटवर्क पर एक साथ चाहिए और ऑनलाइन (WiFi) और स्थानीय होस्ट (LAN) या V / V उदाहरण के लिए दोनों के साथ काम कर रहे हैं।

2

बस एक अनुमान है, लेकिन मुझे लगता है कि ifplugd मदद कर सकता है। जब केबल का उपयोग किया जाता है तो आप इसे बंद कर सकते हैं।


धन्यवाद, मैं पहले से ही उस के बारे में पढ़ा। अगर मुझे इप्लग्ड के बारे में पसंद नहीं है, तो मुझे अपनी सभी नेटवर्क सेटिंग्स में डालनी होंगी /etc/network/interfaces। मैं नेटवर्किंग सामान में बहुत अच्छा नहीं हूं, इसलिए मुझे आश्चर्य है कि मुझे अपने मौजूदा कनेक्शन से सभी आवश्यक मूल्य कहां मिल सकते हैं? फिर भी आशा है कि एक सरल उपाय है।
इंगो फिशर

1

दो सरल 'स्क्रिप्ट्स' बनाएं, स्क्रिप्ट का नाम महत्वपूर्ण नहीं है (मैं बस wlan का उपयोग करता हूं) और मेरा मानना ​​है कि केवल एक ही cabled नेटवर्क इंटरफ़ेस है, और इस प्रकार इसे 'eth0' कहा जाता है ... यदि आप 'ifconfig' से इसे देखें। 'यकीन नहीं होता। ध्यान दें कि यह पूरी तरह से वायरलेस अक्षम है, न कि केवल wlan0। (केवल एक मुद्दा यदि आपके पास कई वेलन इंटरफेस हैं और केवल विशिष्ट लोगों को अक्षम करना चाहते हैं)

इन लिपियों को आसानी से अनुकूलित किया जा सकता है - बूलियन तर्क द्वारा - ऐसी स्थिति में जिसमें आपके पास दो या अधिक अक्षम नेटवर्क इंटरफेस हैं।

सुनिश्चित करें कि ये स्क्रिप्ट 'chmod + x' के साथ निष्पादन योग्य हैं

/etc/network/ip-up.d/wlan

#!/bin/sh
# If eth0 goes up, disable wireless
if [ "$IFACE" = "eth0" ]; then
  dbus-send --system --type=method_call --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.DBus.Properties.Set string:org.freedesktop.NetworkManager string:WirelessEnabled variant:boolean:false
fi

/etc/network/if-down.d/wlan

#!/bin/sh
# If eth0 goes down, enable wireless
if [ "$IFACE" = "eth0" ]; then
  dbus-send --system --type=method_call --dest=org.freedesktop.NetworkManager /org/freedesktop/NetworkManager org.freedesktop.DBus.Properties.Set string:org.freedesktop.NetworkManager string:WirelessEnabled variant:boolean:true
fi

यह NetworkManager में वायरलेस को सक्षम / अक्षम करता है जिसे आमतौर पर Gnome पैनल में सिस्टम इंडिकेटर के रूप में पाया जा सकता है।

आप dbus-send लाइन के बजाय 'ifconfig wlan0 डाउन' या 'ifconfig wlan0 up' का भी उपयोग कर सकते हैं, लेकिन यह अधिक उपयोगकर्ता के अनुकूल होना चाहिए और Ubuntu के सिस्टम उपयोगिताओं के साथ कम हस्तक्षेप करना चाहिए।

उबंटू डेस्कटॉप 10.10 के साथ परीक्षण किया गया, और पहले संस्करण या अन्य वितरण के साथ काम करना चाहिए NetworkManager और dbus का उपयोग करना।


यह संभवतः कार्यात्मक रूप से स्वीकृत nmcli radio wifi offउत्तरों के बराबर है, लेकिन मुझे यह देखने के लिए उत्सुक होना पड़ेगा कि कनेक्शन को बंद करने के दौरान सिस्टम लॉग क्या रिपोर्ट करता है, यह देखने के लिए कि क्या कोई और "सुशोभित" है।
ड्रैगन 788

1

यह मेरे लिए डेबियन अस्थिर, कर्नेल> 3.17 में काम करता है

#!/bin/sh
myname=$(basename "$0") || exit 1
log() { logger -p user.info -t "${myname}[$$]" "$*"; }
IFACE=$1
ACTION=$2

case ${IFACE} in
    eth*|usb*)
        case ${ACTION} in
            up)
                nmcli r wifi off
                ;;
            down)
                nmcli r wifi on
                ;;
        esac
        ;;
esac

1

यह सिरिल फेसेल के पिछले उत्तर पर एक सुधार है। फेडोरा के लिए भी है, जहां नेटवर्क इंटरफेस अब जैसे नाम हो सकता है (मैं टिप्पणी करने के लिए प्रतिष्ठा की जरूरत नहीं है।) यह एक काम करता है wlan0, wlp6s0, em1और enp0s20u2u1)। यह भिन्नता इंटरफ़ेस के नाम पर मेल खाने की कोशिश नहीं करती है, बल्कि /sys/class/netडिवाइस पर जानकारी के लिए दिखती है। मेरे फेडोरा 21 लैपटॉप (कर्नेल 3.18) पर काम करता है, और मुझे विश्वास है कि यह डेबियन> = 7 पर भी काम करेगा।

#! / Bin / श

[$ # -ज 2] || बाहर निकलें 1

डीबग = false
STATEDIR = / var / रन / एनएम वायर्ड
mkdir -p $ STATEDIR

IFace = $ 1
कार्रवाई = $ 2

myname = $ (बेसन "$ 0") || बाहर निकलें 1
log () {logger -p user.info -t "$ {myname} [$$]" "$ IFACE / $ ACTION: $ *"; }

यदि $ DEBUG; फिर
    अगर [-e "/ sys / class / net / $ IFACE / डिवाइस"]; फिर
        लॉग "/ sys / वर्ग / नेट / $ IFACE / डिवाइस मौजूद है"
    अन्य
        लॉग "/ sys / वर्ग / नेट / $ IFACE / डिवाइस मौजूद नहीं है"
    फाई

    अगर [-e "/ sys / वर्ग / नेट / $ IFACE / वायरलेस"]; फिर
        लॉग "/ sys / वर्ग / नेट / $ IFACE / वायरलेस मौजूद है"
    अन्य
        लॉग "/ sys / वर्ग / नेट / $ IFACE / वायरलेस मौजूद नहीं है"
    फाई
फाई

मामला $ {ACTION} में
    तक)
        rm -rf $ STATEIR / $ IFACE

        # अगर यह एक भौतिक उपकरण नहीं है तो कुछ भी न करें।
        अगर [ ! -e "/ sys / class / net / $ IFACE / डिवाइस"]; फिर
            लॉग करें "$ IFACE एक भौतिक उपकरण नहीं है - अनदेखी"
            बाहर निकलें 0
        फाई

        # अगर यह एक वायरलेस डिवाइस है तो कुछ भी न करें।
        अगर [-d "/ sys / class / net / $ IFACE / वायरलेस"]; फिर
            "$ IFACE एक वायर्ड डिवाइस नहीं है - उपेक्षा"
            बाहर निकलें 0
        फाई

        # तार वाले उपकरणों का ध्यान रखें। जब वे नीचे जाते हैं,
        # डिवाइस नोड के रूप में अच्छी तरह से जा सकते हैं (जैसे यूएसबी ईथरनेट डोंगल),
        # इसलिए हमारे पास यह बताने का कोई तरीका नहीं होगा कि डिवाइस किस प्रकार का था।
        $ STIMEIR / $ IFACE को स्पर्श करें

        # अब वाईफाई बंद करें।
        लॉग इन करें "शट डाउन वाईफाई"
        nmcli r wifi बंद
        ;;
    नीचे)
        # जांचें कि क्या हमने पहले $ IFACE को एक के रूप में मान्यता दी थी
        # भौतिक, वायर्ड डिवाइस।
        अगर [ ! -य $ STATEIR / $ IFACE]; फिर
            "$ IFACE एक वायर्ड डिवाइस नहीं है - उपेक्षा"
            बाहर निकलें 0
        फाई

        rm -rf $ STATEIR / $ IFACE

        # एक ही फाइल की जाँच करने के बजाय, हम भी जाँच सकते हैं
        # क्या $ STATEDIR में अभी भी फाइलें हैं। यदि हां, तो हम
        # अभी भी एक वायर्ड डिवाइस सक्षम है ...
        लॉग "वाईफाई सक्षम करना"
        nmcli r wifi पर
        ;;
esac

1

यदि आप पहले से ही बिजली प्रबंधन के लिए tlp का उपयोग कर रहे हैं , तो ऐसा करने के लिए एक सुविधा है।

आपको अपनी गोपनीय फ़ाइल (/ etc / default / tlp) को संशोधित करना होगा

# Radio devices to enable/disable when docked.
#DEVICES_TO_ENABLE_ON_DOCK=""
DEVICES_TO_DISABLE_ON_DOCK="wifi wwan"

# Radio devices to enable/disable when undocked.
DEVICES_TO_ENABLE_ON_UNDOCK="wifi"
#DEVICES_TO_DISABLE_ON_UNDOCK=""

क्या "डॉक किया गया" का मतलब बिजली में प्लग किया गया है या शाब्दिक डॉकिंग स्टेशन / पोर्ट प्रतिकृति में प्लग किया गया है या बस एक लैन कनेक्शन प्रदान करने वाली किसी चीज में प्लग किया गया है?
ड्रैगन

0

जो भी कारण के लिए, derhoch द्वारा वर्तमान शीर्ष उत्तर मेरे लिए काम नहीं करता है, भले ही यह होना चाहिए। अन्य सुझावों में से कुछ काम करते हैं, लेकिन मैं कुछ बहुत सरल चाहता था। इसलिए, मैं निम्नलिखित स्क्रिप्ट का उपयोग कर रहा हूं (जो मैंने /etc/NetworkManager/dispatcher.d/वाईफाई को चालू करने के लिए eth0स्टेटस पर और बंद करने के लिए रखा था ।

#! /bin/bash
# Enable/disable wlan0 depending on eth0 and wlan0 current state

eth0_status=$(cat /sys/class/net/eth0/operstate)
wlan0_status=$(cat /sys/class/net/wlan0/operstate)

if [[ "$eth0_status" = "up" ]];
    then
        nmcli nm wifi off
elif [[ "$wlan0_status" = "down" ]] && [[ "$eth0_status" = "down" ]];
    then
        nmcli nm wifi on
else 
    nmcli nm eth0 on
    nmcli nm wlan0 off

fi

elseबयान शायद अनावश्यक है, और भी कुछ शर्तों के तहत एक मुद्दा हो सकता है, लेकिन मैं इसे वहाँ छोड़ दिया सिर्फ मामले में (इस कथन के बिना, अगर eth0नीचे है, यह कभी नहीं आता है)।


यह करने के लिए systemd तरीका क्या है?
Xofo
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.