Desativar automaticamente o wifi (sem fio) quando conectado?

26

Qual é a melhor maneira de desativar automaticamente minha conexão Wifi / sem fio sempre que conectar um cabo Ethernet com fio? Gostaria que fosse reativado quando desconectar o fio mais tarde.

Além disso, às vezes gosto de compartilhar a conexão com fio com outros usuários sem fio (ou vice-versa). Seria bom se eu pudesse de alguma forma isentar essas configurações.

Estou usando o 11.10 Oneiric, que usa o NetworkManager.

Richard Hansen
fonte

Respostas:

31

O script a seguir, inserido /etc/NetworkManager/dispatcher.d/99-disable-wireless-when-wired, funciona principalmente - desativa a conexão sem fio, mesmo quando eu quero compartilhar com a conexão sem fio ou vice-versa.

Para fazer isso, execute o seguinte comando no terminal:

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

E cole o seguinte código no editor de texto.

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

Salve e saia.

Observe as seguintes condições no script, conforme documentado na página de manual do NetworkManager :

Cada script deve ser:

  • um arquivo regular,
  • possuído pela raiz,
  • não gravável por grupo ou outro,
  • não definido,
  • e executável pelo proprietário.

Em vez de nmcli radio wifi off(ou nmcli nm wifi offpara versões mais antigas do NetworkManager), também existe rfkill block wifi. No entanto, se rfkillfor usado em vez de nmcli, as versões mais recentes do NetworkManager reativarão o wifi durante a inicialização.

Richard Hansen
fonte
Como o script pode dizer qual configuração você deseja? Por que noy apenas faz rfkill unblock wifidepois que você se conecta eth0e deseja compartilhar e rfkill block wifiquando termina?
waltinator
@waltinator: Quando uma conexão é ativada, o NetworkManager define uma variável de ambiente nomeada CONNECTION_UUIDpara o identificador dessa conexão. Eu estava pensando que o script poderia fazer algo como apenas desativar o Wi-Fi para a conexão que declarei a conexão com fio "padrão", mas deixá-lo ativado se eth0for ativado por uma conexão diferente. Eu não tentei, então não sei se funciona. Mas o seu argumento sobre apenas controlá-lo manualmente é bom.
Richard Hansen
1
Use eth0|usb0)também para desativar / ativar o WiFi quando o tethering USB estiver ativado / desativado.
krlmlr
1
Muito útil! Em vez de usar o rfkill, usei os comandos nmcli nm wifi offe nmcli nm wifi on. Mas não tenho nenhuma razão específica para acreditar que os comandos nmcli sejam melhores. Eu só queria fazer tudo da maneira do NetworkManager.
Jesse Hallett
3
A instrução switch deve ser "eth * | usb * | en *)", pois a partir de udev197 os "Nomes previsíveis da interface de rede" [1] foram introduzidos. Assim, as placas de rede são nomeadas eno1 / ens1 e similares e não correspondem à antiga nomeação eth * e usb *. [1] freedesktop.org/wiki/Software/systemd/…
doublehelix