Как я могу контролировать переключение между беспроводными точками доступа в 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
Другие вопросы по тегам