Desativar WLan se a rede com fio / cabo estiver disponível

36

A pergunta diz tudo. Tudo o que quero é que minha conexão W-Lan seja desativada sempre que houver uma conexão com fio disponível. Qual seria a maneira mais fácil de fazer isso no Ubuntu / Gnome?

Em todos os guias (por exemplo alguns sobre o guessnet) descobri que tinha que configurar toda a minha configuração de rede (chaves WPA, DHCP, ...), mas acho isso um pouco complicado para um caso de uso tão simples. Eu só quero desabilitar wlan0 quando eth0 está conectado.

    
por ifischer 14.01.2011 / 23:27

9 respostas

51

Você pode soltar este script para /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

Não se esqueça depois disso:

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

Isso captura os nomes legados eth* e o novo kernel "interfaces nomeados previsíveis" que começam com en e usam o caminho do barramento ou o endereço MAC para que o nome de cada interface seja o mesmo em cada inicialização . Isso funcionou com o adaptador ethernet USB-C (passthrough) e USB que eu tentei e estou confiante de que ele funcionará com adaptadores integrados também.

    
por 13.12.2011 / 13:16
8

Desde v0.9.10 do network-manager, o primeiro script deve ser modificado

#!/bin/bash

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

Espero que ajude!

    
por 28.09.2014 / 10:26
4

Simplesmente pela abordagem da GUI do gnome ...

  1. Clique com o botão direito do mouse no indicador do sistema de rede no painel do gnome pelo seu relógio. (O indicador será um dos dois ícones: as setas para cima / para baixo (LAN) ou o Funil WiFi tradicional. Observe que o ícone para cima / para baixo aparecerá quando LAN e Wi-Fi ou apenas LAN estiverem conectados e o funil de Wi-Fi aparecer quando conectado via WiFi SOMENTE (LAN desconectada)) - [LAN supera o WiFi automaticamente. *]

  2. Selecione "Editar conexões ..."

  3. Selecione a guia "Sem fio".
  4. Clique duas vezes na primeira conexão da sua lista e desmarque a caixa "Conectar automaticamente".
  5. Clique no botão "Aplicar ...".
  6. Repita para cada conexão na lista.

Isso deixará a rede sem fio operacional para conexões manuais e desconexões on-the-fly disponíveis clicando com o botão esquerdo no ícone da rede, sem que o NM tente conectar-se automaticamente a você o tempo todo.

Naturalmente, você também pode desativar / ativar o sistema sem fio clicando com o botão direito do mouse no ícone da rede e clicando com o botão esquerdo na seleção "Ativar Wireless", efetivamente reduzindo ou diminuindo a interface sem fio conforme indicado pela presença ou ausência da marca de verificação. / p>

  • A LAN supera o Wi-Fi automaticamente, não é necessário desativar o Wi-Fi. Basta desconectar o cabo Ethernet para transferir a conexão para WiFi sem problemas e você pode pegar e mover-se sem problemas. Da mesma forma, reconectando a LAN.
  • Enquanto a LAN supera o Wi-Fi, o NM (Network Manager) encontrará o que procura se você estiver em redes diferentes simultaneamente e estiver trabalhando on-line (WiFi) e com um host local (LAN) ou V / V, por exemplo. / li>
por 01.10.2012 / 21:27
2

Apenas um palpite, mas suponho que o ifplugd possa ajudar. Você poderia fazê-lo desligar wifi quando o cabo é usado.

    
por 15.01.2011 / 11:46
1

Crie dois 'scripts' simples, o nome do script não é importante (eu simplesmente uso o wlan) e presumo que exista apenas uma interface de rede cabeada e seja assim chamada 'eth0' ... Marque isso com 'ifconfig 'se você não tiver certeza. Observe que isso desativou totalmente a conexão sem fio, não apenas wlan0. (Apenas um problema se você tiver várias interfaces wlan e quiser desabilitar somente interfaces específicas)

Esses scripts podem ser facilmente adaptados - pela lógica booleana - a uma situação em que você tem duas ou mais interfaces de rede cabeadas.

Verifique se esses scripts são executáveis com '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

Isso ativa / desativa a rede sem fio no NetworkManager, que geralmente pode ser encontrado como um indicador do sistema no painel do Gnome.

Você também pode usar 'ifconfig wlan0 down' ou 'ifconfig wlan0 up' em vez da linha dbus-send, mas isso deve ser mais fácil de usar e interferir menos nos utilitários de sistema do Ubuntu.

Testado com o Ubuntu Desktop 10.10, e deve funcionar com versões anteriores ou outras distribuições usando o NetworkManager e o dbus.

    
por 06.04.2011 / 13:34
1

Isso funciona para mim no Debian instável, 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
    
por 12.03.2015 / 13:13
1

Esta é uma melhoria na resposta anterior de Cyril Fessl. (Eu não tenho a reputação de comentar.) Este também funciona para o Fedora, onde as interfaces de rede agora podem ter nomes como wlan0 , wlp6s0 , em1 e enp0s20u2u1 ). Essa variação não tenta corresponder ao nome da interface, mas procura, em /sys/class/net , informações sobre o dispositivo. Funciona no meu laptop Fedora 21 (kernel 3.18), e acredito que funcionará no Debian > = 7 também.

#!/bin/sh

[ $# -ge 2 ] || exit 1

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

IFACE=$1
ACTION=$2

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

if $DEBUG; then
    if [ -e "/sys/class/net/$IFACE/device" ]; then
        log "/sys/class/net/$IFACE/device exists"
    else
        log "/sys/class/net/$IFACE/device does not exist"
    fi

    if [ -e "/sys/class/net/$IFACE/wireless" ]; then
        log "/sys/class/net/$IFACE/wireless exists"
    else
        log "/sys/class/net/$IFACE/wireless does not exist"
    fi
fi

case ${ACTION} in
    up)
        rm -rf $STATEDIR/$IFACE

        # Don't do anything if this is not a physical device.
        if [ ! -e "/sys/class/net/$IFACE/device" ]; then
            log "$IFACE not a physical device -- ignoring"
            exit 0
        fi

        # Don't do anything if this is a wireless device.
        if [ -d "/sys/class/net/$IFACE/wireless" ]; then
            log "$IFACE not a wired device -- ignoring"
            exit 0
        fi

        # Keep track of wired devices. When they go down, the
        # device node may go as well (e.g. USB Ethernet dongle),
        # so we'd have no way of telling what type the device was.
        touch $STATEDIR/$IFACE

        # Now shut down WiFi.
        log "shutting down WiFi"
        nmcli r wifi off
        ;;
    down)
        # Check whether we previously recognised $IFACE as a
        # physical, wired device.
        if [ ! -e $STATEDIR/$IFACE ]; then
            log "$IFACE not a wired device -- ignoring"
            exit 0
        fi

        rm -rf $STATEDIR/$IFACE

        # Instead of checking a single file, we could also check
        # whether there are still files in $STATEDIR. If so, we
        # still have a wired device enabled...
        log "enabling WiFi"
        nmcli r wifi on
        ;;
esac
    
por 13.03.2015 / 11:06
1

Se você já está usando tlp para gerenciamento de energia, ele tem um recurso para fazer isso.

Você tem que modificar seu arquivo conf (/ 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=""
    
por 20.09.2016 / 05:19
0

Por alguma razão, a resposta atual do derhoch não funciona para mim, embora deva. Algumas das outras sugestões funcionam, mas eu queria algo muito simples. Então, estou usando o seguinte script (que eu coloquei em /etc/NetworkManager/dispatcher.d/ para ativar e desativar o Wi-Fi, dependendo do status de 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

A instrução else é provavelmente desnecessária, e pode até ser um problema sob algumas condições, mas deixei-a lá apenas no caso (sem essa declaração, se eth0 estiver inativo, ela nunca aparecerá).

    
por 02.09.2015 / 00:49