NetworkManager를 사용하여 이더넷에 연결된 경우 Wi-Fi 비활성화

NetworkManager를 사용하여 이더넷에 연결된 경우 Wi-Fi 비활성화

이더넷(유선)을 통해 네트워크에 연결된 경우 Wi-Fi 라디오를 비활성화하고 유선 연결이 없을 때 Wi-Fi 연결을 활성화하려면 어떻게 해야 합니까? 기본적으로 유선/무선 연결 상태를 나타내는 XOR 스위치가 필요합니다.

답변1

내가 찾은일리야 마토프스키(Ilya Matowski)의 각본이것을 이루기 위해서 이것이 떨어지는 것입니다 /etc/NetworkManager/dispatcher.d/70-wifi-wired-exclusive.sh.

#!/bin/sh

name_tag="wifi-wired-exclusive"
syslog_tag="$name_tag"
skip_filename="/etc/NetworkManager/.$name_tag"

if [ -f "$skip_filename" ]; then
    exit 0
fi

interface="$1"
iface_mode="$2"
iface_type=$(nmcli dev | grep "$interface" | tr -s ' ' | cut -d' ' -f2)
iface_state=$(nmcli dev | grep "$interface" | tr -s ' ' | cut -d' ' -f3)

logger -i -t "$syslog_tag" "Interface: $interface = $iface_state ($iface_type) is $iface_mode"

enable_wifi() {
    logger -i -t "$syslog_tag" "Interface $interface ($iface_type) is down, enabling wifi ..."
    nmcli radio wifi on
}

disable_wifi() {
    logger -i -t "$syslog_tag" "Disabling wifi, ethernet connection detected."
    nmcli radio wifi off
}

if [ "$iface_type" = "ethernet" ] && [ "$iface_mode" = "down" ]; then
    enable_wifi
elif [ "$iface_type" = "ethernet" ] && [ "$iface_mode" = "up"  ] && [ "$iface_state" = "connected" ]; then
    disable_wifi
fi

또한 이 토글 작업을 비활성화하려면 파일을 생성하면 됩니다 /etc/NetworkManager/.wifi-wired-exclusive(예: 를 통해 touch).

관련 정보