Настройте автоматическое подключение к горячей точке только при подключении к сети Ethernet

8

В настоящее время я переключаюсь между следующими двумя настройками ежедневно:

1) Будучи подключен к Интернету через сеть WiFi.

2) Подключите мой ноутбук (Ubuntu 16.04) к Интернету через проводное соединение, а затем поделитесь этим подключением с другими моими устройствами с помощью встроенной функции горячей точки Ubuntu.

На данный момент переключение с 1 на 2 требует, чтобы я вручную прошел через диалог «подключиться к скрытой сети» в Network Manager; аналогично переключение с 2 на 1 требует от меня ручного отключения от точки доступа и подключения к сети Wi-Fi. Это не много работы, но я делаю это достаточно часто, поэтому я хотел бы, чтобы это было автоматизировано.

Это не так просто, как включение автоматического подключения для точки доступа, поскольку тогда оно переопределяет функциональность автоматического подключения других сетей, а не подключает меня к сети Wi-Fi, когда я не подключен через проводное подключение, и в результате возникает горячая точка, но без интернета. Поэтому мне нужно решение, которое:

  • подключает меня к горячей точке всякий раз, когда я подключен к Интернету через проводное соединение.
  • отключает меня от горячей точки, когда нет подключения к Ethernet.
  • autoconnect меня к одной из сетей с autoconnect = true, когда они доступны, и нет подключения к Ethernet.

Полное объяснение того, как это сделать, было бы замечательно, но ссылка на хорошее (не экспертное) руководство по настройке таких правил также была бы очень признательна.

Bib потерянную
источник
1
Я не на 100% уверен, что вы делаете, я думаю, вы используете сетевой менеджер? ТАК трудно представить руководство. Я хотел бы посмотреть в post-upв /etc/network/interfacesконтексте, есть большой обзор здесь . post-upв основном, просто вызывает команды или сценарии после появления интерфейса.
Роберт Ридл
Похоже, хорошее место для начала. Посмотрим на это, спасибо.
Bib-lost

Ответы:

2

Насколько я понимаю, когда вы подключаете кабель Ethernet, который превосходит соединение Wi-Fi, и соединение Wi-Fi разрывается автоматически. Аналогичным образом отключение кабеля Ethernet автоматически подключается к предпочитаемому Wi-Fi (при условии, конечно, что у вас установлен флажок для автоматического подключения к этой сети Wi-Fi на вкладке «Общие» диспетчера сети. Протестировано при стандартной установке Ubuntu 16.04.3

Так что, если я вас правильно понимаю, вы просто хотите автоматически запустить службу горячей точки на своем ноутбуке, когда кабель Ethernet подключен, и отключить службу, когда кабель Ethernet отключен.

Это должно быть довольно просто сделать с помощью bash-скрипта, а nmcli«nmcli» - мощный сетевой инструмент, который позволяет вам устанавливать и отключать соединения по желанию и получать тонны соответствующей информации.

Чтобы выяснить, какие соединения вы будете использовать для сценариев, просто запустите их nmcli -t monitor| grep primaryпри подключении через Wi-Fi и подключите кабель Ethernet. Соединения, которые вы хотите установить и отключить, nmcliбудут окружены символом 's. Пример: «Проводное соединение 1». Логика заключается в том, что при подключении «Соединение» открывается горячая точка (может возникнуть необходимость использовать команду sleepили использовать -wпереключатель , чтобы nmcliв вашем ожидании сценария на заданное количество секунд для завершения команды перед выдачей следующего.

Разрушить соединение так же просто, как nmcli 'connection name' downиnmcli 'connection name' up

Примечание. Для полного управления с помощью сценария вам может потребоваться отключить параметр автоматического подключения, по крайней мере, для вашего Wi-Fi-соединения в Network Manager, так как он будет пытаться автоматически подключаться, когда он доступен, и может помешать выполнению того, что вы пытаетесь выполнить. Выдержка из man nmcli:

There may be multiple connections that apply
       to a device, but only one of them can be active on that device at any
       given time. The additional connections can be used to allow quick
       switching between different networks and configurations.

Поэтому, как только вы определили, что ваш Ethernet подключен, вы можете выполнить команды, чтобы разорвать соединение Wi-Fi Пример: nmcli connection my-wifi down и затем соединение горячей точки Пример: nmcli connection my-hotspot up

Подробнее о том, как автоматически запускать сценарии на основе сетевого подключения, смотрите здесь. Для более подробной информации о «nmcli» проверьте страницу руководства . А вот информация о том, как создать точку доступа.

Старейшина Гик
источник
Спасибо за ссылку на вики, поскольку я не являюсь poweruser, с ними легче начать, чем с man-страниц. Будет держать вас в курсе
Bib-lost
Пока все хорошо, но не полностью устраивает отключение автозапуска. Я просматриваю справочные страницы для nmcli, но будет ли команда «сканировать автоматически подключаемые сети» при отключении кабеля Ethernet?
Нагрудник потерян
@ Bib-lost Мои тесты показывают, что если оставить беспроводное соединение автоматически подключаемым, оно останется подключенным, когда кабель Ethernet подключен, и автоматически восстановит соединение, если вы отключите его вручную. Ваши результаты отличаются от моих?
Старейшина Гик
Я еще не смог запустить скрипты при подключении кабеля Ethernet (хотя я следовал инструкциям в вики), но только путем тестирования в консоли, если я вручную прикажу отключиться от соединения (даже если это автоматически подключается) ) это не переподключение.
Слюнявчик потерян
@ Bib-lost Интересно .. Мне придется провести дальнейшее тестирование. Вы говорите, что, если Wi-Fi настроен на автоподключение в Network Manager, и вы отключаете его, nmcli connection my-wifi downон никогда не переподключается?
Старейшина Гик
1

Решение, которое сделало это для меня (найдено с помощью Elder Geek).

Я продолжал AutoConnect на всех сетей , которые я хочу , чтобы автоматически подключиться, но от за хот-спота. Затем я помещаю следующий скрипт (с правами доступа, описанными на этой вики-странице ) в папку/etc/NetworkManager/dispatcher.d

!/bin/bash

interf=$1
state=$2

if [ $interf = "my-ethernet-device" -a $state = "up" ]; then
    nmcli connection up 'my-hotspot'
fi

if [ $interf = "my-ethernet-device" -a $state = "down" ]; then
    nmcli connection down 'my-hotspot'
fi

Это работает очень хорошо до сих пор; автоматическое подключение к точке доступа всякий раз, когда подключен кабель Ethernet или даже когда компьютер загружается или просыпается с подключенным кабелем Ethernet. Автоматическое отключение от горячей точки при каждом извлечении кабеля Ethernet с последующим автоматическим подключением к доступным сетям WiFi.

Bib потерянную
источник
Я рад, что вы все разобрались и нашли мой ответ полезным! Ура! Как новый участник вы можете не знать об этом.
Старейшина Гик