유선 / 케이블 네트워크가 사용 가능한 경우 WLan 비활성화


39

문제는 모든 것을 말합니다. 유선 연결을 사용할 수있을 때마다 W-Lan 연결을 비활성화해야합니다. Ubuntu / Gnome에서 가장 쉬운 방법은 무엇입니까?

모든 가이드 (예 : guessnet에 대한 일부)에서 전체 네트워크 구성 (WPA 키, DHCP 등)을 구성해야한다는 것을 알았지 만 간단한 사용 사례에는 너무 복잡하다는 것을 알았습니다. 연결 wlan0되면 사용 중지하고 싶습니다 eth0.


이 질문에 대한 대답은 컴퓨터마다 다릅니다. 우분투가 이것을 허용하는지 모르겠지만 일반적으로 BIOS에서 옵션이라는 것을 알았습니다.
— Iszi

completely disable유선을 의미하지는 않습니다 . 유선 연결을 사용할 수 있으면 우분투를 비활성화하여 무선 랜에 연결하려고합니다. 그래서 그것은 OS 일입니다.
— Ingo Fischer

답변:


55

이 스크립트를 /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

나중에 잊지 마세요 :

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

이것은 버스 이름이나 MAC 주소로 eth*시작하여 en사용 하는 레거시 이름과 새로운 커널 "예측 가능한 명명 된 인터페이스"를 포착하여 각 인터페이스의 이름이 모든 부팅에서 동일하도록합니다. 이것은 내가 시도한 USB-C (통과) 및 USB 이더넷 어댑터와 함께 작동했으며 내장 어댑터에서도 작동 할 것이라고 확신합니다.


무선이 계속해서 연결을 시도하고 있었고 실제로 자극을 받기 시작했습니다. 이 스크립트 덕분에 마침내 네트워크 암호를 묻는 메시지가 중단되었습니다. 컴퓨터를 재부팅하면 스크립트가 자동으로 시작됩니까?
— Joel Lord

2
@joellord :이 스크립트는 네트워크 인터페이스가 시작되거나 중지 될 때마다 자동으로 실행됩니다. eth0의 연결을 해제하면 무선 기능이 활성화됩니다. eth0에 연결하면 무선 기능이 비활성화됩니다.
— phord

1
솔리드-완벽하고 멋진 최소한의 스크립트로 작동합니다.
— Air

3
nmcli 버전 1.0.2으로 나는 nmcli 나노 wifi`와`변경 한 nmcli r wifi 곳 r수단의 라디오
— 알레산드로 Pezzato

1
이 스크립트가 작동하려면 Ubuntu 16.04, bash 버전 4.3.48에서 따옴표를 제거해야합니다.
— Carles Sala

8

네트워크 관리자 v0.9.10부터 첫 번째 스크립트를 수정해야합니다

#!/bin/bash

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

그것이 도움이되기를 바랍니다!


이것은 아마도 독립형 답변 일 수 있습니다. 이 변경이 발생하는 네트워크 관리자 버전을 알려주 는 것이 큰 도움이 될 것 입니다.
— Journeyman Geek

v0.9.10 이후 인 것 같습니다. wiki.gnome.org/Projects/NetworkManager/nmcli
— mruellan

이 솔루션은 LAN 인터페이스가 "eth0"인 경우에만 작동하므로 적합하지 않습니다.
— Carles Sala

4

그놈 GUI 접근 방식의 경우 ...

  1. 시계 옆의 그놈 패널에서 네트워크 시스템 표시기를 마우스 오른쪽 버튼으로 클릭하십시오. (표시기는 위 / 아래 화살표 (LAN) 또는 기존 WiFi 깔때기의 두 아이콘 중 하나입니다. LAN / WiFi 또는 LAN 만 연결되면 위 / 아래 아이콘이 나타나고 WiFi 깔때기는 나타납니다. WiFi를 통해서만 연결됨 (LAN 연결 끊김))-[LAN이 WiFi를 자동으로 능가합니다. *]

  2. '연결 편집 ...'을 선택하십시오.

  3. '무선'탭을 선택하십시오.
  4. 목록에서 첫 번째 연결을 두 번 클릭하고 '자동 연결'상자를 선택 취소하십시오.
  5. '적용 ...'버튼을 클릭하십시오.
  6. 목록의 각 연결에 대해 반복하십시오.

이렇게하면 NM이 항상 자동으로 연결을 시도하지 않고 네트워크 아이콘을 마우스 왼쪽 버튼으로 클릭하여 온-더-플라이 수동 연결 및 연결 해제에 무선 네트워크가 작동하게됩니다.

네트워크 아이콘을 마우스 오른쪽 단추로 클릭 한 다음 "무선 사용"선택 항목을 마우스 왼쪽 단추로 클릭하여 무선 인터페이스를 효과적으로 내리거나 올리면 확인 표시가 있거나없는 것으로 표시됩니다.

  • LAN은 WiFi를 자동으로 능가하므로 WiFi를 비활성화 할 필요가 없습니다. 이더넷 케이블의 플러그를 뽑기 만하면 WiFi로 연결이 원활하게 전송되므로 번거 로움없이 픽업 및 이동할 수 있습니다. 마찬가지로 LAN을 다시 연결하십시오.
  • LAN이 WiFi보다 우선하지만 NM (Network Manager)은 다른 네트워크에 동시에 있고 온라인 (WiFi) 및 로컬 호스트 (LAN) 또는 V / V와 함께 작동하는 경우 원하는 것을 찾습니다.

2

그냥 추측하지만 ifplugd가 도움이 될 수 있다고 가정합니다. 케이블을 사용할 때 Wi-Fi를 종료 할 수 있습니다.


고마워, 나는 그것에 대해 이미 읽었다. ifplugd에 대해 마음에 들지 않는 점은 모든 네트워크 설정을에 넣어야한다는 것 /etc/network/interfaces입니다. 네트워킹에 능숙하지 않기 때문에 기존 연결에서 필요한 모든 값을 얻을 수있는 곳이 궁금합니다. 여전히 더 간단한 해결책이 있기를 바랍니다.
— Ingo Fischer

1

두 개의 간단한 '스크립트'를 작성하십시오. 스크립트 이름은 중요하지 않습니다 (단순히 wlan을 사용함). 케이블 네트워크 인터페이스가 하나만 있다고 가정하여 'eth0'이라고합니다. 'ifconfig'로 확인하십시오. 확실하지 않습니다. 이 기능은 wlan0뿐만 아니라 무선 기능도 완전히 비활성화했습니다. (여러 WLAN 인터페이스가 있고 특정 인터페이스 만 비활성화하려는 경우에만 문제)

이 스크립트는 부울 논리에 의해 두 개 이상의 케이블로 연결된 네트워크 인터페이스가있는 상황에 쉽게 적용 할 수 있습니다.

이 스크립트가 '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

이는 일반적으로 그놈 (Gnome) 패널에서 시스템 표시기로 찾을 수있는 NetworkManager에서 무선을 활성화 / 비활성화합니다.

dbus-send 줄 대신 'ifconfig wlan0 down'또는 'ifconfig wlan0 up'을 사용할 수도 있지만이 방법은 사용자에게 친숙하고 우분투의 시스템 유틸리티를 덜 방해해야합니다.

Ubuntu Desktop 10.10에서 테스트되었으며 NetworkManager 및 dbus를 사용하는 이전 버전 또는 다른 배포판에서 작동해야합니다.


이것은 아마도 기능적으로 허용되는 nmcli radio wifi off답변 과 동일 하지만 연결을 닫을 때 시스템 로그가 두 가지 방법으로 더 "우아한"지 확인하는 경우 시스템 로그가보고하는 내용이 궁금합니다.
— dragon788

1

이것은 데비안 불안정하고 커널> 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

Cyril Fessl의 이전 답변이 개선되었습니다. (I는 의견에 명성이 없습니다.)이 하나 개의 작품을 페도라뿐만 아니라, 네트워크 인터페이스는 지금과 같은 이름을 가질 수있는 wlan0, wlp6s0, em1및 enp0s20u2u1). 이 변형은 인터페이스 이름과 일치하지 않고 /sys/class/net장치 에 대한 정보를 찾습니다 . Fedora 21 랩탑 (커널 3.18)에서 작동하며 Debian> = 7에서도 작동한다고 생각합니다.

#! / bin / sh

[$ # -ge 2] || 1 번 출구

DEBUG = 거짓
STATEDIR = / var / run / nm 유선
mkdir -p $ STATEDIR

IFACE = $ 1
액션 = $ 2

myname = $ (기본 이름 "$ 0") || 1 번 출구
log () {logger -p user.info -t "$ {myname} [$$]" "$ IFACE / $ ACTION : $ *"; }

$ DEBUG 인 경우; 그때
    [-e "/ sys / class / net / $ IFACE / device"] 인 경우; 그때
        "/ sys / class / net / $ IFACE / device 존재"로그
    그밖에
        "/ sys / class / net / $ IFACE / device 존재하지 않습니다"로그
    fi

    만약 [-e "/ sys / class / net / $ IFACE / wireless"]; 그때
        "/ sys / class / net / $ IFACE / 무선 존재"로그
    그밖에
        "/ sys / class / net / $ IFACE / wireless가 없습니다"로그
    fi
fi

사례 $ {ACTION}
    쪽으로)
        rm -rf $ STATEDIR / $ IFACE

        # 물리적 장치가 아닌 경우 아무 것도하지 마십시오.
        만약 [ ! -e "/ sys / class / net / $ IFACE / device"]; 그때
            "$ IFACE 실제 장치가 아닌 경우 무시"
            출구 0
        fi

        # 무선 장치 인 경우 아무 것도하지 마십시오.
        만약 [-d "/ sys / class / net / $ IFACE / wireless"]; 그때
            "$ IFACE 유선 장치가 아님-무시"
            출구 0
        fi

        # 유선 장치를 추적합니다. 그들이 내려갈 때
        # 장치 노드도 함께 갈 수 있습니다 (예 : USB 이더넷 동글).
        따라서 기기의 유형을 알 수있는 방법이 없습니다.
        $ STATEDIR / $ IFACE를 터치하십시오.

        # 이제 WiFi를 종료하십시오.
        "Wi-Fi 차단"
        nmcli r 와이파이 끄기
        ;;
    내려가는)
        # 이전에 $ IFACE를 인식했는지 확인
        # 물리적 유선 장치.
        만약 [ ! -e $ STATEDIR / $ IFACE]; 그때
            "$ IFACE 유선 장치가 아님-무시"
            출구 0
        fi

        rm -rf $ STATEDIR / $ IFACE

        # 단일 파일을 검사하는 대신 검사 할 수도 있습니다.
        # $ STATEDIR에 여전히 파일이 있는지 여부. 그렇다면, 우리
        # 여전히 유선 장치가 활성화되어 있습니다 ...
        "Wi-Fi 활성화"로그
        무선 랜 켜기
        ;;
esac

1

전원 관리에 이미 tlp 를 사용 중인 경우 이를 수행하는 기능이 있습니다.

conf 파일 (/ 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=""

"도킹 됨"은 전원에 연결되었거나 리터럴 도킹 스테이션 / 포트 복제기에 연결되었거나 단순히 LAN 연결을 제공하는 장치에 연결되었다는 의미입니까?
— dragon788

0

어떤 이유로 든 derhoch 의 현재 최고 답변 은 나에게 도움 이되지 않습니다. 다른 제안 중 일부는 효과가 있지만 매우 간단한 것을 원했습니다. 그래서, 나는 다음 스크립트를 사용하고 있습니다 ( 의 상태 /etc/NetworkManager/dispatcher.d/에 따라 wifi를 켜고 끄는 것 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

else문은 아마 불필요하고, 심지어 일부 조건에서 문제가 될 수도 있지만, 나는 (경우에 그 진술하지 않고, 단지의 경우 거기 왼쪽 eth0아래, 그것은 등장하지 않음).


이를위한 체계적인 방법은 무엇입니까?
— Xofo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.