web-dev-qa-db-ja.com

NetworkManagerでイーサネットへの接続時にWifiを無効にする

イーサネット(有線)経由でネットワークに接続しているときにWifi無線を無効にできますが、有線接続がない場合はWifi接続を有効にするにはどうすればよいですか基本的に、私はXOR自分の有線/無線接続状態を切り替えたいです。

2
palswim

私は Ilija Matoskiによるスクリプト を見つけてこれを正確に達成しました。これは/etc/NetworkManager/dispatcher.d/70-wifi-wired-exclusive.shに属します。

#!/bin/sh

name_tag="wifi-wired-exclusive"
syslog_tag="$name_tag"
skip_filename="/etc/NetworkManager/.$name_tag"

if [ -f "$skip_filename" ]; then
    exit 0
fi

interface="$1"
iface_mode="$2"
iface_type=$(nmcli dev | grep "$interface" | tr -s ' ' | cut -d' ' -f2)
iface_state=$(nmcli dev | grep "$interface" | tr -s ' ' | cut -d' ' -f3)

logger -i -t "$syslog_tag" "Interface: $interface = $iface_state ($iface_type) is $iface_mode"

enable_wifi() {
    logger -i -t "$syslog_tag" "Interface $interface ($iface_type) is down, enabling wifi ..."
    nmcli radio wifi on
}

disable_wifi() {
    logger -i -t "$syslog_tag" "Disabling wifi, ethernet connection detected."
    nmcli radio wifi off
}

if [ "$iface_type" = "ethernet" ] && [ "$iface_mode" = "down" ]; then
    enable_wifi
Elif [ "$iface_type" = "ethernet" ] && [ "$iface_mode" = "up"  ] && [ "$iface_state" = "connected" ]; then
    disable_wifi
fi

さらに、この切り替え操作を無効にするには、/etc/NetworkManager/.wifi-wired-exclusiveファイルを作成します(例:touch)。

3
palswim