web-dev-qa-db-fra.com

Désactiver WLan si un réseau câblé / câble est disponible

La question dit tout. Tout ce que je veux, c'est que ma connexion W-Lan soit désactivée chaque fois qu'une connexion câblée est disponible. Quel serait le moyen le plus simple de faire cela dans Ubuntu/Gnome?

Dans tous les guides (par exemple certains sur guessnet), j’ai trouvé qu’il me fallait configurer toute la configuration de mon réseau (clés WPA, DHCP, ...), mais j’ai trouvé cela un peu trop compliqué pour un cas d’utilisation aussi simple. Je veux juste désactiver wlan0 lorsque eth0 est connecté.

38
ifischer

Vous pouvez déposer ce script dans /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'oubliez pas après:

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

Cela intercepte les anciens noms eth* et le nouveau noyau "interfaces nommées prévisibles" qui commencent par en et utilisent ensuite le chemin de bus ou l'adresse MAC, de sorte que le nom de chaque interface soit identique à chaque démarrage. Cela a fonctionné avec les adaptateurs USB-C (passthrough) et USB Ethernet que j'ai essayés et je suis convaincu que cela fonctionnera également avec les adaptateurs intégrés.

54
derhoch

Depuis la v0.9.10 du gestionnaire de réseau, le premier script doit être modifié

#!/bin/bash

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

J'espère que ça aide!

8
mruellan

Tout simplement pour l’interface graphique gnome ...

  1. Faites un clic droit sur l'indicateur de système réseau dans le panneau de gnome à côté de votre horloge. (L’indicateur sera l’une des deux icônes: les flèches haut/bas (LAN) ou l’entonnoir WiFi traditionnel. Notez que l’icône haut/bas apparaîtra lorsque LAN & WiFi ou uniquement le LAN est connecté et que l’entonnoir WiFi apparaît quand connecté via WiFi UNIQUEMENT. (LAN déconnecté)) - [Le ​​LAN passe automatiquement au WiFi. *]

  2. Sélectionnez 'Edit Connections ...'

  3. Sélectionnez l'onglet "Sans fil".
  4. Double-cliquez sur la première connexion de votre liste et décochez la case "Se connecter automatiquement".
  5. Cliquez sur le bouton "Appliquer ...".
  6. Répétez cette procédure pour chaque connexion de la liste.

Cela laissera le réseau sans fil opérationnel pour les connexions et déconnexions manuelles à la volée en cliquant à gauche sur l'icône du réseau, sans que le NM essaye de vous connecter automatiquement à tout moment.

Naturellement, vous pouvez également activer/désactiver le réseau sans fil en cliquant avec le bouton droit de la souris sur l’icône du réseau, puis en sélectionnant "Activer le réseau sans fil", ce qui permet d’activer ou de désactiver l’interface sans fil comme indiqué par la présence ou non de la case à cocher.

  • Le réseau local l'emporte automatiquement sur le WiFi, il n'est pas nécessaire de le désactiver. En débranchant simplement votre câble Ethernet, la connexion au WiFi sera transférée de manière transparente. Vous pourrez ainsi vous déplacer et vous déplacer sans problème. De même, en reconnectant le réseau local.
  • Alors que le réseau local dépasse le WiFi, le NM (gestionnaire de réseau) trouvera ce que vous cherchez si vous êtes sur plusieurs réseaux simultanément et travaillez en ligne (WiFi) et avec un hôte local (LAN) ou V/V. Exemple.
4
rjbradlow

Juste une supposition mais je suppose que ifplugd pourrait aider. Vous pouvez le faire arrêter wifi lorsque le câble est utilisé.

2
ggustafsson

Si vous utilisez déjà tlp pour la gestion de l’alimentation, une fonction permet de le faire.

Vous devez modifier votre fichier de configuration (/ 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=""
1
Luis Cellino

C'est une amélioration par rapport à la réponse précédente de Cyril Fessl. (Je n'ai pas la réputation de commenter.) Celui-ci fonctionne également pour Fedora, où les interfaces réseau peuvent maintenant porter des noms tels que wlan0, wlp6s0, em1 et enp0s20u2u1). Cette variante n'essaie pas de faire correspondre le nom de l'interface, mais recherche plutôt dans /sys/class/net des informations sur le périphérique. Fonctionne sur mon ordinateur portable Fedora 21 (noyau 3.18), et je pense que cela fonctionnera également sur Debian> = 7.

 #!/bin/sh 
 
 [$ # -ge 2] || sortie 1 
 
 DEBUG = false 
 STATEDIR =/var/run/nm-câblé 
 mkdir -p $ STATEDIR 
 
 IFACE = $ 1 
 ACTION = $ 2 
 
 Nom = $ (nom de base "$ 0") || exit 1 
 log () {logger -p user.info -t "$ {myname} [$$]" "$ IFACE/$ ACTION: $ *"; } 
 
 if $ DEBUG; alors 
 si [-e "/ sys/class/net/$ IFACE/device"]; alors 
 log "/ sys/class/net/$ IFACE/device existe" 
 sinon 
 log "/ sys/class/net/$ IFACE/device n'existe pas" 
 fi 
 
 si [-e "/ sys/class/net/$ IFACE/wireless"]; alors 
 log "/ sys/class/net/$ IFACE/wireless existe" 
 sinon 
 log "/ sys/class/net/$ IFACE/wireless n'existe pas" 
 fi 
 fi 
 
 cas $ {ACTION} dans 
 vers le haut) 
 rm -rf $ STATEDIR/$ IFACE 
 
 # Ne faites rien s'il ne s'agit pas d'un périphérique physique. 
 Si [! -e "/ sys/class/net/$ IFACE/device"]; alors 
 log "$ IFACE n'est pas un périphérique physique - en ignorant" 
 exit 0 
 fi 
 
 # Ne faites rien si c'est le cas un périphérique sans fil. 
 if [-d "/ sys/class/net/$ IFACE/wireless"]; alors 
 log "$ IFACE n'est pas un périphérique câblé - en ignorant" 
 exit 0 
 fi 
 
 # Gardez une trace des périphériques câblés. Lorsqu'ils tombent en panne, le nœud 
 # Peut également l'être (par exemple, un dongle USB Ethernet), 
 #, De sorte que nous n'avons aucun moyen de déterminer le type d'appareil. 
 touchez $ STATEDIR/$ IFACE 
 
 # Maintenant fermez le WiFi. 
 journal "fermez le WiFi" 
 nmcli r wifi désactivé 
 ;; 
 vers le bas) 
 # Vérifiez si nous avons déjà reconnu $ IFACE en tant que 
 # périphérique physique câblé. 
 si [! -e $ STATEDIR/$ IFACE]; alors 
 log "$ IFACE n'est pas un périphérique câblé - en ignorant" 
 exit 0 
 fi 
 
 rm -rf $ STATEDIR/$ IFACE 
 
 # Au lieu de vérifier un seul fichier, nous pourrions également vérifier 
 # S’il existe encore des fichiers dans $ STATEDIR. Si tel est le cas, nous avons 
 # Toujours un périphérique câblé activé ... 
 Log "permettant le WiFi" 
 Nmcli r wifi sur 
 ;; 
 esac 
1
Steven

Créez deux 'scripts' simples, le nom du script n’a pas d’importance (j’utilise simplement wlan) et je suppose qu’il n’ya qu’une seule interface réseau câblée, et s’appelle donc 'eth0'… n'êtes pas sûr. Notez que cette désactivation sans fil entièrement, pas seulement wlan0. (Un problème uniquement si vous avez plusieurs interfaces wlan et que vous souhaitez uniquement désactiver certaines interfaces)

Ces scripts pourraient facilement être adaptés - par la logique booléenne - à une situation dans laquelle vous avez deux ou plusieurs interfaces réseau câblées.

Assurez-vous que ces scripts sont exécutables avec '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

Cela active/désactive le sans fil dans le NetworkManager qui peut généralement être trouvé comme indicateur système dans le panneau Gnome.

Vous pouvez également utiliser 'ifconfig wlan0 down' ou 'ifconfig wlan0 up' au lieu de la ligne dbus-send, mais cela devrait être plus convivial et interférer moins avec les utilitaires système d'Ubuntu.

Testé avec Ubuntu Desktop 10.10 et devrait fonctionner avec les versions antérieures ou d'autres distributions utilisant NetworkManager et dbus.

1
joentjuh

Cela fonctionne pour moi dans Debian unstable, 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
Askmeanything

Pour une raison quelconque, le top actuel qui répond par derhoch ne fonctionne pas pour moi, même s'il le devrait. Certaines des autres suggestions fonctionnent, mais je voulais quelque chose de très simple. Donc, j'utilise le script suivant (que j'ai mis dans /etc/NetworkManager/dispatcher.d/ pour activer et désactiver le wifi en fonction du statut 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

La déclaration else est probablement inutile, et pourrait même poser problème dans certaines conditions, mais je l'ai laissée là au cas où (sans cette déclaration, si eth0 est en panne, il ne sera jamais relevé).

0
Andy Forceno