Vô hiệu hóa WLan nếu Mạng có dây / cáp có sẵn


39

Câu hỏi nói lên tất cả. Tất cả những gì tôi muốn là kết nối W-Lan của tôi sẽ bị tắt bất cứ khi nào có kết nối có dây. Cách dễ nhất để làm điều đó trong Ubuntu / Gnome là gì?

Trong tất cả các hướng dẫn (ví dụ như một số về đoán) tôi thấy tôi phải cấu hình toàn bộ cấu hình mạng của mình (khóa WPA, DHCP, ...), nhưng tôi thấy rằng một chút quá phức tạp cho trường hợp sử dụng đơn giản như vậy. Tôi chỉ muốn vô hiệu hóa wlan0khi eth0được kết nối.


Câu trả lời cho câu hỏi này thay đổi tùy theo máy tính. Tôi không biết nếu Ubuntu cho phép điều này, nhưng thông thường tôi đã tìm thấy nó là một tùy chọn trong BIOS.
Iszi

Tôi không có nghĩa là completely disablewlan, tôi có nghĩa là vô hiệu hóa Ubuntu để cố gắng kết nối với bất kỳ wlans nào nếu có kết nối có dây. Vì vậy, nó là một điều hệ điều hành.
Ingo Fischer

Câu trả lời:


55

Bạn có thể thả tập lệnh này vào /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

Đừng quên sau đó:

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

Điều này bắt các eth*tên kế thừa và hạt nhân mới "giao diện được đặt tên dự đoán" bắt đầu envà sau đó sử dụng đường dẫn bus hoặc địa chỉ MAC để tên của mỗi giao diện giống nhau trên mỗi lần khởi động. Điều này hoạt động với USB-C (thông qua) và bộ chuyển đổi ethernet USB mà tôi đã thử và tôi tin chắc rằng nó cũng sẽ hoạt động với các bộ điều hợp tích hợp.


Mạng không dây của tôi đã cố gắng kết nối nhiều lần và nó bắt đầu thực sự khó chịu. Cảm ơn kịch bản này, cuối cùng nó đã ngừng hỏi tôi mật khẩu mạng. Kịch bản có được tự động khởi động khi tôi khởi động lại máy tính không?
Joel Lord

2
@joellord: Tập lệnh này được tự động chạy mỗi khi giao diện mạng bắt đầu hoặc dừng. Khi bạn ngắt kết nối eth0, mạng không dây của bạn sẽ được bật. Khi bạn kết nối eth0, mạng không dây của bạn sẽ bị tắt.
phord

1
Solid - hoạt động hoàn hảo và kịch bản tối thiểu tốt đẹp.
Không khí

3
Với phiên bản 1.0.2 nmcli tôi đã phải thay đổi 'nmcli nm wifi` với nmcli r wifi nơi rphương tiện phát thanh
Alessandro Pezzato

1
Ubuntu 16.04, bash phiên bản 4.3.48, các trích dẫn cần được loại bỏ để tập lệnh này hoạt động.
Carles Sala

8

Kể từ v0.9.10 của trình quản lý mạng, tập lệnh đầu tiên phải được sửa đổi

#!/bin/bash

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

Hy vọng nó giúp!


Đây có thể là một câu trả lời độc lập. Nó sẽ giúp hết sức để nói những gì phiên bản của quản lý mạng thay đổi này xảy ra với.
Journeyman Geek

dường như là từ v0.9.10. wiki.gnome.org/Projects/NetworkManager/nmcli
mruellan

Giải pháp này không đúng, vì nó chỉ hoạt động nếu giao diện lan của bạn được gọi là "eth0".
Carles Sala

4

Khá đơn giản cho cách tiếp cận GUI gnome ...

  1. Nhấp chuột phải vào chỉ báo hệ thống mạng trong bảng gnome bằng đồng hồ của bạn. (Chỉ báo sẽ là một trong hai biểu tượng; mũi tên lên / xuống (LAN) hoặc Kênh WiFi truyền thống. Lưu ý rằng biểu tượng lên / xuống sẽ xuất hiện khi cả LAN & WiFi hoặc chỉ LAN được kết nối và kênh WiFi xuất hiện khi được kết nối qua CHỈ WiFi. (Ngắt kết nối mạng LAN)) - [LAN tự động ngắt WiFi. *]

  2. Chọn 'Chỉnh sửa kết nối ...'

  3. Chọn tab 'Không dây'.
  4. Nhấp đúp vào kết nối đầu tiên trong danh sách của bạn và Bỏ chọn hộp 'Kết nối tự động'.
  5. Nhấp vào nút 'Áp dụng ...'.
  6. Lặp lại cho mỗi kết nối trong danh sách.

Điều này sẽ khiến mạng không dây hoạt động đối với các kết nối thủ công và ngắt kết nối có sẵn bằng cách nhấp chuột trái vào biểu tượng mạng mà không cần NM cố gắng tự động kết nối bạn mọi lúc.

Đương nhiên, bạn cũng có thể vô hiệu hóa / bật Wireless bằng cách nhấp chuột phải vào biểu tượng mạng và sau đó nhấp chuột trái vào lựa chọn "Bật không dây", hạ hoặc giảm giao diện Wireless một cách hiệu quả như được chỉ ra bởi sự hiện diện hoặc vắng mặt của dấu kiểm.

  • LAN tự động kết nối WiFi, không cần tắt WiFi. Chỉ cần rút cáp Ethernet của bạn sẽ chuyển liền mạch kết nối sang WiFi và bạn có thể nhận và di chuyển mà không có bất kỳ phiền phức nào. Tương tự như vậy, với việc kết nối lại mạng LAN.
  • Trong khi LAN thực hiện WiFi WiFi, NM (Trình quản lý mạng) sẽ tìm thấy những gì bạn tìm kiếm trên các mạng khác nhau và đang hoạt động cả trực tuyến (WiFi) và với máy chủ cục bộ (LAN) hoặc V / V chẳng hạn.

2

Chỉ là một phỏng đoán nhưng tôi giả sử ifplugd có thể giúp đỡ. Bạn có thể làm cho nó tắt wifi khi sử dụng cáp.


Cảm ơn, tôi đã đọc về điều đó. Điều tôi không thích về ifplugd là tôi phải đặt tất cả các cài đặt mạng của mình vào /etc/network/interfaces. Tôi không giỏi về công cụ kết nối mạng, vì vậy tôi tự hỏi tôi có thể lấy tất cả các giá trị cần thiết từ các kết nối hiện có của mình ở đâu? Vẫn hy vọng rằng có một giải pháp đơn giản hơn.
Ingo Fischer

1

Tạo hai 'tập lệnh' đơn giản, tên của tập lệnh không quan trọng (tôi chỉ đơn giản sử dụng wlan) và tôi giả sử chỉ có một giao diện mạng được bật và do đó được gọi là 'eth0' ... Hãy kiểm tra điều này với 'ifconfig' nếu bạn Tôi không chắc chắn. Lưu ý rằng điều này vô hiệu hóa hoàn toàn không dây, không chỉ wlan0. (Chỉ xảy ra sự cố nếu bạn có nhiều giao diện wlan và chỉ muốn tắt các giao diện cụ thể)

Các tập lệnh này có thể dễ dàng được điều chỉnh - theo logic boolean - cho một tình huống trong đó bạn có hai hoặc nhiều giao diện mạng được bật.

Đảm bảo các tập lệnh này có thể thực thi được với '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

Điều này cho phép / vô hiệu hóa không dây trong Trình quản lý mạng thường có thể được tìm thấy dưới dạng chỉ báo hệ thống trong bảng điều khiển Gnome.

Bạn cũng có thể sử dụng 'ifconfig wlan0 down' hoặc 'ifconfig wlan0 up' thay vì đường gửi dbus, nhưng điều này sẽ thân thiện với người dùng hơn và ít can thiệp vào các tiện ích hệ thống của Ubuntu.

Đã thử nghiệm với Ubuntu Desktop 10.10 và sẽ hoạt động với các phiên bản trước hoặc các bản phân phối khác bằng NetworkManager và dbus.


Đây có thể là chức năng tương đương với các nmcli radio wifi offcâu trả lời được chấp nhận nhưng tôi sẽ tò mò muốn xem những gì hệ thống ghi lại báo cáo khi đóng các kết nối cả hai cách để xem liệu một trong những "duyên dáng" hơn.
dragon788

1

Cái này hoạt động với tôi trong Debian không ổn định, kernel> 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

Đây là một cải tiến về câu trả lời trước của Cyril Fessl. (Tôi không có danh tiếng để nhận xét.) Đây là một tác phẩm cho Fedora là tốt, nơi giao diện mạng bây giờ có thể có những cái tên như wlan0, wlp6s0, em1enp0s20u2u1). Biến thể này không cố khớp với tên giao diện mà chỉ tìm /sys/class/netthông tin trên thiết bị. Hoạt động trên máy tính xách tay Fedora 21 của tôi (kernel 3.18) và tôi tin rằng nó cũng sẽ hoạt động trên Debian> = 7.

#! / thùng / sh

[$ # -ge 2] || thoát 1

DEBUG = sai
STATEDIR = / var / run / nm-Wired
mkdir -p $ STATEDIR

IFACE = $ 1
HÀNH ĐỘNG = $ 2

myname = $ (tên cơ sở "$ 0") || thoát 1
log () {logger -p user.info -t "$ {myname} [$$]" "$ IFACE / $ ACTION: $ *"; }

nếu $ DEBUG; sau đó
    if [-e "/ sys / class / net / $ IFACE / thiết bị"]; sau đó
        log "/ sys / class / net / $ IFACE / thiết bị tồn tại"
    khác
        log "/ sys / class / net / $ IFACE / thiết bị không tồn tại"
    fi

    if [-e "/ sys / class / net / $ IFACE / không dây"]; sau đó
        log "/ sys / class / net / $ IFACE / không dây tồn tại"
    khác
        log "/ sys / class / net / $ IFACE / không dây không tồn tại"
    fi
fi

trường hợp $ {HÀNH ĐỘNG} trong
    lên)
        rm -rf $ STATEDIR / $ IFACE

        # Đừng làm bất cứ điều gì nếu đây không phải là một thiết bị vật lý.
        nếu [ ! -e "/ sys / class / net / $ IFACE / thiết bị"]; sau đó
            đăng nhập "$ IFACE không phải là thiết bị vật lý - bỏ qua"
            thoát 0
        fi

        # Đừng làm bất cứ điều gì nếu đây là một thiết bị không dây.
        if [-d "/ sys / class / net / $ IFACE / không dây"]; sau đó
            đăng nhập "$ IFACE không phải là thiết bị có dây - bỏ qua"
            thoát 0
        fi

        # Theo dõi các thiết bị có dây. Khi họ đi xuống,
        # nút thiết bị cũng có thể đi (ví dụ: USB Ethernet dongle),
        # vì vậy chúng tôi không có cách nào để biết loại thiết bị này là gì.
        chạm vào $ STATEDIR / $ IFACE

        # Bây giờ tắt WiFi.
        đăng nhập "tắt WiFi"
        tắt wifi
        ;;
    xuống)
        # Kiểm tra xem trước đây chúng tôi có nhận ra $ IFACE là một
        # vật lý, thiết bị có dây.
        nếu [ ! -e $ STATEDIR / $ IFACE]; sau đó
            đăng nhập "$ IFACE không phải là thiết bị có dây - bỏ qua"
            thoát 0
        fi

        rm -rf $ STATEDIR / $ IFACE

        # Thay vì kiểm tra một tệp duy nhất, chúng tôi cũng có thể kiểm tra
        # cho dù vẫn còn các tệp trong $ STATEDIR. Nếu vậy, chúng tôi
        # vẫn bật thiết bị có dây ...
        đăng nhập "kích hoạt WiFi"
        wifi trên mạng
        ;;
esac

1

Nếu bạn đã sử dụng tlp để quản lý năng lượng, nó có một tính năng để làm điều này.

Bạn phải sửa đổi tệp conf của bạn (/ 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=""

"Docked" có nghĩa là cắm vào nguồn điện hoặc cắm vào trạm nối / cổng sao chép theo nghĩa đen hay chỉ đơn giản là cắm vào thứ gì đó cung cấp kết nối LAN?
dragon788

0

Vì lý do nào, câu trả lời hàng đầu hiện tại của derhoch không hoạt động với tôi, mặc dù nó nên. Một số gợi ý khác làm việc, nhưng tôi muốn một cái gì đó rất đơn giản. Vì vậy, tôi đang sử dụng đoạn script sau (tôi đặt /etc/NetworkManager/dispatcher.d/để bật và tắt wifi tùy theo eth0trạng thái.

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

Các elsetuyên bố có lẽ là không cần thiết, và thậm chí có thể là một vấn đề theo một số điều kiện, nhưng tôi rời nó ở đó chỉ trong trường hợp (không có tuyên bố rằng, nếu eth0là xuống, nó không bao giờ đi lên).


Cách systemd để làm điều này là gì?
Xofo
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.