19 votes

Puis-je désactiver le wifi automatiquement s'il y a une connexion Ethernet?

Lorsque je réveille ma machine le matin, il arrive souvent qu'elle reste vierge car il y a un conflit entre mon moniteur 4k et le dialogue 'Le nom de votre ordinateur a changé pour la 3950ème fois' ce qui signifie que les deux écrans restent éteints jusqu'à ce que je rejette le dialogue que je ne peux pas voir.

Je ne veux pas avoir à activer et désactiver manuellement le wifi - nous avons des ordinateurs pour faire des choses automatiquement pour nous - et j'ai besoin d'une connexion filaire lorsque je suis à mon bureau.

Alors puis-je dire au Mac de n'activer le wifi que si eth0 est inactif ?

Ou transformer le dialogue 'Le nom de votre ordinateur a changé' en une notification qui n'a pas besoin d'être rejetée manuellement, car je me fiche vraiment du numéro qu'Apple a décidé d'y ajouter aujourd'hui ?

8 votes

Simplement changez la priorité de service des interfaces en déplaçant l'interface Ethernet en haut dans Préférences Système > Réseau > Engrenage en bas > Définir l'ordre de service...

0 votes

@klanomath Bonne suggestion. Mais le travail a dit qu'il était temps de rafraîchir mon ordinateur portable et j'ai choisi de passer à Linux à la place. Beaucoup plus facile que de se battre contre Apple à chaque étape.

0 votes

10voto

StrawHara Points 4305

Vous avez quelques options:

  1. Désactiver automatiquement le Wifi lorsqu'une connexion Ethernet (câble) est branchée sur un Mac

    Il s'agit d'un script bash qui désactive automatiquement votre wifi lorsque vous connectez votre ordinateur à une connexion Ethernet et réactive le wifi lorsque vous débranchez votre câble/adaptateur Ethernet. Si vous décidez d'activer le wifi pour une raison quelconque, il se souviendra de ce choix. Cela a été improvisé à partir de cette astuce Mac pour fonctionner avec Yosemite, et sans coder en dur les noms des adaptateurs. Il est censé supporter growl, mais je n'ai pas vérifié cette partie. Cependant, j'ai ajouté un support pour le centre de notifications OSX. N'hésitez pas à forker et à corriger tout problème rencontré.

  2. OS X Yosemite: Désactiver le WiFi si vous utilisez un Ethernet Gigabit

5 votes

Actuellement, ce post stackoverflow est le résultat le plus élevé sur Google pour "mac disable wifi on ethernet". Cela rend votre solution #3 inutile...

1 votes

LOL Toute solution basée sur la recherche Google est manifestement inutile, surtout lorsque c'est google.fr (ou toute autre recherche localisée pour cette question).

6voto

Derek Kwok Points 836

Je réalise que cette question est un peu ancienne... cependant, comme il existe plusieurs façons d'accomplir le même résultat, j'ai pensé qu'il valait la peine de partager une autre méthode: en utilisant Hammerspoon et quelques extraits de code Lua.

Hammerspoon est un outil pour automatiser diverses opérations sur un Mac. Je n'y suis associé d'aucune manière, je l'ai littéralement installé pour essayer d'atteindre le même objectif que l'auteur de la question.

Pour automatiser quoi que ce soit, vous écrivez de petits scripts Lua ; dans ce cas, j'ai créé un fichier network.lua que j'ai enregistré à côté du fichier de configuration principal, $HOME/.hammerspoon/init.lua. Voici le contenu des deux :

# init.lua
-- Imports
local homeNetwork = require "network"

-- Toggle WiFi based on Ethernet being connected or not
homeNetwork.setEthernetInterface("USB 10/100/1000 LAN")
systemWatcher = hs.caffeinate.watcher.new(homeNetwork.handleWifi)
systemWatcher:start()

# network.lua
local M = {}
local ethernetInterface

local function isEthernetConnected()
    ipv4 = hs.network.primaryInterfaces()
    activeInterfaceName = hs.network.interfaceName(ipv4)

    return activeInterfaceName == ethernetInterface
end

local function toggleWifi()
    desiredState = not isEthernetConnected() and true or false

    if hs.wifi.interfaceDetails()['power'] ~= desiredState then
        hs.wifi.setPower(desiredState)

        newState = desiredState and "on" or "off"
        hs.alert.show("Turning wifi " .. newState)
    else
        hs.alert.show("Wifi already in the desired state")
    end
end

function M.setEthernetInterface(ethernetInterfaceName)
    ethernetInterface = ethernetInterfaceName
end

function M.handleWifi(event)
    if event == hs.caffeinate.watcher.systemDidWake then
        toggleWifi()
    elseif event == hs.caffeinate.watcher.screensDidUnlock then
        toggleWifi()
    end
end

return M

La seule chose que vous aurez à personnaliser est le nom de votre interface Ethernet dans init.lua ; dans mon cas c'est "USB 10/100/1000 LAN" car j'utilise un dock. Vous pouvez trouver le nom du vôtre dans la section Réseau de vos Préférences Système.

0 votes

Si vous l'avez renommé dans la section Réseau de vos Préférences Système, il n'utilise pas le nom mis à jour. Vous pouvez trouver le nom d'origine dans le Menu Pomme -> À propos de ce Mac -> Rapport système -> Ethernet

0 votes

Ceci est l'un de ces exemples où je n'avais aucune idée qu'un outil existait (Hammerspoon, qui semble également très populaire, génial !), mais il résout tant de problèmes que je voulais résoudre, en tant que nouvel utilisateur Mac utilisant les fantastiques nouveaux ordinateurs portables Apple Silicon (M1), venant de Linux. Je suis sûr que vous pouvez vérifier le type d'interface (hammerspoon.org/docs/hs.network.html#interfaceDetails) lors du branchement/débranchement, au lieu de coder en dur. Cependant, étant donné que la plupart des utilisateurs n'ont que quelques stations d'accueil différentes qu'ils utilisent, ce n'est pas un drame massif.

0 votes

D'après ce que je peux voir, interfaceDetails ne renvoie malheureusement pas le type d'interface. Cependant, pour les interfaces WiFi, il renvoie quelques clés supplémentaires, à savoir Airport, CaptiveNetwork et SleepProxyServers. En principe, la vérification pourrait être mise en œuvre en disant "si l'interface principale n'est PAS WiFi" (parce que, par exemple, la clé Airport n'est pas présente dans la sortie) "alors désactivez le WiFi". Je vais essayer et, si cela semble fiable suffisant, je mettrai à jour le message. Merci pour la suggestion

2voto

Brecht Machiels Points 228

Il n'a pas été mis à jour depuis un moment, mais ControlPlane gère cela très bien.

1voto

tonysdg Points 233

Inscrit à partir de la réponse publiée par TataBlack, j'ai mis en œuvre la même solution en utilisant Hammerspoon qui est étonnamment toujours actif et bien entretenu.

Au lieu de rechercher des événements de mise en veille ou de réveil qui ne sont pas idéaux, pour résoudre le problème en cours, nous pouvons utiliser des événements de connexion/déconnexion USB pour déclencher une nouvelle vérification du WiFi

# init.lua
-- Imports
local homeNetwork = require "network"

-- Toggle WiFi based on Ethernet being connected or not
homeNetwork.setEthernetInterface("LAN USB 10/100/1000")
systemWatcher = hs.usb.watcher.new(homeNetwork.handleWifi)
systemWatcher:start()

# network.lua
local M = {}
local ethernetInterface

local function isEthernetConnected()
    ipv4 = hs.network.primaryInterfaces()
    activeInterfaceName = hs.network.interfaceName(ipv4)

    return activeInterfaceName == ethernetInterface
end

local function toggleWifi()
    print('vérification du basculement wifi')
    desiredState = not isEthernetConnected() and true or false

    if hs.wifi.interfaceDetails()['power'] ~= desiredState then
        hs.wifi.setPower(desiredState)

        newState = desiredState and "activé" or "désactivé"
        hs.alert.show("Activation du wifi " .. newState)
    else
        -- hs.alert.show("Le wifi est déjà dans l'état désiré")
    end
end

function M.setEthernetInterface(nomInterfaceEthernet)
    ethernetInterface = nomInterfaceEthernet
end

function M.handleWifi(evenementUsb)
    if string.find(evenementUsb['productName'], ethernetInterface) ~= nil then
        hs.timer.doAfter(10, toggleWifi)
    end 
end

return M

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X