ปิดใช้งาน WLan หากเครือข่ายต่อสาย / ใช้งานได้


39

คำถามบอกว่ามันทั้งหมด ทั้งหมดที่ฉันต้องการคือการเชื่อมต่อ W-Lan ของฉันควรจะปิดการใช้งานทุกครั้งที่มีการเชื่อมต่อแบบใช้สาย อะไรจะเป็นวิธีที่ง่ายที่สุดในการทำเช่นนั้นใน Ubuntu / Gnome

ในคำแนะนำทั้งหมด (เช่นบางส่วนเกี่ยวกับ guessnet) ฉันพบว่าฉันต้องกำหนดค่าเครือข่ายทั้งหมดของฉัน (คีย์ WPA, DHCP, ... ) แต่ฉันพบว่าบิตนั้นซับซ้อนเกินไปสำหรับกรณีการใช้งานที่เรียบง่าย ฉันต้องการที่จะปิดการใช้งานwlan0เมื่อeth0มีการเชื่อมต่อ


คำตอบสำหรับคำถามนี้แตกต่างกันไปในคอมพิวเตอร์ ฉันไม่รู้ว่า Ubuntu อนุญาตหรือไม่ แต่โดยทั่วไปฉันพบว่าเป็นตัวเลือกใน BIOS
Iszi

ฉันไม่ได้หมายถึงcompletely disablewlan ฉันหมายถึงปิดการใช้งาน Ubuntu เพื่อพยายามเชื่อมต่อกับ wlans ใด ๆ หากมีการเชื่อมต่อแบบใช้สาย ดังนั้นมันจึงเป็นสิ่งที่ระบบปฏิบัติการ
Ingo Fischer

คำตอบ:


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และจากนั้นใช้เส้นทางบัสหรือที่อยู่ MAC เพื่อให้ชื่อของแต่ละอินเตอร์เฟสเหมือนกันในทุกการบู๊ต สิ่งนี้ใช้ได้กับ USB-C (passthrough) และอะแดปเตอร์ USB ethernet ที่ฉันลองด้วยและฉันมั่นใจว่ามันจะทำงานร่วมกับอะแดปเตอร์ในตัวเช่นกัน


อุปกรณ์ไร้สายของฉันพยายามเชื่อมต่อซ้ำแล้วซ้ำอีกและมันเริ่มจะรำคาญจริงๆ ขอบคุณสำหรับสคริปต์นี้ในที่สุดก็หยุดขอรหัสผ่านเครือข่าย สคริปต์จะเริ่มต้นโดยอัตโนมัติเมื่อฉันรีบูทคอมพิวเตอร์หรือไม่
Joel Lord

2
@joellord: สคริปต์นี้จะทำงานโดยอัตโนมัติทุกครั้งที่เครือข่ายเริ่มทำงานหรือหยุด เมื่อคุณตัดการเชื่อมต่อ eth0 ระบบไร้สายของคุณจะถูกเปิดใช้งาน เมื่อคุณเชื่อมต่อ eth0 ไร้สายของคุณจะถูกปิดการใช้งาน
phord

1
Solid - สคริปต์ขั้นต่ำที่สมบูรณ์แบบและสมบูรณ์แบบ
อากาศ

3
ด้วยเวอร์ชัน nmcli 1.0.2 ฉันต้องเปลี่ยน `nmcli nm wifi 'ด้วยnmcli r wifi ตำแหน่งที่rหมายถึงวิทยุ
Alessandro Pezzato

1
Ubuntu 16.04, ทุบตีรุ่น 4.3.48, จำเป็นต้องลบเครื่องหมายคำพูดเพื่อให้สคริปต์นี้ทำงานได้
Carles Sala

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

หวังว่ามันจะช่วย!


นี่อาจเป็นคำตอบแบบสแตนด์อโลน มันจะช่วยอย่างมากที่จะบอกว่าสิ่งที่รุ่นของผู้จัดการเครือข่ายการเปลี่ยนแปลงนี้เกิดขึ้นกับ
Geek

น่าจะเป็นตั้งแต่ v0.9.10 wiki.gnome.org/Projects/NetworkManager/nmcli
mruellan

โซลูชันนี้ไม่ถูกต้องเนื่องจากใช้ได้เฉพาะกับส่วนต่อประสาน LAN ของคุณที่ชื่อว่า "eth0"
Carles Sala

4

ค่อนข้างง่ายสำหรับวิธีการ gnome GUI ...

  1. คลิกขวาที่ตัวบ่งชี้ระบบเครือข่ายในแผงคำพังเพยตามนาฬิกาของคุณ (ตัวบ่งชี้จะเป็นหนึ่งในสองไอคอนคือลูกศรขึ้น / ลง (LAN) หรือช่องทาง WiFi แบบดั้งเดิมโปรดทราบว่าไอคอนขึ้น / ลงจะปรากฏขึ้นเมื่อ LAN และ WiFi หรือ LAN เท่านั้นที่เชื่อมต่อและช่องทาง WiFi ปรากฏขึ้นเมื่อ เชื่อมต่อผ่าน WiFi เท่านั้น (ตัดการเชื่อมต่อ LAN)) - [LAN สำคัญกว่า WiFi โดยอัตโนมัติ *]

  2. เลือก 'แก้ไขการเชื่อมต่อ ... '

  3. เลือกแท็บ 'ไร้สาย'
  4. ดับเบิลคลิกที่การเชื่อมต่อแรกในรายการของคุณและยกเลิกการทำเครื่องหมายที่ช่อง 'เชื่อมต่ออัตโนมัติ'
  5. คลิกปุ่ม 'ใช้ ... '
  6. ทำซ้ำสำหรับแต่ละการเชื่อมต่อในรายการ

สิ่งนี้จะทำให้เครือข่ายไร้สายใช้งานได้สำหรับการเชื่อมต่อด้วยตนเองแบบทันทีและยกเลิกการเชื่อมต่อโดยคลิกซ้ายที่ไอคอนเครือข่ายโดยไม่ต้องใช้ NM พยายามเชื่อมต่อคุณโดยอัตโนมัติตลอดเวลา

โดยปกติคุณสามารถปิด / เปิดการใช้งานไร้สายได้โดยคลิกขวาที่ไอคอนเครือข่ายแล้วคลิกซ้ายที่ตัวเลือก "เปิดใช้งานไร้สาย" ซึ่งจะช่วยลดหรือเพิ่มอินเทอร์เฟซไร้สายตามที่ระบุโดยไม่มีเครื่องหมาย

  • LAN สำคัญกว่า WiFi โดยอัตโนมัติไม่จำเป็นต้องปิดการใช้งาน WiFi เพียงแค่ถอดสายเคเบิลอีเธอร์เน็ตของคุณจะทำการถ่ายโอนการเชื่อมต่อกับ WiFi อย่างไร้รอยต่อและคุณสามารถเลือกและย้ายได้โดยไม่ต้องยุ่งยาก เช่นเดียวกันกับการเชื่อมต่อ LAN อีกครั้ง
  • ในขณะที่ LAN ทำ trump WiFi NM (ตัวจัดการเครือข่าย) จะค้นหาสิ่งที่คุณต้องการหากคุณอยู่ในเครือข่ายที่ต่างกันพร้อมกันและทำงานทั้งออนไลน์ (WiFi) และกับโฮสต์ในพื้นที่ (LAN) หรือ V / V

2

เพียงเดา แต่ฉันคิดว่า ifplugd สามารถช่วยได้ คุณสามารถทำให้มันปิด wifi เมื่อใช้สายเคเบิล


ขอบคุณฉันได้อ่านเกี่ยวกับเรื่องนี้แล้ว สิ่งที่ฉันไม่ชอบเกี่ยวกับ ifplugd /etc/network/interfacesที่ฉันต้องใส่ค่าเครือข่ายทั้งหมดของฉันเป็น ฉันไม่ค่อยเก่งเรื่องระบบเครือข่ายดังนั้นฉันจึงสงสัยว่าฉันจะรับค่าที่จำเป็นทั้งหมดจากการเชื่อมต่อที่มีอยู่ได้อย่างไร? ยังคงหวังว่าจะมีวิธีแก้ปัญหาที่ง่ายกว่า
Ingo Fischer

1

สร้าง 'สคริปต์' อย่างง่ายสองตัวชื่อของสคริปต์ไม่สำคัญ (ฉันใช้ wlan เพียงอย่างเดียว) และฉันคิดว่ามีเพียงหนึ่งเครือข่ายอินเทอร์เฟซเครือข่าย cabled และเรียกว่า 'eth0' ... ตรวจสอบสิ่งนี้ด้วย 'ifconfig' ถ้าคุณ ไม่แน่ใจ โปรดทราบว่านี่ไร้สายปิดการใช้งานทั้งหมดไม่เพียงแค่ wlan0 (เฉพาะปัญหาถ้าคุณมีอินเตอร์เฟซ wlan หลายรายการและต้องการปิดการใช้งานเฉพาะบางรายการเท่านั้น)

สคริปต์เหล่านี้สามารถปรับเปลี่ยนได้อย่างง่ายดาย - โดยตรรกะบูลีน - กับสถานการณ์ที่คุณมีอินเตอร์เฟสเครือข่ายสองสายขึ้นไป

ตรวจสอบให้แน่ใจว่าสคริปต์เหล่านี้สามารถใช้งานได้กับ '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

คุณสามารถใช้ 'ifconfig wlan0 down' หรือ 'ifconfig wlan0 up' แทนสาย dbus-send ได้ แต่สิ่งนี้ควรจะเป็นมิตรกับผู้ใช้มากกว่าและรบกวนน้อยลงด้วยยูทิลิตี้ระบบของ Ubuntu

ทดสอบกับ Ubuntu Desktop 10.10 และควรทำงานกับรุ่นก่อนหน้าหรือการกระจายอื่น ๆ โดยใช้ NetworkManager และ dbus


นี่อาจเทียบเท่ากับnmcli radio wifi offคำตอบที่ได้รับการยอมรับแต่ฉันอยากรู้ว่าระบบบันทึกรายงานอะไรเมื่อปิดการเชื่อมต่อทั้งสองวิธีเพื่อดูว่ามี "ความสง่างาม" มากกว่าหรือไม่
dragon788

1

สิ่งนี้ใช้ได้กับฉันใน Debian ที่ไม่เสถียร, เคอร์เนล> 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

นี่คือการปรับปรุงคำตอบก่อนหน้าของ Cyril Fessl (ผมไม่ได้มีชื่อเสียงในการแสดงความคิดเห็น.) นี้เป็นหนึ่งในผลงานสำหรับ Fedora เช่นกันที่เชื่อมต่อเครือข่ายในขณะนี้สามารถมีชื่อเช่นwlan0, wlp6s0, em1และenp0s20u2u1) รูปแบบนี้ไม่ได้พยายามจับคู่กับชื่ออินเทอร์เฟซ แต่จะค้นหา/sys/class/netข้อมูลในอุปกรณ์ ทำงานบนแล็ปท็อป Fedora 21 ของฉัน (เคอร์เนล 3.18) และฉันเชื่อว่ามันจะทำงานบน Debian> = 7 เช่นกัน

#! / bin / ดวลจุดโทษ

[$ # -ge 2] || ทางออก 1

DEBUG = false
STATEDIR = / var / วิ่ง / นาโนเมตรสาย
mkdir -p $ STATEDIR

iface = $ 1
Action = $ 2

myname = $ (basename "$ 0") || ทางออก 1
log () {logger -p user.info -t "$ {myname} [$$]" "$ IFACE / $ ACTION: $ *"; }

ถ้า $ DEBUG แล้วก็
    หาก [-e "/ sys / class / net / $ IFACE / อุปกรณ์"]; แล้วก็
        บันทึก "/ sys / class / net / $ IFACE / อุปกรณ์มีอยู่"
    อื่น
        บันทึก "/ sys / class / net / $ IFACE / อุปกรณ์ไม่มีอยู่"
    Fi

    ถ้า [-e "/ sys / class / net / $ IFACE / ไร้สาย"]; แล้วก็
        บันทึก "/ sys / class / net / $ IFACE / wireless มีอยู่"
    อื่น
        log "/ sys / class / net / $ IFACE / wireless ไม่มีอยู่"
    Fi
Fi

กรณี $ {ACTION} ใน
    ขึ้นไป)
        rm -rf $ STATEDIR / $ IFACE

        # อย่าทำอะไรเลยถ้านี่ไม่ใช่อุปกรณ์ทางกายภาพ
        ถ้า [! -e "/ sys / class / net / $ IFACE / อุปกรณ์"]; แล้วก็
            เข้าสู่ระบบ "$ IFACE ไม่ใช่อุปกรณ์ทางกายภาพ - ละเว้น"
            ออก 0
        Fi

        # อย่าทำอะไรเลยถ้านี่เป็นอุปกรณ์ไร้สาย
        ถ้า [-d "/ sys / class / net / $ IFACE / ไร้สาย"]; แล้วก็
            เข้าสู่ระบบ "$ IFACE ไม่ใช่อุปกรณ์แบบมีสาย - ละเว้น"
            ออก 0
        Fi

        # ติดตามอุปกรณ์แบบมีสาย เมื่อพวกเขาลงไป
        # อุปกรณ์โหนดอาจทำงานได้เช่นกัน (เช่นดองเกิล USB Ethernet)
        # ดังนั้นเราจึงไม่มีทางบอกได้ว่าอุปกรณ์ประเภทใด
        แตะ $ STATEDIR / $ IFACE

        # ตอนนี้ปิด WiFi
        เข้าสู่ระบบ "ปิด WiFi"
        ปิด wifi nmcli
        ;;
    ลง)
        # ตรวจสอบว่าก่อนหน้านี้เราได้รับการยอมรับ $ IFACE เป็น
        # อุปกรณ์ทางกายภาพแบบใช้สาย
        ถ้า [! -e $ STATEDIR / $ IFACE]; แล้วก็
            เข้าสู่ระบบ "$ IFACE ไม่ใช่อุปกรณ์แบบมีสาย - ละเว้น"
            ออก 0
        Fi

        rm -rf $ STATEDIR / $ IFACE

        # แทนที่จะตรวจสอบไฟล์เดียวเราสามารถตรวจสอบได้
        # ระบุว่ายังมีไฟล์ใน $ STATEDIR หรือไม่ ถ้าเป็นเช่นนั้นเรา
        # ยังคงเปิดใช้งานอุปกรณ์แบบมีสาย ...
        เข้าสู่ระบบ "เปิดใช้งาน WiFi"
        nmcli r wifi บน
        ;;
esac

1

หากคุณใช้tlpสำหรับการจัดการพลังงานอยู่แล้วมันมีคุณสมบัติในการทำเช่นนี้

คุณต้องแก้ไขไฟล์ conf ของคุณ (/ 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=""

"เชื่อมต่อ" หมายถึงเสียบเข้ากับพลังงานหรือเสียบเข้ากับสถานีเชื่อมต่อ / ตัวจำลองพอร์ตที่แท้จริงหรือเพียงเสียบเข้ากับสิ่งที่ให้การเชื่อมต่อ LAN
dragon788

0

ไม่ว่าจะด้วยเหตุผลใดก็ตามคำตอบยอดนิยมปัจจุบันโดย derhochไม่ได้ผลสำหรับฉันแม้ว่ามันควรจะเป็นก็ตาม ข้อเสนอแนะอื่น ๆ ทำงานได้ แต่ฉันต้องการบางสิ่งที่ง่ายมาก ดังนั้นฉันจึงใช้สคริปต์ต่อไปนี้ (ซึ่งฉันใส่/etc/NetworkManager/dispatcher.d/เพื่อเปิดและปิด wifi ขึ้นอยู่กับ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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.