유선 / 케이블 네트워크가 사용 가능한 경우 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 wifir수단의 라디오
알레산드로 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, em1enp0s20u2u1). 이 변형은 인터페이스 이름과 일치하지 않고 /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.