有線/ケーブルネットワークが利用可能な場合は、Wlanを無効にします


39

質問はそれをすべて言います。有線接続が利用可能な場合は、W-Lan接続を無効にする必要があります。Ubuntu / Gnomeでこれを行う最も簡単な方法は何ですか?

すべてのガイド(たとえばguessnetについて)で、ネットワーク構成全体(WPAキー、DHCPなど)を構成する必要がありましたが、そのような単純なユースケースには少し複雑すぎます。接続されたwlan0ときに無効にしたいだけですeth0


この質問に対する答えは、コンピューターによって異なります。Ubuntuでこれが許可されているかどうかはわかりませんが、通常はBIOSのオプションであることがわかりました。
イスジ

completely disablewlanを意味するのではなく、有線接続が利用可能な場合、Ubuntuを無効にしてwlanに接続しようとします。だから、それはOSのものです。
インゴフィッシャー

回答:


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イーサネットアダプターで機能し、内蔵アダプターでも機能すると確信しています。


ワイヤレスが何度も接続しようとしていたので、本当にイライラし始めていました。このスクリプトのおかげで、ようやくネットワークパスワードを要求されなくなりました。コンピューターを再起動すると、スクリプトは自動的に開始されますか?
ジョエルロード

2
@joellord:このスクリプトは、ネットワークインターフェイスが開始または停止するたびに自動的に実行されます。eth0を切断すると、ワイヤレスが有効になります。eth0を接続すると、ワイヤレスが無効になります。
12

1
ソリッド-完全に機能し、最小限のスクリプトで動作します。
エア

3
nmcliバージョン1.0.2では、 `nmcli nm wifi`を無線を意味するnmcli r wifi 場所に変更する必要がありましたr
アレッサンドロ

1
Ubuntu 16.04、bashバージョン4.3.48、このスクリプトを機能させるには引用符を削除する必要があります。
カルレス・サラ

8

network-managerのv0.9.10以降、最初のスクリプトを変更する必要があります

#!/bin/bash

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

それが役に立てば幸い!


これはおそらくスタンドアロンの回答になる可能性があります。それは言って非常に役立つだろう、この変更が起こるとネットワーク・マネージャのバージョン。
ジャーニーマンオタク

v0.9.10以降のようです。wiki.gnome.org/Projects/NetworkManager/nmcli
mruellan

LANソリューションが「eth0」と呼ばれる場合にのみ機能するため、このソリューションは正しくありません。
カルレス・サラ

4

GNOME GUIアプローチの非常に単純な...

  1. GNOMEパネルの時計のすぐ上にあるネットワークシステムインジケーターを右クリックします。(インジケータは、上下矢印(LAN)または従来のWiFiファネルの2つのアイコンのいずれかになります。LANとWiFiの両方またはLANのみが接続されている場合にアップ/ダウンアイコンが表示され、 WiFi経由でのみ接続されています(LAN切断))-[LANは自動的にWiFiに勝ります。*]

  2. 「接続の編集...」を選択します

  3. 「ワイヤレス」タブを選択します。
  4. リストの最初の接続をダブルクリックし、「自動的に接続」ボックスのチェックを外します。
  5. 「適用...」ボタンをクリックします。
  6. リスト内の接続ごとに繰り返します。

これにより、NMが常に自動的に接続しようとすることなく、ネットワークアイコンを左クリックすることで、ワイヤレスネットワークをオンザフライで手動で接続および切断できるようになります。

当然、ネットワークアイコンを右クリックして[ワイヤレスを有効にする]を左クリックし、チェックマークの有無によってワイヤレスインターフェイスを効果的にダウンまたはアップすることで、ワイヤレスを無効/有効にすることもできます。

  • LANはWiFiを自動的に切り捨てます。WiFiを無効にする必要はありません。イーサネットケーブルを抜くだけで、接続がWiFiにシームレスに転送され、手間をかけずに移動できます。同様に、LANを再接続します。
  • LANがWiFiに勝る一方で、NM(ネットワークマネージャー)は、異なるネットワークに同時にいて、オンライン(WiFi)とローカルホスト(LAN)またはV / Vなどの両方で作業している場合に、探しているものを見つけます。

2

単なる推測ですが、ifplugdが役立つと思います。ケーブルが使用されている場合、wifiをシャットダウンできます。


おかげで、私はすでにそれについて読んだ。ifplugdが気に入らないのは、すべてのネットワーク設定をに入れなければならないということ/etc/network/interfacesです。私はネットワークのことはあまり得意ではないので、既存の接続から必要な値をどこから取得できるのだろうか?さらに簡単な解決策があることを願っています。
インゴフィッシャー

1

2つの単純な「スクリプト」を作成します。スクリプトの名前は重要ではなく(単にwlanを使用します)、ケーブル接続されたネットワークインターフェイスは1つだけで、「eth0」と呼ばれます。わからない。これにより、wlan0だけでなく、ワイヤレスが完全に無効になることに注意してください。(複数のwlanインターフェースがあり、特定のインターフェースのみを無効にしたい場合のみ問題)

これらのスクリプトは、ブールロジックによって、2つ以上のケーブルネットワークインターフェイスがある状況に簡単に適合させることができます。

これらのスクリプトが「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

これにより、NetworkManagerでワイヤレスを有効または無効にします。これは通常、Gnomeパネルのシステムインジケーターとして表示されます。

dbus-send行の代わりに「ifconfig wlan0 down」または「ifconfig wlan0 up」を使用することもできますが、これはよりユーザーフレンドリーで、Ubuntuのシステムユーティリティへの干渉が少ないはずです。

Ubuntu Desktop 10.10でテストされており、NetworkManagerとdbusを使用して以前のバージョンまたは他のディストリビューションで動作するはずです。


これはおそらく受け入れられたnmcli radio wifi off答えと機能的に同等ですが、どちらかが「優雅」であるかどうかを確認するために両方の方法で接続を閉じたときにシステムログが報告するものを見てみたいです。
dragon788

1

これはDebian不安定版、カーネル> 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の以前の回答を改善したものです。(私はコメントへの評判を持っていません。)Fedoraのためのこの1つの作品だけでなく、ネットワーク・インターフェースは、今のような名前を持つことができる場所wlan0wlp6s0em1およびenp0s20u2u1)。このバリエーションは、インターフェイス名の照合を試みるのではなく/sys/class/net、デバイスに関する情報を探します。私のFedora 21ラップトップ(カーネル3.18)で動作し、Debian> = 7でも動作すると信じています。

#!/ bin / sh

[$#-ge 2] || 1番出口

DEBUG = false
STATEDIR = / var / run / nm-wired
mkdir -p $ STATEDIR

IFACE = $ 1
ACTION = $ 2

myname = $(basename "$ 0")|| 1番出口
log(){ロガー-p user.info -t "$ {myname} [$$]" "$ IFACE / $ ACTION:$ *"; }

if $ DEBUG; それから
    if [-e "/ sys / class / net / $ IFACE / device"]; それから
        ログ「/ sys / class / net / $ IFACE / device exists」
    他に
        ログ「/ sys / class / net / $ IFACE / device does not exist」
    fi

    if [-e "/ sys / class / net / $ IFACE / wireless"]; それから
        ログ「/ sys / class / net / $ IFACE / wireless exists」
    他に
        ログ「/ sys / class / net / $ IFACE / wireless does not exist」
    fi
fi

ケース$ {ACTION}
    アップ)
        rm -rf $ STATEDIR / $ IFACE

        #これが物理デバイスでない場合は、何もしないでください。
        if [!-e "/ sys / class / net / $ IFACE / device"]; それから
            ログ「$ IFACEは物理デバイスではなく、無視します」
            出口0
        fi

        #これが無線デバイスの場合は何もしないでください。
        if [-d "/ sys / class / net / $ IFACE / wireless"]; それから
            ログ「$ IFACEは有線デバイスではなく、無視します」
            出口0
        fi

        #有線デバイスを追跡します。彼らが下るとき、
        #デバイスノードも同様に機能します(USBイーサネットドングルなど)。
        #そのため、デバイスがどのタイプであったかを知る方法がありません。
        $ STATEDIR / $ IFACEをタッチします

        #WiFiをシャットダウンします。
        「WiFiをシャットダウンする」ログ
        nmcli r wifiオフ
        ;;
    ダウン)
        #以前に$ IFACEを認識したかどうかを確認します
        #物理的な有線デバイス。
        if [!-e $ STATEDIR / $ IFACE]; それから
            ログ「$ IFACEは有線デバイスではなく、無視します」
            出口0
        fi

        rm -rf $ STATEDIR / $ IFACE

        #単一のファイルをチェックする代わりに、チェックすることもできます
        #$ STATEDIRにまだファイルがあるかどうか。もしそうなら、我々
        #有線デバイスはまだ有効になっています...
        「WiFiを有効にする」ログ
        nmcli r wifiオン
        ;;
エサック

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、ダウンした場合、それは表示されません)。


これを行うsystemdの方法は何ですか?
Xofo
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.