Скрипт для автоматической настройки Wi-Fi подключения в Debian
Во время постоянного переключения между различными точками доступа к беспроводной сети приходиться постоянно изменять настройки сетевого интерфейса, комментируя старые и внося новые параметры подключения. Для таких ситуаций в файле настроек сетевого интерфейса предусмотрена директива mapping, которая предусматривает передачу выбора сетевых настроек внешнему скрипту. Вот пример файла interfaces, использующий такую технику:
auto wlan0 mapping wlan0 script /usr/local/sbin/wlan-detect.sh map OfficeAP wlan0-office map HomeAP wlan0-home iface wlan0-home inet dhcp wpa-ssid HomeAP wpa-bssid 01:23:45:67:89:AB wpa-psk HomePassphrase wpa-key-mgmt WPA-PSK wpa-pairwise TKIP CCMP wpa-group TKIP CCMP wpa-proto WPA RSN iface wlan0-office inet dhcp wpa-ssid OfficeAP wpa-bssid CD:EF:01:23:45:67 wpa-psk OfficePassphrase wpa-key-mgmt WPA-PSK wpa-pairwise TKIP CCMP wpa-group TKIP CCMP wpa-proto WPA RSN
Таким образом, право выбора сетевой конфигурации переложено на скрипт /usr/local/sbin/wlan-detect.sh. В документации описано, что он должен принимать имя интерфейса как аргумент и пары "ключ-значение" из директивы map в порядке их следования. Поскольку в примере привязка к имени точки доступа, то следует следить, чтобы ключ в директиве map совпадал с параметром wpa-ssid соответстующего интерфейса. Сам скрипт приведен ниже:
#!/bin/sh IFACE="$1" CTRL_SOCKET="/var/run/wpa_supplicant" # We cannot perform AP scanning until interface is down. Bring up wlan interface # with wpa_supplicant and wait a little. wpa_supplicant -i $IFACE -C $CTRL_SOCKET & PID=$! sleep 5 SCAN_RESULT=`mktemp` iwlist $IFACE scan > $SCAN_RESULT # Simple check of scanning results. Script stops searching when first AP is # found. while read SSID IFACE_ALIAS ; do if ( grep "ESSID:\"$SSID\"" $SCAN_RESULT > /dev/null ) ; then echo $IFACE_ALIAS break fi done # Some cleanup before exit. kill $PID rm $SCAN_RESULT exit 0
См. также
- interfaces(5)
- wpa_supplicant(8)