無線網路設定 wpa_supplicant and wpa_cli

不論在linux系統或是BSD系統上,設定無線網卡一直都是個很麻煩的問題,尤其是一開始安裝基系統,沒有圖形介面,這樣需要上網抓東西怎麼抓是個很大的問題,然而wpa_supplicant這個軟體幫我們管理和存取點認證相關的問題,之後直接建立連線,是個很方便的作法,我在這裡提供一下目前我機器上的設定和配置方式。

系統:FreeBSD 8.0 stable
/etc/wpa_supplicant.conf 主要設定檔
/usr/share/examples/etc/wpa_supplicant.conf 範例設定檔

wpa_supplicant.conf 必須加入以下兩行
ctrl_interface=/var/run/wpa_supplicant #讓supplicant可以建立行程pid
update_config=1 #讓wpa_cli程式可以更新控制wpa_supplicant


1. 先設定系統啟動時使用wpa_supplicant
# vim /etc/rc.conf 加入
wlans_ath0="wlan0" #建立網卡介面freebsd8.0定義的,產生wlan0網卡介面
ifconfig_wlan0="WPA DHCP" #設定wlan0網卡使用wpa_supplicant認證並DHCP取得IP


2. 建立wpa_supplicant.conf設定檔
把剛剛所建立的wpa_supplicant.conf複製到/etc目錄下

此時重開機系統就會自動啟動,然而也可手動啟動

3. 手動啟動/停止/重啟wpa_supplicant
# /etc/rc.d/wpa_supplicant start|stop|restart wlan0

然而空空的設定檔,對於任何的AP都沒有定義,所以等於是做白工,因為現在最重要的部份就是開始寫你的設定檔,那要寫什麼列?以下是一些範例

4. 設定wpa_supplicant中AP的資訊和密碼,其實系統提供的範例就足夠參考了
# Shared WEP key connection
network={
ssid="wlan0" #AP名稱
key_mgmt=NONE #和wpa的psk是互斥的,沒指定就要使用psk)
wep_key0="1234512345" #需要的密碼
}
# Shared WEP key connection using Shared Key
network={
ssid="ap1411a"
key_mgmt=NONE
wep_key0="1234567890"
auth_alg=SHARED
}
# Planintext connection沒有上鎖的AP
network={
ssid="YZUWLAN"
key_mgmt=NONE
}
# WPA-PSK connection
network={
ssid="AP1411A"
psk="iplababab1411" #wpa認證密碼
}


5. 啟動wpa_supplicant
到這裡有兩種重啟方式,第一種直接reboot機器,第二使用以下指令
# /etc/rc.d/wpa_supplicant restart wlan0

6. 使用wpa_cli控制和管理wpa_supplicant
# wpa_cli -i wlan0 status (看看目前的狀態)
# wpa_cli -i wlan0 help (查看參數與指令)
# wpa_cli -i wlan0 terminate (關閉wpa_supplicant)
# wpa_cli -i wlan0 interface (查看有那些無線網卡介面)
# wpa_cli -i wlan0 list_networks (查看wpa_supplicant.conf檔裡的設定)
# wpa_cli -i wlan0 select_network (選擇不同的AP,id為AP代號0,1,2,3...)
# wpa_cli -i wlan0 enable_network
# wpa_cli -i wlan0 disable_network
# wpa_cli -i wlan0 remove_network (刪除AP資訊)
# wpa_cli -i wlan0 reconfigure (重新讀取wpa_supplicant.conf設定內容)
# wpa_cli -i wlan0 save_config (儲存寫入到wpa_supplicant.conf中,否責變更無效)
# wpa_cli -i wlan0 disconnect (斷線)
# wpa_cli -i wlan0 reconnect (重新連線)
# wpa_cli -i wlan0 scan (掃描附近的AP)
# wpa_cli -i wlan0 scan_results (印出附近AP的相關資訊)

以上常常用到的差不多是disconnect, reconnect, scan, scan_results, select_network, list_networks, status, reconfigure

※wpa_supplicat是個非常好用的工具,讓我們不必自己去一行一行用指令去設定要連結的AP相關資訊,而可以透過wpa_supplicant.conf設定檔,讓系統開機之後自動搜尋附近AP如果已建立資訊的,就會自動連結好,而如果你換了一個地方,要更換無線網路設定,也只需要用wpa_cli select_network 就可以把網路切換過去。

single-user mode 救援模式

當系統被改壞的時候,或是無法進根檔案系統的時候,就需要使用single-user mode了,進入之後在對改錯的地方修正,重開機就OK了

系統重啟時如果有選單的話,直接選4就可以進入single-user mode了,如果像我連選單都不開的話,就需要在帶入核心 前按下任意鍵,此時就會有個OK的提示符號出現,可以使用 help看一下提供什麼功能,如果要進入single-user mode 的話直接輸入

OK> boot -s

以上輸入完畢之後,系統就開始由單使用者方式進入系統,而檔案系統都是使用read-only方式掛載,此時就可以修正需要修正的地方了。

通常進入拿到的shell是B shell其難用無比,所以我通常都會第一時間執行tcsh

# /bin/tcsh

之後就可以始對錯誤的地方修正了 ,如果需要檢查和修正檔案系統的話可以使用

# fsck -y /dev/da4s1a
# fsck -y /dev/da4s1d

然而如果因為在/etc下錯砍了不知道什麼檔以造成系統無法啟動的話,除了在單人模式把設定檔修正以外,如果實在太多,而且也不知道有那些的話,可以拼一下用升級系統方式直接升級設定檔,如此一來遺失的設定檔可以補回

# cd /usr/src
# mergemaster

系統就會比對少的檔就會叫你安裝了, 如此一來就可以補齊檔案,如果src裡面的原始檔已經和此次建立的不同的話,那等救回來開機進去之後,要把整個系統都升級,因為你已經用了新的設定檔,但是整個系統都還是舊的。

256 colors

在unix系統上,本來只有16色的,不過漸漸的,許多的應用程式都支援256色了,像是常用的xterm, urxvt, screen等都支援256色表示,此篇來介紹一下如何打造一個256色的環境。

1. xterm, rxvt-unicode, screen 支援256色
要達成預期的效果,當然是軟體需要重新編譯進加上支援256色的設定,如果你已安裝了,可以透過portupgrade使用-m的參數將256色支援的選項傳給ports來重新編譯。

軟體已安裝的人請用以下的指令
# portupgrade -ufv x11/xterm -m WITH_256_COLOR=yes
# portupgrade -ufv x11/rxvt-unicode -m WITH_XTERM_COLOR=yes
# cd /usr/ports/sysutils/screen && make config (選取256色支援)
# portupgrade -ufv sysutils/screen

未安裝的人請用以下的指令由ports安裝
# cd /usr/ports/x11/xterm && make WITH_256_COLOR=yes install clean
# cd /usr/ports/x11/rxvt-unicode && make WITH_XTERM_COLOR=yes install clean
# cd /usr/ports/sysutils/screen && make config (選取256色支援) && make install clean

2. 完成軟體支援之後先測試一下是不是可以正常支援256色了
下載 http://www.frexx.de/xterm-256-notes/data/256colors2.pl 是個perl程式
# perl ./256color2.pl 如果有支援的話,那應該會出現256種顏色

3. 之後就可以開始使用256種顏色了
可以參考以下兩個網頁的教學
http://www.frexx.de/xterm-256-notes/
http://www.pixelbeat.org/docs/terminal_colours/
使用256色的指令碼就像使用ansii color 16色一樣是由一些跳脫字元表示
\033[38;5;0~255m 設定前景色
\033[48;5;0~255m 設定背景色

以上適用於程式做printf出來使用,如果使用要使用在prompt或是用在motd的話需要在文字中直接寫入跳脫字元,以vim為例,要插入跳脫字元\033為先按下ctrl+v之後按下ESC鍵,即可輸入\033跳脫字元,而在編輯器中看到大概會是這樣
^[[38;5;0~255m 要上色的文字 ^[[m

如我的prompt就使用了256色來表示