53 votes

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

La question est très claire. Tout ce que je veux, c'est que ma connexion W-Lan soit désactivée chaque fois qu'une connexion filaire 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é que je devais configurer l'ensemble de mon réseau (clés WPA, DHCP, ...), mais je trouve que c'est un peu trop compliqué pour un cas d'utilisation aussi simple. Je veux juste désactiver wlan0 cuando eth0 est connecté.

0 votes

La réponse à cette question varie d'un ordinateur à l'autre. Je ne sais pas si Ubuntu le permet, mais j'ai constaté que c'est une option du BIOS.

0 votes

Je ne veux pas dire completely disable le wlan, je veux dire désactiver Ubuntu pour qu'il essaie de se connecter à n'importe quel wlan si une connexion filaire est disponible. C'est donc une question de système d'exploitation.

0 votes

2voto

Askmeanything Points 43

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

1voto

CodeBlend Points 1789

Il s'agit d'une amélioration de la réponse précédente de Cyril Fessl. (Je n'ai pas la réputation nécessaire pour commenter.) Celle-ci fonctionne également pour Fedora, où les interfaces réseau peuvent maintenant avoir des noms comme wlan0 , wlp6s0 , em1 y enp0s20u2u1 ). Cette variante n'essaie pas de faire correspondre le nom de l'interface, mais cherche plutôt dans /sys/class/net pour obtenir des informations sur le dispositif. Fonctionne sur mon ordinateur portable Fedora 21 (noyau 3.18), et je pense qu'il fonctionnera également sur Debian >= 7.

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

1voto

Luis Cellino Points 11

Si vous utilisez déjà tlp pour la gestion de l'énergie, il dispose d'une fonction permettant 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=""

2 votes

Le terme "docked" signifie-t-il qu'il est branché sur le secteur, sur une station d'accueil ou sur un réplicateur de ports, ou simplement sur un appareil fournissant une connexion LAN ?

0voto

Andy Forceno Points 121

Pour une raison ou pour une autre, le sommet actuel réponse de derhoch ne fonctionne pas pour moi, alors qu'elle devrait le faire. Certaines des autres suggestions fonctionnent, mais je voulais quelque chose de très simple. J'utilise donc le script suivant (que j'ai mis dans /etc/NetworkManager/dispatcher.d/ pour activer ou désactiver le wifi en fonction de eth0 Le statut de l'entreprise.

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

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

0 votes

Quelle est la méthode systemd pour faire cela ?

0voto

KIT-Inwi Points 1

Si vous souhaitez utiliser la solution et vous assurer qu'elle fonctionne même si vous suspendez la connexion Ethernet, puis débranchez et réveillez votre appareil, vous pouvez utiliser l'option pre-down au lieu/en plus de l'action down . Die pre-down est déclenchée en cas de suspension, alors que l'action down ne l'est pas.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X