S3.Blog

19 Марта 2024
A A A   RSS-лента
"Я знаю, что ничего не знаю, но многие не знают и этого". Сократ [?].

Linux: Автоматическое отключение wlan0 если подключен кабель в eth0

Дата последнего изменения: 7 Декабря 2016
Метки статьи: Готовые решения, Linux, Shell/Bash
Не стандартная проблема: необходимо на linux (ubuntu, debian, raspberry, и т.д.) автоматически отключать WiFi-интерфейс при подключении кабеля ethernet-коннектор и включать, при отсоединении кабеля.
 

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

ifplugd  демон обеспечивает аккуратный фундамент, на который мы можем опираться. Если ваш интерфейс eth0 объявлен с возможностью горячей замены, тогда ifplugd запускает специальный скрипт каждый раз, когда кабель вставлен или удален. Мы можем настроить этот сценарий, чтобы включить или отключить интерфейс wlan0

Итак...

1. устанавливаем ifplugd
sudo apt-get install ifplugd

2. запускаем программу конфигурации и устанавливаем auto для статических интерфейсов и all для всех подключаемых интерфейсов.
sudo dpkg-reconfigure ifplugd

3. прописываем в файл /etc/ifplugd/action.d/ifupdown
sudo nano /etc/ifplugd/action.d/ifupdown

это содержимое:
#!/bin/bash
set -e

case "$2" in
up)
  /sbin/ifup $1
  if [ "$1" == "eth0" ]; then /sbin/ifdown wlan0 ; fi # This is a new bit
  ;;
down)
  /sbin/ifdown $1
  if [ "$1" == "eth0" ]; then /sbin/ifup wlan0 ; fi # Another new bit
  ;;
esac 


4. так же надо прописать в конфиг /etc/default/ifplugd это:
INTERFACES="auto"
HOTPLUG_INTERFACES="eth0 wlan0"
ARGS="-q -f -u10 -d10 -w -I -l --iface=eth0"
SUSPEND_ACTION="none"

5. следующим шагом нам необходимо убедиться, что eth0 определяется как allow-hotplug в файле /etc/network/interfaces и настроить сеть
sudo nano /etc/network/interfaces

а) для простого случая, когда вы ходите в сеть с помощью dhcp
auto lo
iface lo inet loopback

allow-hotplug eth0 
iface eth0 inet dhcp

auto wlan0 
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

б) для варианта, когда вы хотите иметь один и тот же IP-адрес, независимо от того, через какой интерфейс вы подключены к сети:
auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet static
address 192.168.0.5
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.254

auto wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp
iface aoakley-home inet static
address 192.168.0.5
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway 192.168.0.254
6. осталось только перезапустить компьютер :)

PS:

7. в некоторых случаях не устанавливался gateway по-умолчанию, в таком случае поможет это решение:
ifplugd: Plug in cable while on wireless -> no default route

нужно в файл /etc/ifplugd/action.d/action_wpa после строки:
wpa_cli -i "${IFACE}" "${COMMAND}"
добавить это:
# Wait for default route for IFACE to disappear.
if [ "${COMMAND}" = "disconnect" ] ; then
	X=$(ip route list | grep default | cut -d" " -f5)
	while [ "$X" = "${IFACE}" ]
	do
		X=$(ip route list | grep default | cut -d" " -f5)
	done
fi


---
Найдено и доработано на просторах: Raspberry Pi Networking - Switching between wired and wireless networks in Raspbian & Debian


Похожие материалы:




Andrew (гость) • ответить
Если стоит NM, то ничего доставлять не нужно. Такой скрипт кладется в /etc/NetworkManager/dispatcher.d/
qashqir (гость) • ответить
Существует ли подобное решение для HDMI (автопереключение звука при подключении hdmi кабеля)?
Oleksa (гость) • ответить
у меня єто решается с помощью tlp https://linrunner.de/en/tlp/tlp.html

 
 
  Имя *:   Решите пример *: =
 
Полужирный Курсив Подчеркнутый Перечеркнутый
 
Вставить изображение Сделать цитатой Вставить ссылку Вставить код

Вставить смайл
 
 

 



© S3.Blog: Если критикуешь, не предлагая решения проблемы, то ты становишься частью этой проблемы.