Gih's Blog

只言片语

FreeBSD 8 的无线设置

2011-06-01 by gihnius, tagged as freebsd

觉得FreeBSD 8 对无线配置的支持还是不够友好.整个ports里面只有一个叫 wifimgr 的工具管理无线,而且功能非常有限,比 wpa_gui 好不出哪! 所以我一直都是手工上无线. 因为经常要在不同的地点连接不同的无线网络(AP). 我只要事先把常用到的无线帐号都写到  /etc/wpa_supplicant.conf 里,并设置各个网络为disable.如:

network={
    ssid="CHINANET"
    psk="chinanet"
    disabled=1
}

network={
    ssid="linksys"
    key_mgmt=NONE
    disabled=1
}

network={
    ssid="linksys88"
    key_mgmt=NONE
    disabled=1
}

network={
    ssid="CMCC"
    key_mgmt=NONE
    disabled=1
}

network={
    ssid="TP_LINK"
    scan_ssid=1
    key_mgmt=WPA-PSK
    proto=WPA
    pairwise=CCMP
    group=CCMP
    psk="passwordtest"
    disabled=1
}

...... 

这样,当启动wpa_supplicant daemon时就不会试图连接哪个! 取消 /etc/rc.conf 里的设置:

# wlans_ath0="wlan0"
# ifconfig_wlan0="WPA DHCP"
# 

我取消开机自动配置wifi, 开机后执行以下脚本:

ifconfig wlan0 create wlandev ath0
ifconfig wlan0 up
/etc/rc.d/wpa_supplicant start wlan0
wpa_cli list ## 选择当前环境的网络
wpa_cli enable_network <network id> ## 输入要连接的网络 id
wpa_cli reconnect
sleep 2
dhclient -b wlan0
sleep 2
...... 

上面黄色那两行,你可以手动把 /etc/wpa_supplicant.conf 里对应的 network 段的 "disabled=1" 注释掉来代替. 整成脚本就是:

#!/bin/sh
## wifi.sh
ifconfig wlan0 create wlandev ath0
ifconfig wlan0 up
/etc/rc.d/wpa_supplicant start wlan0
sleep 2
wpa_cli list
echo "Please enter the network id: (number)"
read network_id
wpa_cli enable_network $network_id
wpa_cli reconnect
sleep 1
dhclient -b wlan0 
#!/bin/sh
## wifi_stop.sh
ifconfig wlan0 down
wpa_cli disconnect
wpa_cli terminate
/etc/rc.d/dhclient stop wlan0
ifconfig wlan0 destroy
echo "wifi interface destroy!" 

这样你不论在家里,上班,出差,星巴克,都可以通过这个脚本连接 wifi 了.