Nonaktifkan wifi (nirkabel) secara otomatis saat kabel?

26

Apa cara terbaik untuk menonaktifkan koneksi Wifi / nirkabel saya setiap kali saya mencolokkan kabel Ethernet kabel? Saya ingin itu diaktifkan kembali ketika saya kemudian mencabut kabel.

Juga, saya terkadang suka berbagi koneksi berkabel dengan pengguna nirkabel lain (atau sebaliknya). Akan lebih baik jika saya entah bagaimana bisa mengecualikan pengaturan ini.

Saya menggunakan 11.10 Oneiric, yang menggunakan NetworkManager.

Richard Hansen
sumber

Jawaban:

31

Script berikut, dimasukkan ke dalam /etc/NetworkManager/dispatcher.d/99-disable-wireless-when-wired, sebagian besar berfungsi — menonaktifkan nirkabel bahkan ketika saya ingin berbagi kabel dengan nirkabel atau sebaliknya.

Untuk melakukan ini, jalankan perintah berikut di terminal:

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

Dan rekatkan kode berikut ke dalam editor teks.

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

Kemudian simpan dan keluar.

Perhatikan kondisi berikut pada skrip, seperti yang didokumentasikan di halaman manual NetworkManager :

Setiap skrip harus:

  • file biasa,
  • dimiliki oleh root,
  • tidak dapat ditulis oleh grup atau lainnya,
  • tidak diatur-uid,
  • dan dieksekusi oleh pemiliknya.

Alih-alih nmcli radio wifi off(atau nmcli nm wifi offuntuk versi NetworkManager yang lebih lama), ada juga rfkill block wifi. Namun, jika rfkilldigunakan sebagai ganti nmcli, NetworkManager versi yang lebih baru akan mengaktifkan wifi kembali saat boot.

Richard Hansen
sumber
Bagaimana skrip dapat mengetahui konfigurasi mana yang Anda inginkan? Kenapa noy lakukan saja rfkill unblock wifisetelah terhubung eth0dan ingin berbagi, lalu rfkill block wifisetelah selesai?
waltinator
@waltinator: Saat koneksi muncul, NetworkManager menetapkan variabel lingkungan bernama CONNECTION_UUIDke pengidentifikasi untuk koneksi itu. Saya berpikir bahwa skrip dapat melakukan sesuatu seperti hanya menonaktifkan WiFi untuk koneksi yang telah saya nyatakan koneksi kabel "standar" tetapi biarkan diaktifkan jika eth0diaktifkan oleh koneksi yang berbeda. Saya belum mencobanya jadi saya tidak tahu apakah itu berhasil. Tapi poin Anda tentang mengendalikannya secara manual adalah bagus.
Richard Hansen
1
Gunakan eth0|usb0)juga untuk menonaktifkan / mengaktifkan WiFi ketika tethering USB diaktifkan / dinonaktifkan.
krlmlr
1
Sangat berguna! Alih-alih menggunakan rfkill, saya menggunakan perintah nmcli nm wifi offdan nmcli nm wifi on. Tapi saya tidak punya alasan khusus untuk percaya bahwa perintah nmcli lebih baik. Saya hanya ingin melakukan semuanya dengan cara NetworkManager.
Jesse Hallett
3
Pernyataan peralihan harus membaca "eth * | usb * | en *)", karena dimulai dengan udev197 "Nama Antarmuka Jaringan yang Dapat Diprediksi" [1] telah diperkenalkan. Kartu jaringan dengan demikian dinamai eno1 / EN1 dan serupa dan tidak cocok dengan penamaan eth * dan usb * lama. [1] freedesktop.org/wiki/Software/systemd/…
doublehelix