Czy automatycznie wyłączyć Wi-Fi (bezprzewodowy) po podłączeniu?

26

Jaki jest najlepszy sposób automatycznego wyłączania połączenia Wi-Fi / bezprzewodowego za każdym razem, gdy podłączam przewodowy kabel Ethernet? Chciałbym, aby został ponownie włączony, gdy później odłączę przewód.

Czasami lubię też udostępniać połączenie przewodowe innym użytkownikom sieci bezprzewodowej (lub odwrotnie). Byłoby miło, gdybym mógł jakoś wyłączyć te ustawienia.

Używam 11.10 Oneiric, który używa NetworkManager.

Richard Hansen
źródło

Odpowiedzi:

31

Poniższy skrypt, w /etc/NetworkManager/dispatcher.d/99-disable-wireless-when-wiredwiększości, działa - wyłącza sieć bezprzewodową, nawet jeśli chcę udostępnić połączenie przewodowe z siecią bezprzewodową lub odwrotnie.

Aby to zrobić, uruchom następującą komendę w terminalu:

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

I wklej następujący kod do edytora tekstu.

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

Następnie zapisz i wyjdź.

Zwróć uwagę na następujące warunki skryptu, jak udokumentowano na stronie podręcznika NetworkManager :

Każdy skrypt powinien być:

  • zwykły plik,
  • własnością root,
  • niemożliwy do zapisu przez grupę lub inne osoby,
  • nie ustawiono UID,
  • i wykonywalny przez właściciela.

Zamiast nmcli radio wifi off(lub nmcli nm wifi offdla starszych wersji NetworkManager) istnieje również rfkill block wifi. Jeśli jednak rfkillzostanie użyte zamiast nmcli, nowsze wersje NetworkManager ponownie włączy Wi-Fi podczas uruchamiania.

Richard Hansen
źródło
W jaki sposób skrypt może określić, jakiej konfiguracji chcesz? rfkill unblock wifiPo co to robić po połączeniu eth0i chcesz się dzielić, a rfkill block wifikiedy skończysz?
waltinator,
@waltinator: Po nawiązaniu połączenia NetworkManager ustawia zmienną środowiskową o nazwie CONNECTION_UUIDidentyfikatora tego połączenia. Myślałem, że skrypt może zrobić coś takiego jak wyłączenie Wi-Fi tylko dla połączenia, które zadeklarowałem jako „standardowe” połączenie przewodowe, ale pozostaw to włączone, jeśli eth0zostanie aktywowane przez inne połączenie. Nie próbowałem tego, więc nie wiem, czy to działa. Ale twój cel polegający na ręcznym sterowaniu nim jest dobry.
Richard Hansen
1
Służy eth0|usb0)również do wyłączania / włączania Wi-Fi, gdy tethering przez USB jest włączony / wyłączony.
krlmlr
1
Najbardziej użyteczne! Zamiast rfkill użyłem poleceń nmcli nm wifi offi nmcli nm wifi on. Ale nie mam żadnego szczególnego powodu, by sądzić, że polecenia nmcli są lepsze. Chciałem tylko zrobić wszystko w sposób NetworkManager.
Jesse Hallett
3
Instrukcja switch powinna brzmieć „eth * | usb * | en *)”, ponieważ od udev197 wprowadzono „Przewidywalne nazwy interfejsów sieciowych” [1]. Karty sieciowe są więc nazywane eno1 / ens1 i podobne i nie pasują do starej nazwy eth * i usb *. [1] freedesktop.org/wiki/Software/systemd/…
doublehelix