如果连接了 LAN,请禁用 WiFi

如果连接了 LAN,请禁用 WiFi

几天前我安装了 Ubuntu 20.04。大多数功能都运行良好。

但是如果我通过 LAN 连接,我会一次又一次收到 WiFi 无法连接的警告。

这根本不符合逻辑。

如果我有 LAN,那么我就不需要 WiFi。

当然,我可以手动禁用它,但默认运行的自动化功能就可以了。

我该如何解决这个问题?

答案1

来自 Ubuntu 的手册页nmcli-examples https://manpages.ubuntu.com/manpages/focal/man7/nmcli-examples.7.html例 14. 有一个脚本使以太网和 Wi-Fi 互斥

#!/bin/bash
export LC_ALL=C

enable_disable_wifi ()
{
    result=$(nmcli dev | grep "ethernet" | grep -w "connected")
    if [ -n "$result" ]; then
        nmcli radio wifi off
    else
        nmcli radio wifi on
    fi
}

if [ "$2" = "up" ]; then
    enable_disable_wifi
fi

if [ "$2" = "down" ]; then
    enable_disable_wifi
fi
   This dispatcher script makes Wi-Fi mutually exclusive with wired networking. When a wired
   interface is connected, Wi-Fi will be set to airplane mode (rfkilled). When the wired
   interface is disconnected, Wi-Fi will be turned back on. Name this script e.g.
   70-wifi-wired-exclusive.sh and put it into /etc/NetworkManager/dispatcher.d/ directory.
   See NetworkManager(8) manual page for more information about NetworkManager dispatcher
   scripts.

使新脚本可执行:chmod a+rx /etc/NetworkManager/dispatcher.d/70-wifi-wired-exclusive.sh

答案2

在 Ubuntu 23.04(德语)上,我不得不稍微修改 PRATAP 的答案,因为它不起作用。我改变了

enable_disable_wifi ()
{
   result=$(nmcli dev | grep "ethernet" | grep -w "connected")
   if [ -n "$result" ]; then
       nmcli radio wifi off
   else
       nmcli radio wifi on
   fi
}

enable_disable_wifi ()
{
    found_eth=$(nmcli dev | grep "ethernet")
    eth_disconn=$(nmcli dev | grep "ethernet" | grep -w "nicht verbunden")
    if [ -n "$found_eth" ] && [ -z "$eth_disconn" ]; then
        nmcli radio wifi off
    else
        nmcli radio wifi on
    fi
}

现在它可以正常工作了。(除了使 .sh 文件的所有者可执行之外,我还必须将其所有者更改为 root(在 networkmanager-dispatcher 手册页中找到了这一点)。)我不太清楚为什么,但怀疑它之前不起作用,因为“verbunden”(即“connected”)是“nicht verbunden”(即“disconnected”)的一部分。

现在不知道这是否仍然有意义,但我想我会分享它。

相关内容