Как я могу контролировать переключение между беспроводными точками доступа в Linux?
Поскольку стены моего дома толстые и сильно ослабляют беспроводные сигналы, у меня есть две точки доступа в разных частях моего дома, настроенные на один и тот же SSID с одинаковыми настройками. Оба работают хорошо в целом. Однако, аналогично тому, что наблюдал этот пользователь, я обнаружил, что перемещение моего ноутбука из одной комнаты в другую не заставляет его достаточно быстро переключать точки доступа; либо его повторное сканирование слишком редкое, либо слишком низкий порог качества сигнала, либо и то, и другое. Это приводит к раздражающе длительному периоду, когда сеть не будет отвечать.
Могу ли я контролировать это вообще в Linux? (это то, что работает на моем ноутбуке - более конкретно, у меня есть CrunchBang, вариант Debian, если это имеет значение). Я хотел бы иметь возможность изменить этот порог сигнала и / или период повторного сканирования, если это возможно, чтобы сделать его более агрессивным при переключении.
3 ответа
Сетевому менеджеру требуется время, чтобы решить, что соединение не возвращается, и только после этого он попытается восстановить соединение. я нахожу wicd
быть более "отзывчивым", чем NetworkManager
- Я бы подумал перейти на это.
Вы также можете запустить фоновый скрипт, который опрашивает уровень сигнала и вызывает отключение, если сигнал выходит за пределы определенного уровня. После отключения ваш сетевой менеджер будет обычно подключаться к сети с более сильным сигналом.
Пример сценария с использованием iw(1)
из пакета iw :
#!/bin/bash
IFACE="wlan0"
LIMIT="-75"
while true; do
signal=$(iw $IFACE link | grep signal | awk '{print $2}')
[ $signal ] && [ $signal -lt $LIMIT ] && iw $IFACE disconnect
echo $signal
sleep 1
done
Роуминг между точками доступа управляется
wpa_supplicant
, поэтому, чтобы переключиться на определенную точку доступа, не прерывая соединение дольше, чем необходимо, используйте
wpa_cli roam
. Например:
rav@fred:~$ sudo wpa_cli -i wlp58s0 scan_results
bssid / frequency / signal level / flags / ssid
60:45:cb:94:d1:50 2447 -47 [WPA2-PSK-CCMP][ESS] NextDoorBut1
cc:e1:d5:7c:af:a8 2417 -75 [WPA2-PSK-CCMP][WPS][ESS] NextDoorBut1
10:6f:3f:4c:54:83 2427 -70 [WPA2-PSK-CCMP][ESS] NextDoorBut1
rav@fred:~$ sudo wpa_cli -i wlp58s0 roam 60:45:cb:94:d1:50
OK
Разумеется, это работает только для переключения между точками доступа с одним и тем же SSID - и для этого необходимо провести небольшое предварительное исследование, чтобы определить BSSID для каждой точки доступа.
Точки доступа хранят информацию о состоянии вашего устройства - вы не можете просто магически перемещаться от одного к другому, сопоставляя параметры. Крупные компании, такие как Аруба, решают эту проблему, размещая "маршрутизатор доступа" в одном месте здания, а затем каждая "точка доступа" - это просто антенна и линейная карта в маршрутизаторе доступа. Домашние точки доступа не имеют этой магии.
Если точки доступа не общаются друг с другом по какому-то магическому протоколу, я мог бы предположить, что вы создаете огромные проблемы для своих точек доступа, потому что появляется какой-то неизвестный MACID и имеет пароль WEP/WPA, но не связал его, и поэтому они не имеют разрешить назначение IP-адресов, и поэтому им не разрешено отправлять пакеты, и это, вероятно, запутает wpa_supplicant на вашей рабочей станции, в дополнение к точке доступа.
Попробуйте так:
#!/bin/bash
IFACE="wlp3s0"
LIMIT="-65"
ID1="wireless network name"
ID2="wireless network name"
ssid=$(iw $IFACE link | grep SSID | awk '{print $2}')
signal=$(iw $IFACE link | grep signal | awk '{print $2}')
if [ $signal -lt $LIMIT ]
then case $ssid in
$ID1) nmcli con up $ID2
;;
$ID2) nmcli con up $ID1
;;
esac &&
ssid=$(iw $IFACE link | grep SSID | awk '{print $2}') && echo you are now connected to $ssid
else echo "no changes needed"
fi
sleep 1