Nonaktifkan WLan jika Jaringan Kabel / Kabel tersedia


39

Pertanyaannya mengatakan itu semua. Yang saya inginkan adalah koneksi W-Lan saya harus dinonaktifkan setiap kali koneksi kabel tersedia. Apa cara termudah untuk melakukannya di Ubuntu / Gnome?

Dalam semua panduan (misalnya beberapa tentang guessnet) saya menemukan saya harus mengkonfigurasi seluruh konfigurasi jaringan saya (kunci WPA, DHCP, ...), tetapi saya menemukan itu agak terlalu rumit untuk kasus penggunaan yang sederhana. Saya hanya ingin menonaktifkan wlan0ketika eth0terhubung.


Jawaban untuk pertanyaan ini bervariasi dari komputer ke komputer. Saya tidak tahu apakah Ubuntu mengizinkan ini, tetapi biasanya saya menemukan ini merupakan opsi di BIOS.
Iszi

Maksud saya bukan completely disablewlan, maksud saya nonaktifkan Ubuntu untuk mencoba terhubung ke wlan mana pun jika koneksi kabel tersedia. Jadi ini adalah masalah OS.
Ingo Fischer

Jawaban:


56

Anda dapat meletakkan skrip ini ke /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

Jangan lupa sesudahnya:

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

Ini menangkap eth*nama lama dan kernel baru "interface yang dapat diprediksi bernama" yang dimulai dengan endan kemudian menggunakan jalur bus atau alamat MAC sehingga nama setiap antarmuka sama pada setiap boot. Ini bekerja dengan USB-C (passthrough) dan adaptor ethernet USB yang saya coba dan saya yakin itu akan bekerja dengan adaptor bawaan juga.


Nirkabel saya mencoba untuk terhubung lagi dan lagi dan itu mulai sangat menjengkelkan. Terima kasih untuk skrip ini, akhirnya berhenti meminta saya untuk kata sandi jaringan. Apakah skrip akan dimulai secara otomatis ketika saya me-reboot komputer saya?
Joel Lord

2
@ joellord: Skrip ini dijalankan secara otomatis setiap kali antarmuka jaringan mulai atau berhenti. Ketika Anda memutuskan koneksi eth0, nirkabel Anda akan diaktifkan. Saat Anda menyambungkan eth0, nirkabel Anda dinonaktifkan.
phord

1
Solid - berfungsi dengan sempurna dan skrip minimal yang bagus.
Air

3
Dengan nmcli versi 1.0.2 saya harus mengganti `nmcli nm wifi` dengan radionmcli r wifi mana rartinya
Alessandro Pezzato

1
Ubuntu 16.04, bash versi 4.3.48, tanda kutip perlu dihapus agar skrip ini berfungsi.
Carles Sala

8

Sejak v0.9.10 manajer jaringan, skrip pertama harus dimodifikasi

#!/bin/bash

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

Semoga ini bisa membantu!


Ini mungkin bisa menjadi jawaban mandiri. Akan sangat membantu untuk mengatakan versi manajer jaringan apa yang terjadi dengan perubahan ini.
Journeyman Geek


1
Solusi ini tidak benar, karena hanya berfungsi jika antarmuka lan Anda disebut "eth0".
Carles Sala

4

Cukup sederhana untuk pendekatan GUI gnome ...

  1. Klik kanan pada indikator sistem jaringan di panel gnome oleh jam Anda. (Indikator akan menjadi salah satu dari dua ikon; baik panah atas / bawah (LAN) atau Saluran WiFi tradisional. Perhatikan bahwa ikon naik / turun akan muncul ketika baik LAN & WiFi atau hanya LAN yang terhubung dan corong WiFi muncul saat terhubung via WiFi SAJA. (LAN Terputus)) - [LAN mengalahkan WiFi secara otomatis. *]

  2. Pilih 'Edit Koneksi ...'

  3. Pilih tab 'Nirkabel'.
  4. Klik dua kali koneksi pertama dalam daftar Anda dan Hapus centang pada kotak 'Hubungkan secara otomatis'.
  5. Klik tombol 'Terapkan ...'.
  6. Ulangi untuk setiap koneksi dalam daftar.

Ini akan membuat operasional jaringan Nirkabel untuk koneksi manual dan pemutusan tersedia dengan mengklik kiri ikon jaringan, tanpa NM mencoba untuk secara otomatis menghubungkan Anda setiap saat.

Secara alami Anda juga dapat menonaktifkan / mengaktifkan Nirkabel dengan mengklik kanan ikon jaringan dan kemudian mengklik kiri pada pilihan "Aktifkan Nirkabel", secara efektif menurunkan atau menaikkan antarmuka Nirkabel seperti ditunjukkan oleh ada atau tidak adanya tanda centang.

  • LAN mengalahkan WiFi secara otomatis, tidak perlu menonaktifkan WiFi. Cukup mencabut kabel Ethernet Anda akan mulus mentransfer koneksi ke WiFi dan Anda dapat mengambil dan bergerak tanpa ribut-ribut. Demikian juga dengan menghubungkan kembali LAN.
  • Sementara LAN tidak mengalahkan WiFi, NM (Network Manager) akan menemukan apa yang Anda cari seandainya Anda berada di jaringan yang berbeda secara bersamaan dan bekerja secara online (WiFi) dan dengan host lokal (LAN) atau V / V misalnya.

2

Hanya tebakan tetapi saya berasumsi ifplugd bisa membantu. Anda bisa mematikan wifi saat kabel digunakan.


Terima kasih, saya sudah membaca tentang itu. Yang tidak saya sukai dari ifplugd adalah saya harus memasukkan semua pengaturan jaringan saya /etc/network/interfaces. Saya tidak terlalu ahli dalam hal jaringan, jadi saya ingin tahu di mana saya bisa mendapatkan semua nilai yang dibutuhkan dari koneksi saya yang ada? Masih berharap ada solusi yang lebih sederhana.
Ingo Fischer

1

Buat dua 'skrip' sederhana, nama skrip tidak penting (saya hanya menggunakan wlan) dan saya berasumsi hanya ada satu antarmuka jaringan kabel, dan dengan demikian disebut 'eth0' ... Periksa ini dengan 'ifconfig' jika Anda tidak yakin Perhatikan bahwa nirkabel ini dinonaktifkan seluruhnya, bukan hanya wlan0. (Hanya masalah jika Anda memiliki beberapa antarmuka wlan dan hanya ingin menonaktifkan yang spesifik)

Skrip ini dapat dengan mudah diadaptasi - dengan logika boolean - untuk situasi di mana Anda memiliki dua atau lebih antarmuka jaringan kabel.

Pastikan skrip ini dapat dieksekusi dengan '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

Ini mengaktifkan / menonaktifkan nirkabel di NetworkManager yang biasanya dapat ditemukan sebagai indikator sistem di panel Gnome.

Anda juga bisa menggunakan 'ifconfig wlan0 down' atau 'ifconfig wlan0 up' alih-alih jalur dbus-send, tetapi ini harus lebih ramah pengguna dan lebih sedikit mengganggu utilitas sistem Ubuntu.

Diuji dengan Ubuntu Desktop 10.10, dan harus bekerja dengan versi sebelumnya atau distribusi lainnya menggunakan NetworkManager dan dbus.


Ini mungkin secara fungsional setara dengan nmcli radio wifi offjawaban yang diterima tetapi saya akan penasaran untuk melihat apa yang dilaporkan sistem log ketika menutup koneksi kedua cara untuk melihat apakah ada yang lebih "anggun".
dragon788

1

Ini berfungsi untuk saya di Debian tidak stabil, 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

Ini adalah peningkatan dari jawaban Cyril Fessl sebelumnya. (Saya tidak memiliki reputasi untuk komentar.) Ini salah satu karya untuk Fedora juga, di mana antarmuka jaringan sekarang dapat memiliki nama seperti wlan0, wlp6s0, em1dan enp0s20u2u1). Variasi ini tidak mencoba mencocokkan dengan nama antarmuka, tetapi mencari /sys/class/netinformasi di perangkat. Bekerja pada laptop Fedora 21 saya (kernel 3.18), dan saya yakin ini akan bekerja pada Debian> = 7 juga.

#! / bin / sh

[$ # -ge 2] || keluar 1

DEBUG = salah
STATEDIR = / var / run / nm-wired
mkdir -p $ STATEDIR

IFACE = $ 1
AKSI = $ 2

myname = $ (nama kecil "$ 0") || keluar 1
log () {logger -p user.info -t "$ {myname} [$$]" "$ IFACE / $ ACTION: $ *"; }

jika $ DEBUG; kemudian
    jika [-e "/ sys / class / net / $ IFACE / device"]; kemudian
        log "/ sys / class / net / $ IFACE / perangkat ada"
    lain
        log "/ sys / class / net / $ IFACE / perangkat tidak ada"
    fi

    jika [-e "/ sys / class / net / $ IFACE / wireless"]; kemudian
        log "/ sys / class / net / $ IFACE / nirkabel ada"
    lain
        log "/ sys / class / net / $ IFACE / nirkabel tidak ada"
    fi
fi

case $ {ACTION} dalam
    naik)
        rm -rf $ STATEDIR / $ IFACE

        # Jangan melakukan apa pun jika ini bukan perangkat fisik.
        jika [! -e "/ sys / class / net / $ IFACE / device"]; kemudian
            log "$ IFACE bukan perangkat fisik - mengabaikan"
            keluar 0
        fi

        # Jangan lakukan apa pun jika ini adalah perangkat nirkabel.
        jika [-d ​​"/ sys / class / net / $ IFACE / wireless"]; kemudian
            log "$ IFACE bukan perangkat kabel - mengabaikan"
            keluar 0
        fi

        # Melacak perangkat berkabel. Ketika mereka turun, itu
        # node perangkat juga bisa berjalan baik (mis. dongle USB Ethernet),
        jadi kami tidak akan tahu jenis alat itu.
        sentuh $ STATEDIR / $ IFACE

        # Sekarang matikan WiFi.
        log "mematikan WiFi"
        nmcli r wifi mati
        ;;
    turun)
        # Periksa apakah kami sebelumnya mengakui $ IFACE sebagai a
        # fisik, perangkat kabel.
        jika [! -e $ STATEDIR / $ IFACE]; kemudian
            log "$ IFACE bukan perangkat kabel - mengabaikan"
            keluar 0
        fi

        rm -rf $ STATEDIR / $ IFACE

        # Alih-alih memeriksa satu file, kita juga bisa memeriksa
        # apakah masih ada file dalam $ STATEDIR. Jika demikian, kita
        # masih mengaktifkan perangkat berkabel ...
        log "mengaktifkan WiFi"
        nmcli r wifi aktif
        ;;
esac

1

Jika Anda sudah menggunakan tlp untuk manajemen daya, ia memiliki fitur untuk melakukan ini.

Anda harus memodifikasi file conf Anda (/ 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=""

Apakah "berlabuh" berarti dicolokkan ke listrik atau dicolokkan ke stasiun dok / port replicator literal atau hanya dicolokkan ke sesuatu yang menyediakan koneksi LAN?
dragon788

0

Untuk alasan apa pun, jawaban teratas saat ini oleh derhoch tidak bekerja untuk saya, meskipun seharusnya demikian. Beberapa saran lain berfungsi, tetapi saya menginginkan sesuatu yang sangat sederhana. Jadi, saya menggunakan skrip berikut (yang saya masukkan /etc/NetworkManager/dispatcher.d/untuk menghidupkan dan mematikan wifi tergantung pada eth0statusnya.

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

The elsePernyataan ini mungkin tidak perlu, dan bahkan mungkin menjadi masalah di bawah beberapa kondisi, tapi aku meninggalkannya di sana hanya dalam kasus (tanpa pernyataan itu, jika eth0turun, itu tidak pernah muncul).


Apa cara systemd untuk melakukan ini?
Xofo
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.