無線網路設定 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色來表示

mimetype 應用程式關聯設定

在使用桌面系統的時候常常因為安裝了許多程式而造成開啟軟體與檔案之間關聯出現問題,這是因為系統的應用程式關聯不正確。

* 以下的路徑的檔案和文件開啟有相關聯
/usr/local/share/applications/*.desktop (系統存放所有應用程式的程序配置)
~/.local/share/applications/*.desktop (用戶存放所有應用程式的程序配置)
/usr/local/share/applications/mimeinfo.cache
(**非常重要,啟動相關會參考此檔來決定mimetype的對應關係,此為系統域的設定檔)
~/.local/share/applications/mimeinfo.cache
(**非常重要,啟動相關會參考此檔來決定mimetype的對應關係,此為個人域的設定檔)

如果當軟體安裝之後沒有更新mimeinfo.cache的話,可以透過指令來強制更新
# update-desktop-database (預設更新系統層級的應用程式關聯,需root權限)
> update-desktop-database ~/.local/share/applications (更新用戶層級的關聯)

* 自訂檔案開啟關聯
假如我想由vim來開啟任何一個文字型態的檔案,可以自己寫一個vim.desktop
> vim ~/.local/share/applications/vim.desktop
[Desktop Entry]
Encoding=UTF-8
Type=Application
NoDisplay=true
Name=vim
Exec=urxvt -fn 'xft:AR PL New Sung:size=10' -vb +sb -b 10 -fg '#eeeeee' -bg '#101010' -e vim %f
MimeType=text/plain

※我開啟的不是gvim而是在console下執行的vim,所以必須要由term來喚起,我所用的是urxvt,在MimeType那裡看到就是由freedesktop所分類的mimetype,以後遇到這個檔案就會由vim來開啟
> update-desktop-database ~/.local/share/applications (更新mimeinfo.cache)

* defaults.list
在上以的目錄裡面可能會放現還有一個defaults.list這種檔,其實它與mimeinfo.cache是一樣的,主是要給gnome桌面環境使用的,對於KDE或是自己手動建立的桌面環境而言它沒有任何功用

rsync 同步資料

最近發現一個超好用的工具,對於兩台電腦資料同步的時候超級好用,本來都使用sftp或是scp在那邊貼來貼去,檔案改變的時候又要清楚改了什麼,要同步乾脆就砍掉重貼,有了rsync之後透過ssh的連線一下就搞定了。

* 安裝rsync
由ports來裝
# cd /usr/ports/net/rsync
# make install clean
透過package來裝
# pkg_add -r rsync

* 使用rsync

本端使用
> rsync -av src/ dist/

本端使用目的資料夾同步來源資料夾
> rsync -av --delete src/ dist/

透過ssh遠端使用 (兩台機器同時都要安裝rsync)
> rsync -av -e "ssh -p 1234" src/ clockwork@clockwork.cse.tw:~/Desktop/dist/
※透過ssh開啟1234埠建立連線,如果目的端沒有dist資料夾的話會自動建立

透過ssh遠端同步
> rsync -av --delete -e "ssh -p 1234" src/ clockwork@clockwork.cse.tw:~/Desktop/dist/

* 特別注意
如果目的資料夾不存在的話會自動建立,因此討論以下幾個案例
1. rsync -av src dist 會建立出dist/src/xxxx
2. rsync -av src/ dist 會建立出dist/xxxx
3. rsync -av src dist/ 會建立出dist/src/xxxx
4. rsync -av src/ dist/ 會建立出dist/xxxx

freebsd 下目錄檔名轉換

在我的環境都是UTF8的情況下,如果來自windows的隨身碟或是資料為big5要貼到系統裡的時候檔名都會出現不少的問題,因此介紹大家一個好用的工具叫convmv可以用來就目錄下的檔名做轉換非常的方便。

* 軟體安裝
從ports裝
# cd /usr/ports/converters/convmv/
# make install clean
從package安裝
# pkg_add -r convmv

* 使用方式
1. 掛載磁區
# mount_ntfs -C big5 /dev/da0s1 /mnt

2. 開screen做顯示編碼轉換
:encoding big5 utf8

3. locale改big5
> setenv LC_ALL zh_TW.Big5
> 開始做cp資料到要的目錄去吧

4. 複製完之後轉換檔名
> convmv -f big5 -t utf-8 -r --notest 檔名或目錄

* 參數說明
-f 目前編碼
-t 目標編碼
-r 遞迴進入目錄中對於有的檔名都修改
--notest 預設只會告訴你會改動到那些檔,而不會真的改動,使用notest才會真的改動

Freebsd Gmail Notify

對於常常使用Gmail的使用者,使用gnome-notify工具可以即時的收到來自新郵件的通知

* 軟體安裝
透過ports來安裝
# cd /usr/ports/mail/gmail-notify
# make install clean
透過package來安裝
# pkg_add -r gmail-notify

* 軟體設定
可直接透過啟動gmail-notify來設定(第一次啟動時要求設定)
> ~/.notifier.conf
[options]
lang = English
voffset = 10
gmailusername = femc7488
checkinterval = 20000 (20秒確認新郵件一次)
gmailpassword = ******** (你的帳戶密碼)
hoffset = 10
popuptimespan = 5000
browserpath = firefox3 (開啟的瀏灠器)
actionpath = (音效播放設定可安裝play來播放wav音效)
animationdelay = 15


* 軟體使用
> gmail-notify > /dev/null &