Tự động tắt wifi (không dây) khi có dây?


26

Cách tốt nhất để tự động vô hiệu hóa kết nối Wifi / không dây của tôi bất cứ khi nào tôi cắm cáp Ethernet có dây là gì? Tôi muốn nó được kích hoạt lại khi tôi rút dây.

Ngoài ra, đôi khi tôi muốn chia sẻ kết nối có dây với những người dùng không dây khác (hoặc ngược lại). Thật tuyệt nếu tôi bằng cách nào đó có thể miễn các thiết lập này.

Tôi đang sử dụng 11.10 Oneiric, sử dụng NetworkManager.

Câu trả lời:


31

Kịch bản sau đây, được đưa vào /etc/NetworkManager/dispatcher.d/99-disable-wireless-when-wired, chủ yếu hoạt động, nó vô hiệu hóa không dây ngay cả khi tôi muốn chia sẻ có dây với không dây hoặc ngược lại.

Để thực hiện việc này, hãy chạy lệnh sau trong terminal:

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

Và dán đoạn mã sau vào trình soạn thảo văn bản.

#!/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

Sau đó lưu và thoát.

Lưu ý các điều kiện sau trên tập lệnh, như được ghi lại trong trang hướng dẫn NetworkManager :

Mỗi tập lệnh phải là:

  • một tập tin thông thường,
  • thuộc sở hữu của root
  • không thể ghi theo nhóm hoặc khác,
  • không thiết lập,
  • và được thực thi bởi chủ sở hữu.

Thay vì nmcli radio wifi off(hoặc nmcli nm wifi offcho các phiên bản cũ hơn của NetworkManager), cũng có rfkill block wifi. Tuy nhiên, nếu rfkillđược sử dụng thay vì nmcli, các phiên bản mới hơn của NetworkManager sẽ bật lại wifi trong khi khởi động.


Làm thế nào kịch bản có thể cho biết cấu hình mà bạn muốn? Tại sao noy chỉ làm rfkill unblock wifisau khi bạn kết nối eth0và bạn muốn chia sẻ, sau đó rfkill block wifikhi bạn hoàn thành?
ví von

@waltinator: Khi kết nối xuất hiện, NetworkManager đặt biến môi trường được đặt tên CONNECTION_UUIDcho mã định danh cho kết nối đó. Tôi đã nghĩ rằng tập lệnh có thể làm một cái gì đó như chỉ vô hiệu hóa WiFi cho kết nối mà tôi đã khai báo kết nối có dây "tiêu chuẩn" nhưng để nó được kích hoạt nếu eth0được kích hoạt bởi một kết nối khác. Tôi đã không thử nó vì vậy tôi không biết nếu nó hoạt động. Nhưng quan điểm của bạn về việc chỉ kiểm soát nó bằng tay là một điều tốt.
Richard Hansen

1
Sử dụng eth0|usb0)để vô hiệu hóa / kích hoạt WiFi khi kết nối USB được kích hoạt / hủy kích hoạt.
krlmlr

1
Hữu dụng nhất! Thay vì sử dụng rfkill, tôi đã sử dụng các lệnh nmcli nm wifi offnmcli nm wifi on. Nhưng tôi không có bất kỳ lý do cụ thể nào để tin rằng các lệnh nmcli tốt hơn. Tôi chỉ muốn làm mọi thứ theo cách NetworkManager.
Jesse Hallett

3
Câu lệnh chuyển đổi nên đọc "eth * | usb * | en *)", bởi vì bắt đầu với udev197, "Tên giao diện mạng có thể dự đoán" [1] đã được giới thiệu. Do đó, các card mạng được đặt tên eno1 / ske1 và tương tự và không khớp với cách đặt tên eth * và usb * cũ. [1] freedesktop.org/wiki/Software/systemd/ từ
doublercix
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.