Скрипт для автоматической настройки Wi-Fi подключения в Debian: различия между версиями

Материал из Linux Wiki
Перейти к навигацииПерейти к поиску
(Исправления в скрипте)
м
 
(не показано 5 промежуточных версий 2 участников)
Строка 5: Строка 5:
внешнему скрипту. Вот пример файла ''interfaces'', использующий такую технику:
внешнему скрипту. Вот пример файла ''interfaces'', использующий такую технику:


<source lang="text">
<source lang=bash>
auto wlan0
auto wlan0
mapping wlan0
mapping wlan0
Строка 21: Строка 21:
wpa-proto WPA RSN
wpa-proto WPA RSN


iface wlan0-trdata inet dhcp
iface wlan0-office inet dhcp
wpa-ssid OfficeAP
wpa-ssid OfficeAP
wpa-bssid CD:EF:01:23:45:67
wpa-bssid CD:EF:01:23:45:67
Строка 33: Строка 33:
Таким образом, право выбора сетевой конфигурации переложено на скрипт  
Таким образом, право выбора сетевой конфигурации переложено на скрипт  
''/usr/local/sbin/wlan-detect.sh''. В документации описано, что он должен принимать имя  
''/usr/local/sbin/wlan-detect.sh''. В документации описано, что он должен принимать имя  
интерфейса как аргумент и пары ``ключ-значение'' из директивы ''map'' в порядке их  
интерфейса как аргумент и пары "ключ-значение" из директивы ''map'' в порядке их  
следования. Поскольку в примере привязка к имени точки доступа, то следует следить,  
следования. Поскольку в примере привязка к имени точки доступа, то следует следить,  
чтобы ключ в директиве ''map'' совпадал с параметром ''wpa-ssid'' соответстующего  
чтобы ключ в директиве ''map'' совпадал с параметром ''wpa-ssid'' соответстующего  
Строка 62: Строка 62:
done
done


# Come cleanup before exit.
# Some cleanup before exit.
kill $PID
kill $PID
rm $SCAN_RESULT
rm $SCAN_RESULT
Строка 69: Строка 69:
</source>
</source>


[[Category:Конфиг-файл]][[Category:Скрипт]]
В качестве альтернативы данному скрипту можно использовать essidscan из пакета [http://packages.debian.org/sid/ifscheme ifscheme].
 
[[Category:Конфиг-файл]][[Category:Скрипт]][[Category:Сеть]]


== См. также ==
== См. также ==


* interfaces(5)
* interfaces(5)
* wpa_supplicant(8)
* wpa_supplicant(8)

Текущая версия на 18:14, 24 июля 2012

Во время постоянного переключения между различными точками доступа к беспроводной сети приходиться постоянно изменять настройки сетевого интерфейса, комментируя старые и внося новые параметры подключения. Для таких ситуаций в файле настроек сетевого интерфейса предусмотрена директива 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)