Вимкніть WLan, якщо доступна дротова / кабельна мережа


39

Питання каже все це. Все, що я хочу, - це те, що моє підключення W-Lan повинно бути відключене, коли є дротове з'єднання. Що було б найпростішим способом зробити це в Ubuntu / Gnome?

У всіх посібниках (наприклад, в деяких про гітнет) я виявив, що мені довелося налаштувати всю конфігурацію мережі (WPA-ключі, DHCP, ...), але я вважаю, що це занадто складно для такого простого випадку використання. Я просто хочу відключити, wlan0коли eth0підключено.


Відповідь на це питання залежить від комп'ютера до комп'ютера. Я не знаю, чи дозволяє це Ubuntu, але, як правило, я виявив, що це опція в BIOS.
Іссі

Я не маю completely disableна увазі wlan, я маю на увазі відключити Ubuntu, щоб спробувати підключитися до будь-яких wlans, якщо є дротове з'єднання. Так це справа в ОС.
Інго Фішер

Відповіді:


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

Це вловлює застарілі eth*імена та нове ядро ​​"передбачувані інтерфейси з іменем", які починаються з, enа потім використовують або шлях шини, або адресу MAC, щоб ім'я кожного інтерфейсу було однаковим у кожному завантаженні. Це працювало з USB-C (на самому початку) та USB-адаптером Ethernet, з якими я намагався, і я впевнений, що він буде працювати і з вбудованими адаптерами.


Моя бездротова мережа намагалася підключитися знову і знову, і це стало дуже дратувати. Дякую за цей сценарій, він нарешті перестав просити мене мережевого пароля. Чи буде автоматично запускатися сценарій, коли я перезавантажую комп'ютер?
Джоель Лорд

2
@joellord: Цей сценарій автоматично запускається кожного разу при запуску або зупинці мережевого інтерфейсу. Коли ви відключаєте eth0, ваш бездротовий зв’язок вмикається. Коли ви підключаєте eth0, ваш бездротовий зв’язок вимикається.
фрад

1
Solid - прекрасно працює і приємний мінімальний сценарій.
Повітря

3
З версією nmcli 1.0.2 мені довелося змінити `nmcli nm wifi`, nmcli r wifi де rозначає радіо
Алессандро Пеццато

1
Ubuntu 16.04, bash версія 4.3.48, цитати повинні бути видалені, щоб цей сценарій працював.
Карлес Сала

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

Сподіваюся, це допомагає!


Можливо, це може бути окрема відповідь. Це дуже допоможе сказати, з якою версією мережевого менеджера відбувається ця зміна.
Подорожник Geek


Це рішення не є правильним, оскільки воно працює лише в тому випадку, якщо ваш інтерфейс LAN називається "eth0".
Карлес Сала

4

Досить просто для підходу GUI до gnome ...

  1. Клацніть правою кнопкою миші на індикаторі мережевої системи на панелі gnome годинником. (Індикатор буде одним із двох значків; або стрілками вгору / вниз (LAN), або традиційною лінією WiFi. Зверніть увагу, що значок вгору / вниз з’явиться, коли підключені обидва LAN та WiFi або лише локальна мережа, а лінія WiFi з’явиться, коли підключено лише через WiFi. (LAN відключено) - [LAN автоматично перетворює WiFi. *]

  2. Виберіть "Редагувати з'єднання ..."

  3. Виберіть вкладку "Бездротовий".
  4. Двічі клацніть перше з'єднання у вашому списку та зніміть прапорець "Підключитися автоматично".
  5. Натисніть кнопку "Застосувати ...".
  6. Повторіть для кожного з'єднання зі списку.

Це дозволить бездротовій мережі працювати в режимі ручного підключення та відключення вручну, клацнувши лівою кнопкою миші на піктограмі мережі, без того, щоб NM намагався автоматично підключати вас.

Звичайно, ви також можете відключити / увімкнути бездротовий зв'язок, клацнувши правою кнопкою миші піктограму мережі, а потім клацнувши лівою кнопкою миші на виборі "Увімкнути бездротовий зв'язок", ефективно збиваючи або піднімаючи бездротовий інтерфейс, як зазначено наявністю або відсутністю галочки.

  • LAN автоматично перетворює WiFi, немає необхідності відключати WiFi. Просто відключивши кабель Ethernet, безперешкодно передаватиметься з'єднання Wi-Fi, і ви зможете без перешкод перебиратись та рухатися. Точно так само з повторним підключенням локальної мережі.
  • У той час як LAN робить козир для WiFi, NM (Менеджер мережі) знайде те, що ви шукаєте, якщо ви будете одночасно в різних мережах і працюєте як в Інтернеті (WiFi), так і з локальним хостом (LAN) або V / V, наприклад.

2

Просто здогадка, але я припускаю, що ifplugd може допомогти. Ви можете змусити його вимкнути wifi, коли використовується кабель.


Дякую, я вже читав про це. Що мені не подобається в ifplugd, це те, що я повинен вкласти всі свої мережеві налаштування /etc/network/interfaces. Я не дуже хороший у роботі з мережевими речами, тому мені цікаво, де я міг би отримати всі необхідні значення з моїх існуючих зв’язків? Все ж сподіваюся, що є більш просте рішення.
Інго Фішер

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

Це вмикає / відключає бездротовий зв'язок у NetworkManager, який зазвичай можна знайти як системний індикатор на панелі Gnome.

Ви також можете використовувати "ifconfig wlan0 вниз" або "ifconfig wlan0 вгору" замість лінії передачі dbus, але це має бути більш зручним для користувачів і менше заважати системним утилітам 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

Це поліпшення попередньої відповіді Кирила Феслла. (Я не маю репутацію коментарів.) Це один працює для Fedora , а також, де в даний час мережеві інтерфейси можуть мати імена , як wlan0, wlp6s0, em1і enp0s20u2u1). Цей варіант не намагається відповідати імені інтерфейсу, а шукає /sys/class/netінформацію на пристрої. Працює на моєму ноутбуці Fedora 21 (ядро 3.18), і я вважаю, що він буде працювати і на Debian> = 7.

#! / бін / ш

[$ # -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 / пристрій"]; потім
        журнал "/ sys / class / net / $ IFACE / пристрій існує"
    ще
        журнал "/ sys / class / net / $ IFACE / пристрій не існує"
    фі

    if [-e "/ sys / class / net / $ IFACE / wireless"]; потім
        журнал "/ sys / class / net / $ IFACE / Wireless існує"
    ще
        журнал "/ sys / class / net / $ IFACE / Wireless не існує"
    фі
фі

справа $ {ACTION} в
    вгору)
        rm -rf $ STATEDIR / $ IFACE

        # Не робіть нічого, якщо це не фізичний пристрій.
        якщо [! -e "/ sys / class / net / $ IFACE / пристрій"]; потім
            журнал "$ IFACE не фізичний пристрій - ігнорування"
            вихід 0
        фі

        # Не робіть нічого, якщо це бездротовий пристрій.
        if [-d "/ sys / class / net / $ IFACE / wireless"]; потім
            журнал "$ IFACE не провідний пристрій - ігнорування"
            вихід 0
        фі

        # Слідкуйте за провідними пристроями. Коли вони знижуються, то
        # вузол пристрою може також працювати (наприклад, USB Ethernet dongle),
        # тож у нас не було б можливості сказати, який тип пристрою.
        торкніться $ STATEDIR / $ IFACE

        # Тепер вимкніть WiFi.
        журнал "вимкнення Wi-Fi"
        nmcli r wifi вимкнено
        ;;
    вниз)
        # Перевірте, чи раніше ми визнавали $ IFACE як
        # фізичний, дротовий пристрій.
        якщо [! -e $ STATEDIR / $ IFACE]; потім
            журнал "$ IFACE не провідний пристрій - ігнорування"
            вихід 0
        фі

        rm -rf $ STATEDIR / $ IFACE

        # Замість перевірки одного файлу ми також могли перевірити
        # чи ще є файли в $ STATEDIR. Якщо так, ми
        # ще ввімкнено провідний пристрій ...
        журнал "включення WiFi"
        nmcli r wifi на
        ;;
есак

1

Якщо ви вже використовуєте tlp для керування живленням, для цього є функція.

Ви повинні змінити свій конф-файл (/ 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=""

Чи означає «підключений» підключений до живлення або підключений до буквального реплікатора док-станції / порту або просто підключений до чогось, що забезпечує підключення до локальної мережі?
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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.