web-dev-qa-db-ja.com

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

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

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

41
Ingo Fischer

このスクリプトを/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

これは、従来のeth*名と、enで始まる新しいカーネル「予測可能な名前付きインターフェース」をキャッチし、バスパスまたはMACアドレスを使用して、各インターフェースの名前が同じになるようにします。すべてのブート。これは、私が試したUSB-C(パススルー)およびUSBイーサネットアダプターで機能し、組み込みのアダプターでも機能すると確信しています。

59
derhoch

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

それが役に立てば幸い!

8
mruellan

非常に単純にgnome GUIアプローチ...

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

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

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

これにより、NMが常に自動的に接続することを試みずに、ネットワークアイコンを左クリックすることで、オンザフライの手動接続および切断のためにワイヤレスネットワークが動作可能になります。

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

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

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

2
ggustafsson

すでに電源管理に 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=""
1
Luis Cellino

これは、Cyril Fesslの以前の回答を改善したものです。 (コメントする評判はありません。)これはFedoraでも機能します。ネットワークインターフェースは、wlan0wlp6s0em1enp0s20u2u1などの名前を持つことができます)。このバリエーションは、インターフェース名を照合するのではなく、デバイスの情報について/sys/class/netを調べます。私のFedora 21ラップトップ(カーネル3.18)で動作し、Debian> = 7でも動作すると信じています。

#!/ bin/sh 
 
 [$#-ge 2] || exit 1 
 
 DEBUG = false 
 STATEDIR =/var/run/nm-wired 
 mkdir -p $ STATEDIR 
 
 IFACE = $ 1 
 ACTION = $ 2 
 
 myname = $(basename "$ 0")|| exit 1 
 log(){logger -p user.info -t "$ {myname} [$$]" "$ IFACE/$ ACTION:$ *"; } 
 
 $ DEBUGの場合; then 
 if [-e "/ sys/class/net/$ IFACE/device"];次に、
ログ "/ sys/class/net/$ IFACE/device exists" 
 else 
 log "/ sys/class/net/$ IFACE/device does not exist" 
 fi 
 
 if [-e "/ sys/class/net/$ IFACE/wireless"];次に、
ログ "/ sys/class/net/$ IFACE/wireless exists" 
 else 
 log "/ sys/class/net/$ IFACE/wireless does not exist" 
 fi 
 fi 
 
 case $ {ACTION} in 
 up)
 rm -rf $ STATEDIR/$ IFACE 
 
#これが物理デバイスでない場合は何もしないでください。
 if [! -e "/ sys/class/net/$ IFACE/device"];次に、
 log "$ IFACE not a physical device-ignoring" 
 exit 0 
 fi 
 
#これが何であっても何もしないワイヤレスデバイス。
 if [-d "/ sys/class/net/$ IFACE/wireless"];次に、
ログ "有線デバイスではない$ IFACE-無視" 
 exit 0 
 fi 
 
#有線デバイスを追跡します。それらがダウンすると、
#デバイスノードも同様に移動する可能性があります(例:USBイーサネットドングル)
#したがって、デバイスのタイプを知る方法はありません。
 touch $ STATEDIR/$ IFACE 
 
#WiFiをシャットダウンします。
ログ「WiFiをシャットダウンしています」
 nmcli r wifi off 
 ;; 
 down)
#$ IFACEが以前に
#物理的な有線デバイスとして認識されているかどうかを確認します。
 if [! -e $ STATEDIR/$ IFACE];次に、
ログ "有線デバイスではない$ IFACE-無視" 
 exit 0 
 fi 
 
 rm -rf $ STATEDIR/$ IFACE 
 
#単一のファイルをチェックする代わりに、
#$ STATEDIRにまだファイルがあるかどうかをチェックすることもできます。その場合、
#有線デバイスがまだ有効になっています... 
 log "enableing WiFi" 
 nmcli r wifi on 
 ;; 
 esac 
1
Steven

2つの単純な「スクリプト」を作成します。スクリプトの名前は重要ではなく(単にwlanを使用します)、ケーブルで接続されたネットワークインターフェイスが1つしかないため、「eth0」と呼ばれます... ifconfigで確認してください。わからないこれは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

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

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

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

1
joentjuh

これは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
Askmeanything

何らかの理由で、現在のトップ answer by 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はダウンしています。アップすることはありません)。

0
Andy Forceno

ソリューションを使用したい場合は、イーサネットが接続されているときに一時停止し、デバイスのプラグを抜いてウェイクアップしても機能することを確認するには、pre-downアクションの代わりに/に加えてdownに追加。 pre-downアクションはサスペンド時にトリガーされますが、downはトリガーされません。

0
KIT-Inwi