Kablolu / Kablolu Ağ varsa WLan'ı devre dışı bırakın


39

Soru her şeyi söylüyor. Tek istediğim, kablolu bağlantı mevcut olduğunda W-Lan bağlantımın devre dışı bırakılması gerektiği. Ubuntu / Gnome'da bunu yapmanın en kolay yolu ne olurdu?

Tüm kılavuzlarda (örneğin, guessnet ile ilgili olarak) tüm ağ yapılandırmamı (WPA anahtarları, DHCP, ...) yapılandırmam gerektiğine karar verdim, ancak bunu basit bir kullanım durumu için biraz karmaşık buldum. Sadece bağlı wlan0olduğunda devre dışı bırakmak istiyorum eth0.


Bu sorunun cevabı bilgisayardan bilgisayara değişmektedir. Ubuntu'nun buna izin verip vermediğini bilmiyorum ama tipik olarak BIOS'ta bir seçenek buldum.
Iszi

Yani yok completely disablewlan i kablolu bağlantı varsa devre dışı Ubuntu herhangi WLAN bağlanmaya çalışmak demek. Bu yüzden bir işletim sistemi şeydir.
Ingo Fischer

Yanıtlar:


55

Bu betiği şuraya bırakabilirsiniz /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

Sonradan unutma:

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

Bu, eski eth*adları ve yeni çekirdeği, " enönyüklemeli adlandırılmış arabirimler" olarak adlandırır ve daha sonra veriyolu yolunu veya MAC adresini kullanır, böylece her arabirimin adı her önyüklemede aynı olur. Bu, denediğim USB-C (geçiş) ve USB ethernet adaptörüyle çalıştı ve yerleşik adaptörlerle de çalışacağına eminim.


Telsizim tekrar tekrar bağlanmaya çalışıyordu ve gerçekten rahatsız edici olmaya başlamıştı. Bu senaryo için teşekkürler, sonunda bir ağ şifresi istemekten vazgeçti. Bilgisayarımı yeniden başlattığımda komut dosyası otomatik olarak başlatılacak mı?
Joel Lord

2
@ joellord: Bu komut dosyası, bir ağ arabirimi her başladığında veya durduğunda otomatik olarak çalıştırılır. Eth0'un bağlantısını kestiğinizde kablosuz bağlantınız etkinleşir. Eth0'u bağladığınızda, kablosuz bağlantınız devre dışı kalır.
phord

1
Solid - mükemmel çalışır ve en az düzeyde script kullanır.
Air

3
Nmcli sürümü 1.0.2 ile ben nmcli nm wifi` ile `değiştirmek zorunda nmcli r wifi nerede raraçlar radyo
Alessandro Pezzato

1
Ubuntu 16.04, bash 4.3.48, bu betiğin çalışması için tırnakların kaldırılması gerekiyor.
Carles Sala,

8

Ağ yöneticisinin v0.9.10’undan bu yana ilk komut dosyasının değiştirilmesi gerekiyor.

#!/bin/bash

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

Umarım yardımcı olur!


Bu muhtemelen bağımsız bir cevap olabilir. Bu değişikliğin hangi ağ yöneticisi sürümüyle gerçekleştiğini söylemek çok yardımcı olacaktır .
Journeyman Geek

v0.9.10'dan beri görünüyor. wiki.gnome.org/Projects/NetworkManager/nmcli
mruellan

Bu çözüm doğru değil, çünkü sadece lan arayüzünüze "eth0" deniyorsa çalışır.
Carles Sala,

4

Gnome GUI yaklaşımı için oldukça basit ...

  1. Gnome panelindeki ağ sistemi göstergesine sağ tıklayın ve saatinize bakın. (Gösterge, iki simgeden biri olacaktır; ya yukarı / aşağı oklar (LAN) veya geleneksel WiFi Huni. Hem LAN, hem WiFi, hem de yalnızca LAN bağlandığında yukarı / aşağı simgesinin ve WiFi SADECE WiFi üzerinden bağlanır. (LAN bağlantısı kesildi)) - [LAN, WiFi'yi otomatik olarak kapatıyor. *]

  2. 'Bağlantıları Düzenle ...' seçeneğini seçin

  3. 'Kablosuz' sekmesini seçin.
  4. Listenizdeki ilk bağlantıya çift tıklayın ve 'Otomatik bağlan' kutusunun işaretini kaldırın.
  5. 'Uygula ...' düğmesini tıklayın.
  6. Listedeki her bağlantı için tekrarlayın.

Bu, Kablosuz ağını çalışma anında manuel bağlantılar ve ağ simgesine sol tıklayarak mevcut bağlantı kesmeleri için çalışır durumda bırakır; NM sizi her zaman Otomatik olarak bağlamaya çalışmaz.

Doğal olarak, ağ simgesine sağ tıklayarak ve ardından "Enable Wireless" (Kablosuz Etkinleştir) seçimini tıklatarak, kablosuz arabirimini etkin bir şekilde, onay işaretinin varlığında veya yokluğunda belirtildiği gibi bırakarak da devre dışı bırakabilir / etkinleştirebilirsiniz.

  • LAN otomatik olarak WiFi trump, WiFi devre dışı bırakmak gerekmez. Sadece Ethernet kablonuzu çıkarmanız bağlantıyı sorunsuz bir şekilde WiFi bağlantısına aktarır; Aynı şekilde, LAN'ı yeniden bağlayarak.
  • LAN WiFi WiFi'yi koyarken, NM (Ağ Yöneticisi) aradığınız şeyi aynı anda farklı ağlarda olmanız ve hem çevrimiçi (WiFi) hem de yerel bir ana bilgisayar (LAN) veya V / V ile çalışmanız durumunda bulacaktır.

2

Sadece bir tahmin ama sanırım fişi yardımcı olabilir. Kablo kullanıldığında wifi kapatmasını sağlayabilirsiniz.


Teşekkürler, bunu zaten okudum. İfplugd'dan hoşlanmadığım şey, tüm ağ ayarlarımı koymak zorunda olduğum /etc/network/interfaces. Ağ oluşturma işinde çok başarılı değilim, bu yüzden mevcut tüm bağlantılarımdan gerekli tüm değerleri nereden alabileceğimi merak ediyorum? Yine de daha basit bir çözüm olduğunu umuyorum.
Ingo Fischer

1

İki basit 'script' oluşturun, betiğin adı önemli değil (wlan kullanıyorum) ve yalnızca bir kablolu ağ arayüzü olduğunu ve bu nedenle 'eth0' olarak adlandırıldığını varsayıyorum ... Bunu 'ifconfig' ile kontrol edin emin değilim. Bu sadece kablosuz wlan0 değil, tamamen kablosuz devre dışı olduğunu unutmayın. (Yalnızca birden çok wlan arayüzünüz varsa ve yalnızca belirli olanları devre dışı bırakmak istiyorsanız, bir sorun)

Bu betikler, iki veya daha fazla kablolu ağ arayüzünün olduğu bir duruma - mantıksal bir mantıkla - kolayca uyarlanabilir.

Bu komut dosyalarının 'chmod + x' ile çalıştırılabilir olduğundan emin olun

/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

Bu, genellikle Gnome panelinde bir sistem göstergesi olarak bulunan NetworkManager'da kablosuz özelliğini etkinleştirir / devre dışı bırakır.

Dbus-send satırı yerine 'ifconfig wlan0 down' veya 'ifconfig wlan0 up' komutunu da kullanabilirsiniz, ancak bu daha kullanıcı dostu olmalı ve Ubuntu'nun sistem yardımcı programlarına daha az müdahale etmelidir.

Ubuntu Desktop 10.10 ile test edilmiştir ve NetworkManager ve dbus kullanan önceki sürümlerle veya diğer dağıtımlarla çalışmalıdır.


Bu muhtemelen işlevsel olarak kabul edilen nmcli radio wifi offcevaplarla eşdeğerdir ancak birinin daha "zarif" olup olmadığını anlamak için bağlantıları kapatırken sistemin ne rapor verdiğini görmek isterim.
dragon788

1

Bu benim için çalışıyor Debian kararsız, çekirdek> 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

Bu, Cyril Fessl'in önceki cevabındaki bir gelişmedir. (Ben yorumuna itibar yok.) Bu, bir eser Fedora için de, ağ arayüzleri şimdiki gibi isimler var nerede wlan0, wlp6s0, em1ve enp0s20u2u1). Bu değişiklik, arabirim adıyla eşleşmeye çalışmaz, bunun yerine /sys/class/netcihazdaki bilgilere bakar . Fedora 21 dizüstü bilgisayarımda (çekirdek 3.18) çalışıyor ve Debian> = 7'de de çalışacağına inanıyorum.

#! / Bin / sh

[$ # -ge 2] || çıkış 1

DEBUG = false
STATEDIR = / var / çalıştırma / nm kablolu
mkdir -p $ STATEDIR

Arayüz = $ 1
EYLEM = $ 2

myname = $ (temel ad "$ 0") || çıkış 1
log () {logger -p user.info -t "$ {myname} [$$]" "$ IFACE / $ ACTION: $ *"; }

eğer $ DEBUG; sonra
    eğer [-e "/ sys / class / net / $ IFACE / device"]; sonra
        log "/ sys / class / net / $ IFACE / cihaz var"
    Başka
        log "/ sys / class / net / $ IFACE / cihaz mevcut değil"
    fi

    eğer [-e "/ sys / class / net / $ IFACE / wireless"]; sonra
        log "/ sys / class / net / $ IFACE / kablosuz var"
    Başka
        log "/ sys / class / net / $ IFACE / kablosuz yok"
    fi
fi

dava $ {ACTION} içinde
    kadar)
        rm - rf $ STATEDIR / $ IFACE

        # Bu fiziksel bir cihaz değilse hiçbir şey yapmayın.
        Eğer [ ! -e "/ sys / sınıf / net / $ IFACE / aygıt"]; sonra
            log "$ IFACE fiziksel bir cihaz değil - yok sayılıyor"
            Çıkış 0
        fi

        # Bu kablosuz bir cihazsa hiçbir şey yapmayın.
        eğer [-d "/ sys / class / net / $ IFACE / wireless"]; sonra
            log "$ IFACE kablolu bir cihaz değil - yoksayılıyor"
            Çıkış 0
        fi

        # Kablolu cihazların kaydını tutun. Aşağı indiklerinde,
        # cihaz düğümü de gidebilir (örneğin, USB Ethernet dongle),
        # Böylece cihazın ne tür olduğunu söyleyemezdik.
        $ STATEDIR / $ IFACE öğesine dokunun

        # Şimdi WiFi'yi kapat.
        günlük "WiFi kapatılıyor"
        nmcli r wifi kapalı
        ;;
    aşağı)
        # Daha önce $ IFACE'yi bir tanıdık olup olmadığımızı kontrol edin
        # fiziksel, kablolu cihaz.
        Eğer [ ! -e $ STATEDIR / $ IFACE]; sonra
            log "$ IFACE kablolu bir cihaz değil - yoksayılıyor"
            Çıkış 0
        fi

        rm - rf $ STATEDIR / $ IFACE

        # Tek bir dosyayı kontrol etmek yerine kontrol edebiliriz
        # $ STATEDIR içinde hala dosyalar var mı? Eğer öyleyse, biz
        # hala kablolu bir cihaz var etkin ...
        "WiFi etkinleştirme" günlüğü
        nmcli r wifi açık
        ;;
esac

1

Güç yönetimi için zaten tlp kullanıyorsanız , bunu yapma özelliği vardır.

Conf dosyanızı değiştirmelisiniz (/ 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=""

"Yerleştirilmiş", güç kaynağına takılı mı yoksa gerçek bir yerleştirme istasyonu / bağlantı noktası çoğaltıcısına mı bağlı, yoksa basitçe LAN bağlantısı sağlayan bir şeye mi bağlı?
dragon788,

0

Sebep ne olursa olsun, derhoch'un şu anki en iyi cevabı olması gerektiği halde benim için işe yaramıyor. Diğer önerilerden bazıları işe yarıyor ama ben çok basit bir şey istedim. Bu yüzden, aşağıdaki betiği kullanıyorum ( /etc/NetworkManager/dispatcher.d/durumuna bağlı olarak wifi özelliğini açıp kapatmak için kullanıyorum) 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İfadesi muhtemelen gereksizdir ve hatta bazı koşullarda bir sorun olabilir, ama ben (eğer Bu ifade olmadan, her ihtimale karşı orada bırakmıştır eth0aşağı, asla gelmez).


Bunu yapmanın sistemd yolu nedir?
Xofo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.