ปิดใช้งาน wifi (ไร้สาย) โดยอัตโนมัติเมื่อต่อสายหรือไม่


26

เป็นวิธีที่ดีที่สุดในการปิดการเชื่อมต่อไร้สาย / ไร้สายโดยอัตโนมัติเมื่อใดก็ตามที่ฉันเสียบสายอีเธอร์เน็ตแบบมีสายคืออะไร? ฉันต้องการให้เปิดใช้งานอีกครั้งเมื่อฉันถอดสายออกในภายหลัง

นอกจากนี้บางครั้งฉันต้องการแบ่งปันการเชื่อมต่อแบบใช้สายกับผู้ใช้ไร้สายรายอื่น (หรือกลับกัน) มันคงจะดีถ้าฉันสามารถยกเว้นการตั้งค่าเหล่านี้ได้

ฉันใช้ 11.10 Oneiric ซึ่งใช้ NetworkManager

คำตอบ:


31

ใส่สคริปต์ต่อไปนี้/etc/NetworkManager/dispatcher.d/99-disable-wireless-when-wiredส่วนใหญ่ทำงานได้ - มันปิดการใช้งานแบบไร้สายแม้ว่าฉันต้องการแบ่งปันแบบมีสายกับแบบไร้สายหรือในทางกลับกัน

หากต้องการทำสิ่งนี้ให้เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล:

sudo nano /etc/NetworkManager/dispatcher.d/99-disable-wireless-when-wired

และวางรหัสต่อไปนี้ลงในโปรแกรมแก้ไขข้อความ

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

release=$(lsb_release -s -c)
case ${release} in
    trusty|utopic) nmobj=nm;;
    *) nmobj=radio;;
esac

case ${IFACE} in
    eth*|usb*|en*)
        case ${ACTION} in
            up)
                log "disabling wifi radio"
                nmcli "${nmobj}" wifi off
                ;;
            down)
                log "enabling wifi radio"
                nmcli "${nmobj}" wifi on
                ;;
        esac
        ;;
esac

จากนั้นบันทึกและออก

สังเกตเงื่อนไขต่อไปนี้ในสคริปต์ตามที่ระบุไว้ในหน้าคู่มือของ NetworkManager :

แต่ละสคริปต์ควรเป็น:

  • ไฟล์ปกติ
  • เป็นเจ้าของโดย root
  • ไม่สามารถเขียนได้โดยกลุ่มหรืออื่น ๆ
  • ไม่ได้ตั้งค่าไว้
  • และดำเนินการโดยเจ้าของ

แทนที่จะเป็นnmcli radio wifi off(หรือnmcli nm wifi offสำหรับ NetworkManager เวอร์ชันเก่า) ก็มีเช่นrfkill block wifiกัน อย่างไรก็ตามหากrfkillใช้แทนnmcliNetworkManager เวอร์ชันใหม่จะเปิดใช้งาน wifi อีกครั้งในระหว่างการบู๊ต


สคริปต์จะบอกได้อย่างไรว่าคุณต้องการตั้งค่าอย่างไร ทำไมไม่ทำrfkill unblock wifiหลังจากที่คุณเชื่อมต่อeth0และคุณต้องการแบ่งปันจากนั้นrfkill block wifiเมื่อคุณทำเสร็จแล้ว?
waltinator

@waltinator: เมื่อการเชื่อมต่อเกิดขึ้น NetworkManager จะตั้งค่าตัวแปรสภาพแวดล้อมที่มีชื่อCONNECTION_UUIDเป็นตัวระบุสำหรับการเชื่อมต่อนั้น ฉันคิดว่าสคริปต์สามารถทำอะไรบางอย่างเช่นปิดใช้งาน WiFi สำหรับการเชื่อมต่อที่ฉันได้ประกาศการเชื่อมต่อแบบใช้สาย "มาตรฐาน" เท่านั้น แต่ให้เปิดใช้งานหากeth0เปิดใช้งานโดยการเชื่อมต่ออื่น ฉันไม่ได้ลองเลยฉันก็ไม่รู้ว่ามันใช้งานได้ดีไหม แต่ประเด็นของคุณเกี่ยวกับการควบคุมมันด้วยตัวเองเป็นสิ่งที่ดี
Richard Hansen

1
ใช้eth0|usb0)เพื่อปิดใช้งาน / เปิดใช้งาน WiFi เมื่อเปิดใช้งาน / ปิดการแชร์ USB ด้วย
krlmlr

1
มีประโยชน์มากที่สุด! แทนการใช้ rfkill ผมใช้คำสั่งและnmcli nm wifi off nmcli nm wifi onแต่ฉันไม่มีเหตุผลใดที่เชื่อว่าคำสั่ง nmcli ดีกว่า ฉันแค่อยากทำทุกอย่างตามวิธี NetworkManager
Jesse Hallett

3
คำสั่ง switch ควรอ่าน "eth * | usb * | en *)" เนื่องจากเริ่มต้นด้วย udev197 ชื่อ "อินเตอร์เฟสเครือข่ายที่คาดการณ์ได้" [1] ได้รับการแนะนำให้รู้จัก การ์ดเครือข่ายจึงมีชื่อ eno1 / ens1 และคล้ายกันและไม่ตรงกับการตั้งชื่อ eth * และ usb * เก่า [1] freedesktop.org/wiki/Software/systemd/…
doublehelix
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.