Скрипт для автоматической настройки 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
В качестве альтернативы данному скрипту можно использовать essidscan из пакета ifscheme.
См. также
- interfaces(5)
- wpa_supplicant(8)