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

linux networking ubuntu-10.04 wireless-networking

質問が全てを物語っています。私が望むのは、有線接続が利用可能なときはいつでもW-LAN接続を無効にすることです。Ubuntu/Gnomeでそれを行うための最も簡単な方法は何でしょうか?

すべてのガイド(例えば guessnet についてのいくつかのガイド)では、ネットワーク全体の設定(WPA キー、DHCP、…)をしなければならないと書いてありましたが、このような単純な使用例にしては少し複雑すぎると感じました。私は、eth0が接続されているときにwlan0を無効にしたいだけです

  47  None  2011-01-14


ベストアンサー

このスクリプトを/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 イーサネットアダプタで動作しました

64  derhoch  2011-12-13


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  2014-09-28


gnomeのGUIアプローチのために、かなりシンプルに

  1. 時計の横にあるノームパネルのネットワークシステムインジケーターを右クリックします。(インジケータには、上下の矢印(LAN)と従来のWiFiファネルの2つのアイコンが表示されます。上/下のアイコンは、LANとWiFiの両方が接続されている場合、またはLANのみが接続されている場合に表示され、WiFiファネルはWiFiのみで接続されている場合に表示されます(LANが接続されていない場合)。(LAN Disconnected)) — [LAN trumps WiFi automatically.]

  2. Edit Connections…」を選択します

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

これは、ネットワークアイコンを左クリックして利用可能なオンザフライの手動接続と切断のためのワイヤレスネットワークの操作を残し、NMは自動的にすべての時間を接続しようとせずに

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

  • LANは自動的にWiFiに切り替わりますので、WiFiを無効にする必要はありません。イーサネットケーブルを抜くだけで、シームレスにWiFiに接続を移行してくれるので、何も気にせずに移動することができます。同様に、LANの再接続でも
  • LANはWiFiを切り札にしていますが、NM (Network Manager)は、異なるネットワーク上に同時に存在し、オンライン(WiFi)とローカルホスト(LAN)またはV/Vなどの両方で動作している場合に必要なものを見つけることができます

4  rjbradlow  2012-10-01


Just a guess but i assume ifplugd could help.ケーブルが使用されているときにwifiをシャットダウンさせることができます

2  ggustafsson  2011-01-15


スクリプトの名前は重要ではありません (私は単に 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を使った他のディストリビューションでも動作するはずです

2  joentjuh  2011-04-06


これは、Debian の unstable, kernel >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  2015-03-12


これは Cyril Fessl の以前の回答を改良したものです。(私はコメントする評判を持っていません。) これはFedoraでも動作します。)このバリエーションは、インターフェース名にマッチしようとせず、デバイスの情報を /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: $*"; }

if $DEBUG; then
if [ -e "/sys/class/net/$IFACE/device" ]; then
log "/sys/class/net/$IFACE/device exists"
else
log "/sys/class/net/$IFACE/device does not exist"
fi

if [ -e "/sys/class/net/$IFACE/wireless" ]; then
log "/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

# Don't do anything if this is not a physical device.
if [ ! -e "/sys/class/net/$IFACE/device" ]; then
log "$IFACE not a physical device -- ignoring"
exit 0
fi

# Don't do anything if this is a wireless device.
if [ -d "/sys/class/net/$IFACE/wireless" ]; then
log "$IFACE not a wired device -- ignoring"
exit 0
fi

# Keep track of wired devices. When they go down, the
# device node may go as well (e.g. USB Ethernet dongle),
# so we'd have no way of telling what type the device was.
touch $STATEDIR/$IFACE

# Now shut down WiFi.
log "shutting down WiFi"
nmcli r wifi off
;;
down)
# Check whether we previously recognised $IFACE as a
# physical, wired device.
if [ ! -e $STATEDIR/$IFACE ]; then
log "$IFACE not a wired device -- ignoring"
exit 0
fi

rm -rf $STATEDIR/$IFACE

# Instead of checking a single file, we could also check
# whether there are still files in $STATEDIR. If so, we
# still have a wired device enabled...
log "enabling WiFi"
nmcli r wifi on
;;
esac

1  Steven  2015-03-13


すでに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  2016-09-20


何らかの理由で、現在のトップanswer by derhochは、そうすべきであるにもかかわらず、私のためには動作しません。他の提案のいくつかは動作しますが、私は非常にシンプルなものを望んでいました。そこで、私は以下のスクリプト(/etc/NetworkManager/dispatcher.d/に入れてeth0の状態に応じてwifiをオンオフするようにしています)を使っています

#! /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  2015-09-01


Ethernet接続中にサスペンドしても動作することを確認したい場合は、pre-downアクションをdownだけではなく/追加で使用することができます。pre-downアクションはサスペンド時に発動するのに対し、downアクションは発動しません

0  KIT-Inwi  2020-02-03


タイトルとURLをコピーしました