USB安裝FreeBSD系統

使用光碟來裝,每出一版就要燒一次,此外有些電腦不見得有買光碟機,所以還要借外接式光碟來裝非常麻煩,這裡提供了透過USB碟來安裝FreeBSD的方式。如此可以更節省不必要的資源浪費

* 準備東西

1. 下載8.0-RELEASE-i386-disc1.iso映像檔放在/root/下面
2. 準備一片隨身碟大小超過600M的就行了

* 格式化並安裝BootLoader在隨身碟上

# dd if=/dev/zero of=/dev/da0 bs=1k count=1 (清除所有MBR與Partition Tables)
# sysinstall (使用系統工具切割Partition比較方便)
-> Custom -> Partition -> da0 (假設你插上去裝置是da0)
-> 選A = Use Entire Disk(用掉整個隨身碟) -> 選W = Write Changes -> 問你問題選YES
-> 之後會問你要不要裝boot manager在MBR上,選Standard就行了 -> 完成後離開sysinstall
# sysinstall (使用系統工具切割Label比較方便)
-> Custom -> Label -> da0 (只有一個分割區da0s1,對它做一個Label)
-> 選C = Create (建立一個Label) -> 問你大小直接選OK -> type選FS -> mount輸入/mnt
-> 選W = Write (寫入) -> 問你問題選YES -> 完成後離開sysinstall
此時到/dev下面看應該會看到da0, da0s1, da0s1d表示有一個磁碟,上面有一個分區,此分區上有一個Label代號為d,但是我們要掛在根目錄上,所以要把代號d改為a
# umount /mnt (先卸載,否責不能修改)
# bsdlabel -e /dev/da0s1 (對第一分區修改Label)
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
c: 15647247 0 unused 0 0
d: 15647247 0 4.2BSD 0 0 0

將上面的d:改成a:之後存檔離開(上面是出現在vi編輯器中)

* 掛載iso與隨身碟

# mdconfig -a -f 8.0-RELEASE-i386-disc1.iso -u 0
# mount_cd9660 /dev/md0 /media/ (光碟內容)
# mount /dev/da0s1a /mnt (隨身碟內容)

* 複製iso內容到隨身碟中

# cd /media
# cp -afv * /mnt/ (慢慢等它跑完吧!)

* 卸載iso與隨身碟

# umount /mnt /media
# mdconfig -d -u 0 (卸載iso)

※完成以上動作之後你的隨身碟可以拔下來了,並且將有光碟一樣的功能,可以拿來安裝FreeBSD了,非常的方便也不會造成資源的浪費

Network and Routing start restart stop

* Use FreeBSD rc system enable network service

To start FreeBSD network service:
# /etc/rc.d/netif start

To stop FreeBSD network service:
# /etc/rc.d/netif stop

To restart FreeBSD network service:
# /etc/rc.d/netif restart



* Manual method using ifconfig

To stop network card (NIC) on-fly:
# ifconfig network-interface down

To start network card (NIC) on fly:
# ifconfig network-interface up

To list down network interface:
# ifconfig -d

To list up network interface:
# ifconfig -u


* FreeBSD Update / restart routing tables / service

It is also necessary to update routing table after restating networking service, enter:
# /etc/rc.d/routing restart

How do I restart network service over ssh session?

You need to type the commands as follows in order to avoid any problems:
# /etc/rc.d/netif restart && /etc/rc.d/routing restart

make installworld 時錯誤找不到路徑問題

在make installworld 可能會出現btxld not found這是路徑上的問題,可以透過以下方式修正
make installworld PATH=/sbin:/bin:/usr/sbin:/usr/bin

問題就可以解決了

xscreensaver 螢幕保護程式

在偶然的機會下逛到X下的螢幕保護程式,裡面有非常多的選擇,也可以自訂圖片目錄讓它自動在閒置時間就輪流播放,最好玩的是它還可以拿來當成動態的桌面。

* 安裝
# cd /usr/ports/x11/xscreensaver && make install clean
或是用package來裝
# pkg_add -r xscreensaver

* 自動建立設定檔
xscreensaver已經有完善的圖形介面來完成一個設定檔,不過首先要先啟動你的X11環境。
> xscreensaver-demo
啟動這隻程式之後,用圖形介面所修改的設定都會自動寫到~/.xscreensaver檔案裡面,所以不需要手動去改這個檔案,除非要做一些hack才需要去動它。

* X11啟動時自動啟動xscreensaver
其實xscreensaver是一隻在背景執行的程式,它會看目前的閒置時間,當時間到就自動啟動,並覆蓋所有的視窗。因此我們需要在.xinitrc(X啟動最重要的設定檔)裡面加入設定。
> vim ~/.xinitrc
export LANG=zh_TW.UTF-8
export LC_ALL=zh_TW.UTF-8
export XMODIFIERS='@im=SCIM'
xscreensaver -no-splash &
xmodmap ~/.Xmodmap
scim -d &
exec awesome


完成以上的動作,你的環境應該在你所設定的timeout時間後就會自動啟動xscreensaver。

* 使用動態桌面(非常的炫,但你要有足夠的cpu與顯示卡)
> vim ~/.xinitrc
export LANG=zh_TW.UTF-8
export LC_ALL=zh_TW.UTF-8
export XMODIFIERS='@im=SCIM'
/usr/local/bin/xscreensaver-hsacks/glmatrix -root &
xmodmap ~/.Xmodmap
scim -d &
exec awesome

我選擇的是glmatrix這個螢幕保護程式,其實有非常多,在xscreensaver-hacks目錄下看到的全部都可以使用,可以先使用screensaver-demo先看一下喜歡那一個在來修改,而且每個都具有不同的參數可以設定,可以使用man來看有那些設定,如上所示我使用了-root這個參數,表示我要它在Root window執行,其實就是背景啦~ 如此非常簡單就可以完成動態的桌面。
nspluginwrapper是bsd上使用linux的flashplugin的方法之一。雖然它需要安裝一個非常大的linux_base的ports但是還算滿好用的,沒辦法目前許多plugin只有在linux上有,沒有提供source出來,所以不會出現在ports裡面。

* 自動搜尋目錄並自動安裝
> nspluginwrapper -a -v -i

* 自動搜尋目錄並自動移除
> nspluginwrapper -a -v -r

* 指定安裝的plugin
> nspluginwrapper -i /usr/local/lib/npapi/linux-f10-flashplugin/libflashplayer.so

* 安裝之後所在目錄
~/.mozilla/plugins/

※安裝是針對每個使用者,而不是系統層級,所以不要使用Root來執行

系統的備份

天有不測風雲,可能天災也可能人禍,基本的系統一張光碟或是一塊軟碟片加上網路即可輕鬆搞定,但是最花時間的重要設定及使用者資料要重建可是件不小的工程,如果平時能將重要檔案及使用者資料備份起來,就可以省去很多的復原的時間。

在 FreeBSD 中已經內建好一些和備份有關的指令,例如:tar , dump , restore , dd , cpio , pax , ...... 至於要使用哪個工具則視個人喜好及需求囉!我個人習慣用 tar 來備份像 /etc , /usr/local/etc , ...... 等以目錄或檔案為主的設定檔,如果像使用者的資料 (/home) 及信箱 (/var/mail) 是放在單獨的 partition 則是利用 dump 備份及用 restore 來還原。

下面就來看看如何用 tar 及 dump 完成基本的備份工作。

1.tar

tar (tape archive) 原本是設計用來將文件打包到磁帶中的,我們也可以將檔案或是目錄打包成一個單一的檔案,必要時再用同一個程式來將資料全部還原或是只解開部份的資料,正因為它可以備份檔案或目錄,深受大家的愛用。

常用參數:

* 指定動作 :
-c create,新增一個備份檔
-t list,顯示備份檔中的檔案清單
-x extract,解開備份檔中的檔案

* 指定檔案:
-f file,讀/寫指定的檔案

* 壓縮方式:
-z gzip,備份的東西要用 gzip 壓縮/解壓縮
-y bzip,備份的東西要用 bzip 壓縮/解壓縮,也可以用 -j

* 其它:
-p permissions,保留原來的權限
-v verbose,備份的內容要顯示在畫面
-C (大寫 C),cd 先切換目錄

由於 tar 的功能非常的多,指令可用的選項令人眼花瞭亂,下面只示範最常用的,有興趣再自己用 man tar 好好的研究囉!

1.1 以 tar 打包要備份的資料

如果沒有什麼特殊需求,利用 tar 備份檔案只要用到 -c (新增) ,-p (保留權限設定),-f (指定檔名),頂多再加個 -v 看一下打包的過程。

例如:
tar -cpvf /home/backup/etc.tar /etc

上例將 /etc 目錄中所有的檔案打包到 /home/backup/etc.tar 中。

也可以同時備份多個目錄,將要打包的清單(以空白分隔)接在最後面即可。下面的例子將 /etc , /usr/local/etc 打包在 etc.tar 中:

tar -cpvf /home/backup/etc.tar /etc /usr/local/etc

我們也可以使用:

tar -czpvf /home/backup/etc.tgz /etc

和前面的例子比較,多了個參數 z ,也就是將 tar 打包完的檔案再利用 gzip 壓縮,所以新產生有經過壓縮處理的備份檔我們也將檔名命名為 etc.tgz (.tgz 結尾),也有人用 .tar.gz ,端看個人習慣。

咦~好奇的人可能會想到 FreeBSD 的 packages 檔名好像叫 *.tgz 或 *.tbz,和 tar , gzip , bzip 有沒有關啊?有興趣可以找個 FreeBSD 的 package ,用 tar 來打開包裝看看哦!!

另外,比較一下這兩個同樣是備份 /usr/local/etc 的指令有何不同?

tar -czvf /home/backup/local.etc.1.tgz /usr/local/etc
tar -czvf /home/backup/local.etc.2.tgz -C /usr/local etc

由於 tar 預設在備份時會儲存檔案的路徑 (但是自動去掉開頭的第一個斜線) ,也就是 /usr/local/etc/rc.d 在 local.etc.1.tgz 中會變成 usr/local/etc/rc.d,如果我們連 usr/local 都不想要,打包時可以利用 -C (大寫字母) 這個參數來控制路徑的保留層次,像前面第二個例子加了 -C /usr/local ,tar 會先切換至 /usr/local 目錄才備份 etc,所以在 local.etc.2.tgz 中 /usr/local/etc/rc.d 變成 etc/rc.d 儲存起來。


1.2 查看 tar 打包的檔案

要查看以 tar 打包的檔案只要利用 -t 這個動作參數即可。

例如:

tar -tvf /home/backup/etc.tar

上例會將 /home/backup/etc.tar 中的檔案清單顯示出來。

如果備份時有用 gzip 壓縮過則可以加上 -z :

tar -tzvf /home/backup/etc.tgz

如果備份時用 bzip 壓縮過則加上 -y 或是 -j:

tar -tyvf /home/backup/etc.tbz

1.3 解開 tar 打包的檔案

要解開 tar 封裝的檔案是利用 -x 這個動作參數,再搭配 -z , -y (-j) 解壓縮。如果想保留原來的權限設定則要記得使用 -p,至於要不要使用 -C (大寫字母) 則要看當初在打包時有沒有使用及自己想要放置的路徑而定,最容易犯的毛病大多是解錯路徑,所以在使用 -x 解開時一定要記得先用 -t 查看一下當初是怎麼打包的,最保險的方法是先解到一個暫存的地方,再將需要的檔案複製/搬移到目的地。

將 /home/backup/etc.tgz 中的東西在目前所在的目錄解開:

tar -xzvf /home/backup/etc.tgz

將 /home/backup/etc.tgz 中的東西在 /home 中解開:

tar -xzvf /home/backup/etc.tgz -C /home

將 /home/backup/etc.tgz 中的東西在 /home 中解開,並保留原始的權限:

tar -xzpvf /home/backup/etc.tgz -C /home

1.4 只解開 tar 打包的部份檔案

只解出 /home/backup/etc.tgz 中的 etc/group , etc/master.passwd 兩個檔案:

tar -xzvf /home/backup/etc.tgz etc/group etc/master.passwd

將 /home/backup/etc.tgz 中凡是叫 etc/rc* 通通解開,其它的不要:

tar -xzvf /home/backup/etc.tgz 'etc/rc*'

將 /home/backup/etc.tgz 中的檔案解開,但是 rc.d 目錄中的東西不要:

tar -xzvf /home/backup/etc.tgz --exclude='rc.d/*'

以上提到的方法也可以應用在打包時 (-c) 及查看清單時 (-t) 。


1-5 利用 tar 直接複製整個目錄到另一個目錄中

利用 tar 和 pipe 的技巧,可以做整個目錄直接複製,不過這個方法並不保證完整哦,畢竟它的方式不若 dump + restore 完備。

假設我想把 /usr 中所有的東西複製到 /mnt/usr 中,就執行底下的指令:

tar cf - /usr | (cd /mnt ; tar xvfBp -)

2. dump 及 restore

前面提過的 tar 可以針對目錄或檔案來備份,而 dump 則是以 block 為處理單位,針對整個檔案系統(分割區)來備份,可以更完整的保持系統的原貌不會有所缺漏,以 dump 備份的資料可以用 restore 再還原回來。

2.1 以 dump 將整個 partition 備份至一個檔案

使用過 Norton ghost 的人應該知道裡面有個選項是將 MS Windows 或 Linux 系統的某個分割備份到映像檔中,下面則是利用 dump 做類似的動作,將某個分割區備份至一個檔案。

假設 /home 是一個單獨的分割區 (/dev/ad0s1h),而 /backup 是一個空間夠大的目錄,我們可以執行:

# dump -0uaf /backup/home.dump /home

上面的例子以 level 0 將 /home 所在的分割區備份至 /backup/home.dump 中。

參數說明:

* -0 以 level 0 備份,也就是完整備份,level 可以為 0~9,level 1 則只備份 level 0 後有異動的部份。
* -u update,備份完成後自動更新 /etc/dumpdates 的內容(記錄分割區代號、level、備份日期)。
* -a auto-size,略過可儲存空間大小的檢查。
* -f file,將備份的資料輸出到後面參數指定的檔案,也可以是一個硬體(device file)或是標準輸出 (-)。

2.2 以 restore 還原檔案

以 dump 備份的分割區我們可以用 restore 將檔案還原出來,就像利用 ghost 把映像檔再寫入 partition 一樣,不過 restore 也可以只解出部份檔案。不過在使用 restore 要注意的是,restore 並不會幫我們將 partition 做格式式,而且,它是將內容解在目前所在的目錄,所以要記得先做好格式化並切換到要還原的目錄。

例如想把 /home dump 完的備份 ( /backup/home.dump ) 還原到 /mnt/new (/dev/ad1s1e) 這個 partition 中,如果 /dev/ad1s1e 已經格式化好,而且已經 mount 到 /mnt/new ,就可以執行以下指令:

# cd /mnt/new
# restore -rf /backup/home.dump

完成後,/mnt/new 就可以看到原來 /home 的中的資料。

如果只想還原備份中的部份檔案怎麼辦呢?

restore 提供 -i 的參數來進行交談式的還原,我們可以利用這個方法來指定要還原的部份,例如,只想由 /home 的備份檔 home.dump 中還原 /home/gsyan , /home/students 的資料,我們可以執行:

# restore -if /backup/home.dump

出現 restore > 的提示符號後,我們就可以下指令,例如:輸入問號 (?) 即可列出可用的指令,

restore > ?
Available commands are:
ls [arg] - list directory
cd arg - change directory
pwd - print current directory
add [arg] - add `arg' to list of files to be extracted
delete [arg] - delete `arg' from list of files to be extracted
extract - extract requested files
setmodes - set modes of requested directories
quit - immediately exit program
what - list dump header information
verbose - toggle verbose flag (useful with ``ls'')
help or `?' - print this list
If no `arg' is supplied, the current directory is used

為了達到範例的目標,我們要用 add 來新增要還原的檔案清單,用 extract 執行還原,下面是還原出 /home/gsyan 及 /home/studens 至目前分割區的步驟,黑體字的部份是自行輸入的部份:

restore > add gsyan students
restore > extract
You have not read any tapes yet.
If you are extracting just a few files, start with the last volume
and work towards the first; restore can quickly skip tapes that
have no further files to extract. Otherwise, begin with volume 1.
Specify next volume #: 1
set owner/mode for '.'? [yn] y
restore >

要結束只要輸入 quit 按 Enter 鍵即可跳出 restore 。

2.3 以 dump 及 restore 做 partition 對 partition 的對拷

將分割區 dump 給標準輸出,再讓 restore 由標準輸入還原在新的 partition 就能達到 partition 對 partition 對拷的目的,底下是進行對拷的流程:

1. 切好新的 partition
2. 以 newfs 將 partition format 好
3. 將新的 partition mount 好
4. 切換至新的 partition 中
5. 以 dump & restore 進行備份及還原

 ※ 1-2 的步驟可以執行 /stand/sysinstall ,然後選取 Configure 利用裡面的 Fdisk 和 Label 進行分割及格式化

例如:想要將 /home (/dev/ad0s1h) 上的所有資料備份到新硬碟上的 partition (/dev/ad2s1h),執行:

# newfs /dev/ad2s1h (如果已經格式化過則可省略)
# mount /dev/ad2s1h /mnt (如果已經 mount 好則可省略)
# cd /mnt
# dump -0uaf - /home | restore -rf -
# cd /
# umount /mnt

特別注意 dump 及 restore 並沒有指定檔名,而都用了一個減號 ( - ),對 dump 來說,是將 partition 的資料一個 block 一個 block 的送向標準輸出,而 restore 則是由標準輸入讀入並還原。

2.4 以 dump & restore 備份整顆硬碟

如果想將整顆硬碟的資料拷至另一顆新硬碟,以最笨的方法就是先用 /stand/sysinstall 將新硬碟切割好,再利用 dump & restore 把各 partitions 一一對拷即可,程序如下:

1. 將新硬碟接好後,以重新開機。

2. 執行 /stand/sysintall
* 選取 Configure
* 選取 Fdisk 切給 FreeBSD 用的 partions
* 選取 Label 進入 Disklabel Editor
* 注意:在設定 disklabel 時 mount point 要先照原來的架構設定
* 在存檔前先移到各 partition 後按 M 修改 mount point 至 /mnt 下的暫存目錄,不然可能會有錯誤
* 按 W 存檔並開始 format New H.D. (newfs)

3. 離開 sysinstall

4. umount -A 解除所有 mount 上來的 filesystem

5. mount -a 重新掛上系統預設的 filesystem

6. 開始備份各 partition

7. 將新硬碟的 / (例如:/dev/da1s1a) 掛上來

mount /dev/da1s1a /mnt

8. 將新硬碟 /etc/fstab 中的 /dev/xxx 改成合適的

ee /mnt/etc/fstab

2.5 dump + ssh 進行異地備份

dump 和 restore 其實有相對應的 rdump 和 rrestore 可進行遠端的備份及還原,不過 r 系統的指令的安全性較需考量,我們可以利用 ssh 來進行較安全的連線。

假設現在想把名為 mail 上掛在 /home 的這個 partition 異地備份至名為 bkserver 主機上的 /backup 目錄 ,我們可以進行以下程序來備份。

* 準備工作
o 在 bkserver 上準備一個備份登入用的專用帳號,假設就叫 bk 好了!!
o 檢查 bkserver 備份專用的目錄 /backup 是否可被備份專用帳號 ( bk ) 寫入。
o 在 mail 上因為要執行 dump 必須是 root ,所以屆時必須由 root 執行 ssh 遠端登入 bkserver,所以要為 mail 上 root 以 ssh-keygen 準備登入用的 "公開金鑰" 。
o 將 root@mail 的公開金鑰置入 bkserver 上帳號 (bk) HOME 的 .ssh/authorized_keys 中。
* 進行備份

準備工作中比較麻煩的部份應該遠端登入用的金鑰,製作流程如下:
2.5.1 連線測試

我們先在 mail 上以 root 的身份登入 mail,然後遠端登入 bkserver (假設在 bkserver 上已經建好 bk 這個帳號)

# ssh bk@bkserver

如果是第一次連線,應該會出現下面的問題詢問是否儲存遠端主機的識別資料,類似下面:

The authenticity of host 'bkserver.test.edu.tw (192.168.1.5)' can't be established.
DSA key fingerprint is 2b:cc:89:80:bc:77:45:83:47:ae:b6:29:51:f5:15:33.
Are you sure you want to continue connecting (yes/no)?

輸入 yes 即可,ssh 會將資料存入 ~/.ssh/know_hosts ,下次就不會有同樣的問題。

接著輸入 bk 的登入密碼,如果成功登入就完成連線測試,輸入 exit 登出,準備進行登入用金鑰的製作。

2.5.2 製作金鑰

我們希望在進行遠端備份能夠不用輸入密碼自動登入遠端主機執行備份儲存的工作,所以要先在 mail 上用 ssh-keygen 來產生 ssh 登入用的金鑰對。

先確認已經在本機 ( mail ) 上用執行 dump 指令的 root 帳號登入哦!然後由 root 執行:

ssh-keygen -d

接著應該會出現以下的對話:

Generating public/private dsa key pair.
Enter file in which to save the key (/root/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.
The key fingerprint is:
a6:62:05:95:92:79:2a:71:2d:73:3b:7d:0e:e7:39:26 root@mail.test.edu.tw

如果希望登入時不用輸入密碼直接登入,只要通通按 Enter 回所有問題即可。

執行完會在 /root/.ssh 中產生 id_dsa 和 id_dsa.pub ,後面那個就是我們要放在 bkserver 裡 bk 帳號下的金鑰。

接著我們要把 /root/.ssh/id_dsa.pub 複製到遠端主機 (bkserver) 裡備份專用帳號 (bk) 個人目錄的.ssh/authorized_keys 中。

如果 bkserver 的 ~bk/.ssh/authorized_keys 不存在,我們直接把前面在 mail 上 root 帳號產生的 id_dsa.pub 上傳過去即可,在 mail 上以 root 執行:

scp ~/.ssh/id_dsa.pub bk@bkserver:.ssh/authorized_keys

不過要記得先幫 bk 建好 .ssh 的目錄哦!不然會發生錯誤。

如果 authorized_keys 早已存在,我們可以先將 id_dsa.pub 傳到 bkserver 上,然後再將 id_dsa.pub 中的內容貼到 ~bk/.ssh/authorized_keys 新的一行。

如果前面的步驟完成了,我們在 mail 以 root 執行 ssh bk@bkserver 應該就可以不用輸入密碼遠端登入囉!

2.5.3 遠端備份

做好前面的準備工作後,我們就可以在 mail 上將某個 partition 備份到位於遠端的 bkserver 上了。

例如:

# dump -0uaf - /home | ssh -c blowfish bk@bkserver dd of=/backup/mail.home.dump

上面的例子在 mail 上執行,將掛在 mail /home 的 partition 備份起來,並以 bk 帳號遠端登入 bkserver 儲存在 bkserver 的 /backup/mail.home.dump 裡。

如果想省一些空間則可以順便用 gzip 壓縮後再傳給 bkserver,指令改為:

# dump -0uaf - /home | gzip -2 | ssh -c blowfish bk@bkserver \
dd of=/backup/mail.home.dump

freebsd snapshot and iso mount

在freebsd提供了一個很好用的備份功能就是可以快速的把目前這個分區的資料照下來,之後在慢慢備份,而原本的服務還可以運作,這真的非常的方便。

注意:檔案系統快照只能用在獨立的「檔案系統」

* 對檔案系統做快照

/dev/ad4s1a on / (ufs, local)
devfs on /dev (devfs, local)
/dev/ad4s1e on /Backup (ufs, local, soft-updates)
/dev/ad4s1d on /Document (ufs, local, soft-updates)

# mksnap_ffs /Backup /Backup/test.snap

* 將快照掛載並觀看作檔案備份

# mdconfig -a -f /Backup/test.snap -u 0 (載入到/dev/md0的裝置)
# mount -r /dev/md0 /mnt (把載入到md0掛到/mnt下,因為快照不可修改,所以要用唯讀)

* 移除快照檔

# umount /mnt (先卸載裝置)
# mdconfig -d -u 0 (釋放md0裝置在memory中的佔用)
# rm -rf /Backup/test.snap

* 掛載iso檔

# mdconfig -a -f xxx.iso -u 0 (載入到/dev/md0的裝置)
# mount_cd9660 /dev/md0 /mnt

* 卸載iso檔

# umount /mnt
# mdconfig -d -u 0

可以使用mdconfig -l指令來看看目前是否有此md裝置存在。

freebsd mount 其它檔案系統

整理一下freebsd除了一般的掛載外還有其它的檔案系統掛載,包含linux的proc檔案系統還有devfs檔案系統。

* freebsd的proc檔案系統

預設這是不會掛載的因為有安全性的問題,但是因為跑X所以通常會掛起來,因為某些程式需要到proc裡面去看行程的狀態。

# mount ‐t procfs proc /proc

或加入到/etc/fstab裡面
proc /proc procfs rw 0 0


* linux的proc檔案系統

通當如果有裝linux_base的話這個就可能要開,也是一樣因為一些程式需要用到proc裡面的資訊,像是htop它需要看proc裡面的資訊所以要求這功能一定要啟動。

# mount ‐t linprocfs linproc /compat/linux/proc

或加入到/etc/fstab裡面
linproc /compat/linux/proc linprocfs rw 0 0


* freebsd的devfs檔案系統

管理目前系統上所有的device和生成device node,只有做實驗還有自己玩的時候(jail)會掛載,因為系統啟動的時候在rc.d裡面就會自動啟動掛載了。

# mount ‐t devfs devfs /dev

VIM進階設定

最近去coscup2009才發現原來有把vim用到神領域的人,真有超佩服他的,所以最近又在玩vim的一些功能,以下是我的一些心得分享。

* 編碼的設定

我的環境是zh_TW.UTF-8那如果別人給我一個big5編碼的檔不就不能開了,不過vim會做轉碼的動作,所以可以放心。

在.vimrc裡面加入
set fencs=utf-8,big5 "vim開檔自動判斷檔案編碼先從utf-8開始
set fenc=utf-8 "建立新檔的時候以什麼編碼建立
set enc=utf-8 "vim所使用的內部編碼

簡單來說三個例子

1、檔案編碼為utf-8

開啟vim的時候由fencs所指定的清單來判斷檔案的內部編碼,此時判斷為utf-8,而它與我們vim的內部編碼相同都是utf-8,所以直接就可以正確顯示。

2、檔案編碼為big5

開啟vim的時候由fencs所指定的清單來判斷檔案的內部編碼,此時判斷為big5,而它與我們vim的內部編碼不同,我們內部編碼是utf-8,所以vim會呼叫iconv把讀出來的big5轉換成utf-8編碼,就可以正確顯示,而如果我們修改完內容寫回檔案的時候,vim又會將utf-8自動轉換成big5寫回檔案。

3、開新檔案

由於設定fenc=utf-8所以檔案在建立的時候就會以utf-8來編碼,雖然不設定的話,預設vim會讀取目前locale所使用的語系來建立檔案,但是如果常常語系改來改去的話,常常建立的檔案自己都不知道是什麼編碼,所以加入這個設定。

* 視窗分割

vim可以把一個視窗分割成幾個視窗,可以縱切也可以橫切,通常我使用縱切的話分割成左右兩個畫面,這樣可以同時開兩個程式碼而且可以對照著看內容,非常的方便。

ctrl+w, v 切割垂直分割
ctrl+w, n 切割水平分割
ctrl+w, q 關閉分割
ctrl+w, - 縮小分割大小
ctrl+w, + 放大分割大小
ctrl+w, = 平均分割大小
ctrl+w, 方向鍵 移動聚焦視窗

* 在程式碼中加速移動(必學)

※注意:要在normal mode下
[{ or [( 找左邊界第一個出現的{ or (
]} or ]) 找右邊界第一個出現的} or )
f@ or f" 向右找第一個出現匹配的符號或字元
$ 移到行尾,等於END
^ 移到行首,等於HOME
H 移到畫面最上方
M 移到畫面中間
L 移到畫面最下方
c$ 修改到行尾
d% 移除到行尾
dw 移除一個單字
d^ 移除到行首
% 找最近的() or {}

範圍選取技

※以下看到的"|"是「或」的意思
v | c | d + i | a + { | [ | " | '

v: visual
c: change
d: delete
i: inner object
a: an object
{},[],"",'': region

va{ 選取最小範圍的{}部份
vi{ 選取最小範圍的{}部份(但不包含{})
di" 移除最小範圍的""部份(但不包含"")
ci( 修改最小範圍的()部份(但不包含())
va{= 選取最小範圍的{}部份並排列整齊

* vim plugins

vim官網有非常多的plugin可以用,如果興趣可以自己上去慢慢找

NERD_tree.vim 目錄列表插件
taglist.vim 函式列表插件(需安裝ctags)

要加入plugin先在家目錄下面建立.vim/plugin目錄
> mkdir -p ~/.vim/plugin
之後把下載的plugin解壓縮之後都放到plugin目錄下面就行了,之後看一下它所附上的說明檔, 看要怎麼來設定使用這個插件,之後在加入對映的快速鍵來啟動插件。

> vim .vimrc 加入
"ctags command set for bsd
let Tlist_Ctags_Cmd = "/usr/local/bin/exctags"
"functional mapping
nmap <F1> :NERDTreeToggle<CR>
nmap <F2> :TlistToggle<CR>

我把F1, F2對映到這些plugin的啟動上面

* 總結

vim是個非常強大的編輯器,其實用起來像在打電動,所有很多的連續技,如果熟練的話,那麼寫程式或是編寫文件會大大的縮短時間,使工作更有效率。

* 附上投影片
Vim Hacks
View more documents from c9s.
freebsd的apci實在做的真是半調子,不過也不能這樣講,因為現在的硬體都客制化不依照規格走,所以也是難免,但最近因為 acpi的問題讓網卡都不能運作,除非把acpi的支援關掉,但是每次開機都要關這樣很麻煩,透過下面的設定就可以開機就關閉。

# vim /boot/loader.conf
加入 hint.acpi.0.disabled="1"

重新開機後
你會看到原先的開機選單中....
1. Boot FreeBSD [default]
2. Boot FreeBSD with ACPI disable
3. Boot FreeBSD in Safe Mode
4. Boot FreeBSD in single user mode
5. Boot FreeBSD with verbose logging
6. Escape to loader prompt
7. Boot FreeBSD with USB keyboard
8. Reboot

Select option, [Enter] for default
or [Space] to pause timer 10

變成了
1. Boot FreeBSD [default]
2. Boot FreeBSD with ACPI enable
3. Boot FreeBSD in Safe Mode
4. Boot FreeBSD in single user mode
5. Boot FreeBSD with verbose logging
6. Escape to loader prompt
7. Boot FreeBSD with USB keyboard
8. Reboot

Select option, [Enter] for default
or [Space] to pause timer 10

看到變成enable表示,選擇第二項目反而變成啟動載入acpi的支援
雖然在X下面活了這麼久,但是其實都不知道它的原理,今天找到了一篇文章對於整個概念寫的非常好,在此轉載一下。

* Fontconfig在桌面系統中的作用

KDE是類Unix系統中建立在X基礎上的一個主流桌面環境,對用戶來說,它提供了良好的圖形界面和語言切換機制,用以滿足來自不同國家、使用不同語言的用戶的使用需求,這種機制簡稱「國際化」。主要包括界面文字的翻譯,多種語言字體的管理、顯示的支持以及輸入法等等。這其中系統層面字體的管理和顯示的支持直接關係到文字的顯示效果,因此顯得尤為重要。在KDE系統中,字體管理、顯示的支持採用的是如下框架。

※架構: Fontconfig(字體配置)-->Freetype(字庫操作)-->xft(字體顯示)

Fontconfig:管理系統安裝的字體,根據應用程序的字體配置,match(匹配)一種字體,填充match字體的各種屬性。
Freetype:以Fontconfig匹配到的字體為參數,根據應用程序需要讀取相應的字庫。
xft:對需要顯示的語言文字進行顯示。

* X系統中字體的管理

作為KDE底層支持的X,它使用字體服務器(xfs)對安裝的字體進行管理,也稱之為「核心字庫管理系統」,基本配置原理是xfs使用可維護的字體安裝目錄和fonts.dir文件對字體進行操作。

X為之提供了一些工具來完成管理操作。例如:
mkfontdir,mkfontscale 用來生成安裝字體的 fonts.dir和fonts.scale。
xlsfonts 用來顯示安裝的字體。
xfd 用來顯示指定字庫的信息。
xset 用來管理字體服務器。

對於FreeBSD,在安裝了xorg 7.2並且X server運行的情況下,字體安裝目錄可用 xset q來查詢
shell>xset q
Font Path:
/usr/local/lib/X11/fonts/misc/,/usr/local/lib/X11/fonts/TTF/
/usr/local/lib/X11/fonts/OTF,/usr/local/lib/X11/fonts/Type1/
/usr/local/lib/X11/fonts/100dpi/,/usr/local/lib/X11/fonts/75dpi/
/home/dbhrscom/.fonts

上面顯示的是X系統安裝時定義的字體目錄。在這些目錄中,都有利用mkfontdir生成的fonts.dir(對於true type 字體需要使用mkfontscale 生成 fonts.scale,然後拷貝到fonts.dir中)。fonts.dir是個文本文件,裡面保存的是所在目錄的字體信息。關於這些信息的具體含義,可以參見X的man手冊,這裡不再贅述。

如果準備把一個字體安裝到X系統中,並且使用Xfs進行管理,大致需要以下過程:
1、建立一個目錄,並且把字庫文件拷貝到這個目錄下
2、運行mkfontdir或者mkfontscale,生成安裝字庫的fonts.dir文件
3、運行「mkfontdir -e 系統編碼目錄」生成encodings.dir文件
4、運行「xset +fp 字體目錄」或者「xset fp+ 字體目錄」,把字體目錄添加到xfs的字體目錄列表中。需要注意的是當字體目錄沒有fonts.dir這個文件時,這種添加字體目錄操作會失敗
5、運行「xset rehash」進行更新,確保新添加的字體可用

※注意:作為一種X系統的約定,安裝字體最方便的做法是把字體文件拷貝到「$HOME/.fonts/」目錄下,這樣省去了添加字體目錄的操作,而且xset +fp 是針對當前會話有效,如果準備系統啟動時有效,還要修改相關的配置文件。

* Fontconfig的字體管理

簡單的說Fontconfig是使用字體緩存的機制來進行字體管理的。這個Xfs有所不同。fontconfig提供fc-cache來建立這個緩存。

shell >fc-cache -v

/usr/local/lib/X11/fonts: skipping, 0 fonts, 12 dirs
/usr/local/lib/X11/fonts/100dpi: skipping, 398 fonts, 0 dirs
/usr/local/lib/X11/fonts/75dpi: skipping, 398 fonts, 0 dirs
/usr/local/lib/X11/fonts/Fonts: skipping, 4 fonts, 0 dirs
/usr/local/lib/X11/fonts/OTF: skipping, 23 fonts, 0 dirs
/usr/local/lib/X11/fonts/TTF: skipping, 13 fonts, 0 dirs
/usr/local/lib/X11/fonts/Type1: skipping, 29 fonts, 0 dirs
/usr/local/lib/X11/fonts/bitstream-vera: skipping, 10 fonts, 0 dirs
/usr/local/lib/X11/fonts/cyrillic: skipping, 0 fonts, 0 dirs
/usr/local/lib/X11/fonts/encodings: skipping, 0 fonts, 1 dirs
/usr/local/lib/X11/fonts/encodings/large: skipping, 0 fonts, 0 dirs
/usr/local/lib/X11/fonts/local: skipping, 0 fonts, 0 dirs
/usr/local/lib/X11/fonts/misc: skipping, 55 fonts, 0 dirs
/usr/local/lib/X11/fonts/util: skipping, 0 fonts, 0 dirs
/home/dbhrscom/.fonts: skipping, 0 fonts, 0 dirs
/var/db/fontconfig: not cleaning unwritable cache directory
/home/dbhrscom/.fontconfig: cleaning cache directory
fc-cache: succeeded

fc- cache的運行原理是掃瞄fontconfig的配置文件中定義的字體目錄,然後利用掃瞄的結果生成系統字體緩存。在這個fc-cache -v的運行結果中可以看到,它所掃瞄的路徑已經涵蓋了xfs所管理的系統字體路徑。但這並不表示fontconfig和xfs的繼承關係,fontconfig掃瞄這些目錄,完全是因為在配置文件fonts.conf中有這樣的定義!

<!-- Font directory list -->

<dir>/usr/local/lib/X11/fonts</dir>
<dir>~/.fonts</dir>

<!-- Font cache directory list -->

<cachedir>/var/db/fontconfig</cachedir>
<cachedir>~/.fontconfig</cachedir>

fc-cache所作的掃瞄都是基於以上的<dir></dir>定義。
這個配置文件在fontconfig最新版本中,默認放在下面的目錄中
/usr/local/etc/fonts/
而生成的字體緩存按照系統和當前用戶,分別存放到
/var/db/fontconfig
~/.fontconfig

這兩個目錄中,諸如下面所看到的

0c3f6abf7a2705d2e8570f7f70e9302d-x86.cache-2
1e99991e6eeb0b3e05d4185c886f4b19-x86.cache-2
2550ddc31d0b62d94bc27b0fea358aba-x86.cache-2
55cbb48b13195d29d336fd465f155e7b-x86.cache-2
75ff5e8ddb5aa19e5f229f72d89c73db-x86.cache-2

.cache-2 就是fc-cache的運行記號,fontconfig通過這個緩存來管理系統安裝的字體,也因為這種機制在系統中安裝字體變得非常簡單,只要把字體文件放到fonts.conf定義的目錄中,然後運行一下fc-cache。

由此看出,fontconfig和xfs相比,fontconfig提供了更加靈活的字體管理機制,目前系統中保持xfs和fontconfig並行工作的理由,只能是為必須使用xfs機制的程序提供一種支援。而作為KDE,它使用的就是fontconfig進行字體管理。舉例來說,KDE的控制中心有個「字體安裝」模塊,通過分析可知它進行字體安裝的原理就是自定義一個安裝路徑,放到fontconfig的配置文件中,然後把字體拷貝到自定義的目錄。

更完整的介紹請直參考 http://www.bsdlover.cn/html/16/n-116.html

firefox 加速

裝好firefox之後其實有很多功能都可以tun,可以透過在網址列直接輸入about:config可以進到修改firefox核心設定的部份

network.http.pipelining 改為 true
network.http.pipelining.maxrequests 改為 30

完成以上的工作就有簡單的加速功能了,之後在重啟firefox就行了

console 256 color

如果要讓term有256色的話,需要重新編譯加入設定,以我來說我使用xterm和urxvt,如果不支援256色的話,那vim就算開啟支援256色也沒有用

# vim /etc/make.conf 加入
WITH_256_COLOR=yes
WITH_XTERM_COLOR=yes

重編xterm和urxvt

完成之後就可以在vim裡面啟動256色的功能了
#vim ~/.vimrc
set t_Co=256

啟動screen支援256色功能
#vim ~/.screenrc
term xterm
termcapinfo xterm 'Co#256:AB=\E[48;5;%dm:AF=\E[38;5;%dm'

cp 資料備份模式

在freebsd中使用cp完整備份

* cp參數介紹

-f 強制不詢問
-i 互動方式詢問是否備份
-R 用在有資料夾的備份
-P 備份s-link
-L 備份s-link指向真正資料
-p 保留完成屬性
-v 顯示細部資訊

* 完全備份屬性、所有人、任何資料

備份一個資料夾完整的內容(s-link參考指向資料)通常會用
# cp -RLpfv data /Backup/
在man文件裡有談到-r等同於-RL因此簡化後
# cp -rpfv data /Backup/

備份一個資料夾完整的內容(s-link不參考指向資料,用本來s-link表示)
# cp -RPpfv data /Backup/
在man文件裡有談到-a等同於-RpP因此簡化後
# cp -afv data /Backup/

Thunar with usb auto mount

# pkg_add -rv Thunar
# pkg_add -rv thunar-volman
# vim /usr/local/etc/PolicyKit/PolicyKit.conf (加入掛載許可權)
<config version="0.1"?>
<match user="root|clockwork"?> (加入使用者)
<return result="yes"/?>
</match?>
<define_admin_auth group="wheel"/?>
</config?>

# cd /usr/ports/x11-themes/gnome-icons-crystal && make install clean (安裝好看的icons)
# vim ~/.gtkrc-2.0 (指定此主題)
gtk-icon-theme-name = "CfG-Crystal-SVG-1.2.0"
# pkg_add -rv firefox3
# pkg_add -rv firefox3-i18n
# pkg_add -rv nspluginwrapper
# cd /usr/ports/www/linux-flashplugin9/ && make install

若有問題
手動下載
# cd /usr/ports/distfiles/
# fetch http://download.macromedia.com/pub/flashplayer/installers/current/9/install_flash_player_9.tar.gz
記一下
# md5 /usr/ports/distfiles/install_flash_player_9.tar.gz (生出來的數值)
# sha256 install_flash_player_9.tar.gz (生出來的數值)
# ls -al install_flash_player_9.tar.gz (記一下檔案大小)
# vim /usr/ports/www/linux-flashplugin9/distinfo (把數值改對上面記下來的)
# cd /usr/ports/www/linux-flashplugin9/ && make install

> nspluginwrapper -a -v -i (安裝)
> nspluginwrapper -a -v -r (移除)
> nspluginwrapper -l (列出已安裝)
> nspluginwrapper -h (使用說明)

調整console下的解析度

首先用root找到grub的menu檔案,試著去找/boot/grub/menu.lst 這個,然後編輯他,找到載入Linux的那一行,類似像這樣的:

kernel /vmlinuz-2.6.18-92.1.10.el5 ro

然後在行末加上vga=791,類似這樣:

kernel /vmlinuz-2.6.18-92.1.10.el5 ro vga=791

其中的791是VGA code as VESA-code,有以下幾種模式:


colors 640×480 800×600 1024×768 1280×1024 1600×1200
256 769 771 773 775 796
32k 784 787 790 793 797
64k 785 788 791 794 798
16M 786 789 792 795


設定完成之後,就有高解析度的console了
因為已經養成把caps lock換成control的習慣,所以如果你和我一樣喜歡用caps lock當成ctrl的話,那在debian可以透過以下方式把caps lock鍵對映給ctrl。

* 修改console下的keymaps

# cd /usr/share/keymaps/i386/qwerty/
# gzip -d us.kmap.gz
# vim us.kmap
keycode 58 = Control

# dpkg-reconfigure console-data
選擇 Select keymap from full list
-> pc /qwerty/us american/Standard/Standard

完成以上的工作之後,你就會發現你的caps lock已經換成control了

freebsd ppp ADSL 上網的方式

如果家裡的ip不是dhcp或是固點ip的話那怎麼連上網,這是個很大的問題,像我家都是使用hinet adsl,所以在bsd上提供了ppp可以設定成pppoe來上網,以下是我的一些設定。

* 修改ppp.conf

若要透過pppoe來上網的話,需要來寫ppp.conf的設定檔,它在/etc/ppp目錄下面。

# cd /etc/ppp
# cp ppp.conf ppp.conf.back (先備份起來)
# vim ppp.conf

default:
set log Phase tun command
set ifaddr 10.0.0.1/0 10.0.0.2/0

pppoe: (設定檔名稱,可以換成你喜歡的)
set device PPPoE:rl0 (這裡rl0請換成你網卡介面代號)
set authname xxxxxxxx@hinet.net (填上帳號)
set authkey xxxxxxxx (填上密碼)
set dial
set login
add default HISADDR
enable dns


* 修改/etc/rc.conf

上面的ppp.conf設定檔寫好之後,接下來就是要啟動ppp的服務,因此我們要在rc.conf裡面加入開機的時候自動啟動,這樣就不用透過手動來播接上網了,系統一開機就有網路了,這樣會方便許多。

# cd /etc
# vim rc.conf

加入以下內容

ppp_enable="YES"
ppp_mode="ddial"
ppp_profile="pppoe" (設定檔名稱,要和ppp.conf的一致)
ppp_nat="NO"


這樣就設定完成了,開機就可以自動播接上網了。

* 驗証上網

我們可以透過幾種方式來了解是不是真的有連上網路
1、使用ping 168.95.192.1
2、使用telnet www.google.com.tw 80
3、使用ifconfig來看tun0介面是不是已經有給予ip位址了

* 手動使用ppp來播接ADSL

當你設定檔寫好,不想透過開機就直接播上網,那你可以透過以下的方法來連上網路。

# ppp -ddial pppoe (設定檔的名稱,要和ppp.conf裡面設定的一致)

* 如何斷線呢?

其實使用ppp來連上網路,它有一個行程是負責這個工作的,所以我們直接kill它就可以斷線了,所以直接kill pid就行了

# ps aux |grep ppp (看一下pid多少)
# kill pid

vim PageUp/Down一次捲動半頁

相信很多人用PageUp/Down用的很不習慣,因為一次跳的太多了,眼睛又懶的像下看,如果按上下鍵的話又很慢,這裡提供一種方式讓PageUp/Down鍵一次只捲動半頁。

$ vim .vimrc
map <PageUp> <C-u>
map <PageDown> <C-d>
imap <PageUp> <C-o><C-u>
imap <PageDown> <C-o><C-d>

選擇核心開機

編的核心不一定就好用,就能夠啟動系統,因此在bsd上installkernel之後,如果開機沒有辦法開起來的話沒關係,因為bsd在installkernel之後,系統會自動備份舊的核心放在/boot/kernel.old/所以我們可以選擇使用舊的核心來開機。

開機之後看到數字倒數選擇prompt就是選項6
會出現OK>的提示命令列

OK> unload
OK> boot kernel.old

這樣就可以使用舊的核心啟動

freebsd portupgrade patch

patch PACKAGESITE error

--- ./lib/uri/ftp.rb.orig 2008-04-19 14:56:22.000000000 +0300
+++ ./lib/uri/ftp.rb 2009-05-18 22:06:25.000000000 +0300
@@ -176,9 +176,9 @@
#
# This method will then return "/pub/ruby"
#
- def path
- return @path.sub(/^\//,'').sub(/^%2F/i,'/')
- end
+ #def path
+ # return @path.sub(/^\//,'').sub(/^%2F/i,'/')
+ #end

def to_s
save_path = nil

synaptics安裝與設定

今天拿到我的小筆電acer D250,跑了X但是我發現其滑鼠有夠難用的,這是因為在xorg+hal的架構下面,會將我的touchpad以ps2 mouse來設定,因此這邊要處理一些這樣的hack。

首先我要將ps2 mouse改成touchpad的軀動,另外就是讓xorg完全不管input的工作,直接讓hal全部接管,因為hal也許是未來硬體設定的一個趨勢,所以現在漸漸的xorg.conf很多人都不太理它,或是不寫都可以,因為現在的xorg已經聰明到可以自動的設定,但是設定還是有些問題。

* 首先安裝synaptics軀動程式

# cd /usr/ports/x11-drivers/xf86-input-synaptics
# make install clean

* synaptics設定檔與hal相關資訊

synaptics可以在xorg.conf設定,也可以透過hal來設定,如果要使用hal來設定的話,就要自己訂它的policy fdi檔,所以來看一下它所附上的11-x11-synaptics.fdi

# cat /usr/local/share/hal/fdi/policy/10osvendor/11-x11-synaptics.fdi
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<match key="info.capabilities" contains="input.touchpad">
<merge key="input.x11_driver" type="string">synaptics</merge>
<!-- Arbitrary options can be passed to the driver using
the input.x11_options property since xorg-server-1.5. -->
<!-- EXAMPLES:
Switch on shared memory, enables the driver to be configured at runtime
<merge key="input.x11_options.SHMConfig" type="string">true</merge>

Maximum movement of the finger for detecting a tap
<merge key="input.x11_options.MaxTapMove" type="string">2000</merge>

Enable vertical scrolling when dragging along the right edge
<merge key="input.x11_options.VertEdgeScroll" type="string">true</merge>

Enable vertical scrolling when dragging with two fingers anywhere on the touchpad
<merge key="input.x11_options.VertTwoFingerScroll" type="string">true</merge>

Enable horizontal scrolling when dragging with two fingers anywhere on the touchpad
<merge key="input.x11_options.HorizTwoFingerScroll" type="string">true</merge>

If on, circular scrolling is used
<merge key="input.x11_options.CircularScrolling" type="string">true</merge>

For other possible options, check CONFIGURATION DETAILS in synaptics man page
-->
</match>
</device>
</deviceinfo>

之後我們在看一下透過lshal所顯示出來hal所辨識的touchpad的資訊
udi = '/org/freedesktop/Hal/devices/psm_0'
freebsd.device_file = '/dev/psm0' (string)
freebsd.driver = 'psm' (string)
freebsd.unit = 0 (0x0) (int)
info.addons = {'hald-addon-mouse-sysmouse'} (string list)
info.capabilities = {'input', 'input.mouse'} (string list)
info.category = 'input.mouse' (string)
info.parent = '/org/freedesktop/Hal/devices/atkbdc_0' (string)
info.product = 'PS/2 Mouse' (string)
info.subsystem = 'platform' (string)
info.udi = '/org/freedesktop/Hal/devices/psm_0' (string)
input.device = '/dev/psm0' (string)
input.x11_driver = 'mouse' (string)
platform.id = 'psm.0' (string)

從這裡我們可以看出,這根本沒有match,因為由hal看出它所吃到的軀動還是一樣為mouse,而不是synaptics,可以仔細的看一下上面synaptics.fdi根本是有問題的
match key="info.capabilities" contains="input.touchpad"
它透過match key來看是否是正確為input.touchpad,但是由lshal可以看出,這並不match
info.capabilities = {'input', 'input.mouse'} (string list)
因此這個hack最重要的就是讓policy正確的去設定hal所辨識到的硬體資訊

* 讓硬體支援synaptics軀動

# vim /boot/loader.conf
hw.psm.synaptics_support="1"


* 讓hal正確辨識touchpad並設定synaptics的相關設定

自己新增一個hal的policy,我命名為synaptics.fdi
# vim /usr/local/etc/hal/fdi/policy/synaptics.fdi
<?xml version="1.0" encoding="ISO-8859-1"?>
<deviceinfo version="0.2">
<device>
<match key="info.udi" string="/org/freedesktop/Hal/devices/psm_0">
<merge key="input.x11_driver" type="string">synaptics</merge>
<merge key="input.x11_options.Protocol" type="string">psm</merge>
<merge key="input.x11_options.Device" type="string">/dev/psm0</merge>
<merge key="input.x11_options.SHMConfig" type="string">false</merge>
<merge key="input.x11_options.LeftEdge" type="string">1200</merge>
<merge key="input.x11_options.RightEdge" type="string">5700</merge>
<merge key="input.x11_options.TopEdge" type="string">1200</merge>
<merge key="input.x11_options.BottomEdge" type="string">5000</merge>
<merge key="input.x11_options.VertEdgeScroll" type="string">true</merge>
<merge key="input.x11_options.HorizEdgeScroll" type="string">true</merge>
<merge key="input.x11_options.VertScrollDelta" type="string">300</merge>
<merge key="input.x11_options.HorizScrollDelta" type="string">300</merge>
<merge key="input.x11_options.MaxSpeed" type="string">0.15</merge>
<merge key="input.x11_options.MinSpeed" type="string">0.15</merge>
<merge key="input.x11_options.CircularScrolling" type="string">true</merge>
<merge key="input.x11_options.CircularPad" type="string">true</merge>
<merge key="input.x11_options.CircScrollTrigger" type="string">2</merge>
<merge key="input.x11_options.CircScrollDelta" type="string">0.3</merge>
</match>
</device>
</deviceinfo>

仔細看可以看出我已經修改了match的方式,直接使用udi直接指定hal所辨識到的硬體,用我的方式來設定,以上有幾個很重要部份一定要設定
input.x11_driver 設定為 synaptics
input.x11_options.Protocol 設定為 psm
input.x11_options.Device 設定為 /dev/psm0
在synaptics的man文件之前有特別提到linux, freebsd, unix等等所設定protocol不同,另外就是必須要指定它device是那一個。而上面所提到的其它設定都是自己使用touchpad自己tune出來的,最後會提供如何客製到自己方便使用。

完成上面以後,重啟hald

* 看lshal所顯示的資訊是否正確

udi = '/org/freedesktop/Hal/devices/psm_0'
freebsd.device_file = '/dev/psm0' (string)
freebsd.driver = 'psm' (string)
freebsd.unit = 0 (0x0) (int)
info.addons = {'hald-addon-mouse-sysmouse'} (string list)
info.capabilities = {'input', 'input.mouse'} (string list)
info.category = 'input.mouse' (string)
info.parent = '/org/freedesktop/Hal/devices/atkbdc_0' (string)
info.product = 'PS/2 Mouse' (string)
info.subsystem = 'platform' (string)
info.udi = '/org/freedesktop/Hal/devices/psm_0' (string)
input.device = '/dev/psm0' (string)
input.x11_driver = 'synaptics' (string)
input.x11_options.BottomEdge = '5000' (string)
input.x11_options.CircScrollDelta = '0.3' (string)
input.x11_options.CircScrollTrigger = '2' (string)
input.x11_options.CircularPad = 'true' (string)
input.x11_options.CircularScrolling = 'true' (string)
input.x11_options.Device = '/dev/psm0' (string)
input.x11_options.HorizEdgeScroll = 'true' (string)
input.x11_options.HorizScrollDelta = '300' (string)
input.x11_options.LeftEdge = '1200' (string)
input.x11_options.MaxSpeed = '0.15' (string)
input.x11_options.MinSpeed = '0.15' (string)
input.x11_options.Protocol = 'psm' (string)
input.x11_options.RightEdge = '5700' (string)
input.x11_options.SHMConfig = 'false' (string)
input.x11_options.TopEdge = '1200' (string)
input.x11_options.VertEdgeScroll = 'true' (string)
input.x11_options.VertScrollDelta = '300' (string)
platform.id = 'psm.0' (string)

由這裡已經可以看出,本來是由mouse軀動程式來支援的ps2 mouse,但是我們加了policy之後,換成透過synaptics來支援ps2 mouse,這已經達到我們的目地了,但是還差一點,因為xorg.conf裡面的input mouse section會和hal相互衝突,所以我們要讓hal全部接管的話,我們必須讓xorg完全不處理,而讓hal來處理。

* 修改xorg.conf

如果你都直接讓xorg自動來處理這個部份的話,那你這邊就不需要修改了,但是如果像我會讓xorg不判斷錯誤的話,我還是會自己來處理xorg.conf的設定檔部份,那麼我就必須要修改了。
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
EndSection

Section "Files"
ModulePath "/usr/local/lib/xorg/modules/"
FontPath "/usr/local/lib/X11/fonts/misc/"
FontPath "/usr/local/lib/X11/fonts/TTF/"
FontPath "/usr/local/lib/X11/fonts/OTF/"
FontPath "/usr/local/lib/X11/fonts/artwiz-aleczapka-en/"
FontPath "/usr/local/lib/X11/fonts/TrueType/"
FontPath "/usr/local/lib/X11/fonts/Type1/"
FontPath "/usr/local/lib/X11/fonts/100dpi/"
FontPath "/usr/local/lib/X11/fonts/75dpi/"
EndSection

Section "Module"
Load "extmod"
Load "record"
Load "dbe"
Load "glx"
Load "dri"
Load "dri2"
EndSection

Section "Monitor"
Identifier "Monitor0"
VendorName "Monitor Vendor"
ModelName "Monitor Model"
EndSection

Section "Device"
Identifier "Card0"
Driver "intel"
VendorName "Intel Corporation"
BoardName "Mobile 945GME Express Integrated Graphics Controller"
BusID "PCI:0:2:0"
EndSection

Section "Screen"
Identifier "Screen0"
device "Card0"
Monitor "Monitor0"
SubSection "Display"
Viewport 0 0
Depth 24
EndSubSection
EndSection

由上面可以看出我把input的所有設定都移除了,這就是讓xorg不理會輸入裝置怎麼設定,而是直接交由hal來做自動設定,那麼我們剛剛上面所指定的hal policy只要正確的話,我們就可以正確的使用了。

* 個人化synaptics

先將policy中的input.x11_options.SHMConfig設為true這樣才可以透過share memory來溝通。

之後進入X下面之後開啟terminal輸入synclient來啟動設定程式,如果不知道如何使用的話,先去看一下man裡面對synclinet的設定說明。

以上搞定之後,建議把input.x11_options.SHMConfig再設為false這樣比較安全。

設定X的解析度

使用X的時候由於銀幕大小的不同,所以有的時候xserver沒有辦法正確的抓到銀幕的解析度,所以我們會看到怎麼字體那麼大又那麼難看,所以有必要自己手動設定。

* 使用startx

你可以在你的家目錄下面建立一個檔案叫.xserverrc加入一行
exec /usr/local/bin/X -dpi 85

之後直接使用startx就可以設定dpi為85*85了,這樣xserver就不會乩繪大小

* 使用登入管理器

如果你使用gdm, kdm, slim這些登入管理器的話,那你就需要在其登入管理器的設定檔裡面直接設定,像如果我使用的slim這套的話,它的設定檔在/usr/local/etc/slim.conf,直修改它要啟動xserver的設定值,也就是直接給予參數就行了
xserver_arguments   vt09 -dpi 85

之後直接登入在登入就搞定了

* 立即修改,不需重啟動X

如果你只是當下想要讓字型大一點的話,那可以透過xrandr這個指令來修改,xrandr是個非常強大的指令,除了可以改變解析度還可以輕易的就達到雙銀幕,但是必須要軀動程式和顯示卡支援才行
xrandr --dpi 85

之後重開視窗就行了,更高階的用法,可以參照一下man文件
在bsd上安裝firefox之後,我們常常會使用backspace來回到上一頁,不過剛剛安裝好的firefox它的backspace是沒有動作的,所以我們可以來設定一下讓backspace俱有回上一頁的功能。

開啟firefox之後在網址列直接輸入about:config之後會跳出一堆選項出來,我們可以使用搜尋的方式找出該設定。

尋找 browser.backspace_action 直接將它的值設為0

預設值是2,這表示不進行任何動作,如果是0,這表示反回上一頁的動作。

登入管理程式slim

使用過許多的登入管理程式,如gdm, kdm這種,但是都有肥大的現象,這裡介紹安裝slim全名是sample login manager它類似,簡單又能達到功能,又可以客製化。

1、安裝slim
#cd /usr/ports/x11/slim
#make install clean

2、bind ttyv8
#cd /etc
#vim ttys
ttyv7   "/usr/libexec/getty Pc"     cons25  on  secure
ttyv8 "/usr/local/bin/slim" xterm on secure


3、客製化自己的登入畫面
#cd /usr/local/share/slim/themes/default
裡面有三個檔
background.jpg <---背景圖
panel.png <----登入圖
slim.theme <-----主題設定檔
#vim slim.theme
# Messages (ie: shutdown)
msg_color #FFFFFF (訊息文字顏色)
msg_font Verdana:size=18:bold:dpi=75 (使用的字體與大小)
msg_x 50% (訊息的位子)
msg_y 40%
msg_shadow_color #702342 (訊息文字的陰影)
msg_shadow_xoffset 1 (陰影位子offset)
msg_shadow_yoffset 1

# valid values: stretch, tile
background_style stretch (背景最大化)
background_color #eedddd (背景色)

# Input controls
input_panel_x 25% (panel.png圖的位子)
input_panel_y 65%
input_name_x 394 (在panel.png輸入帳密的位子)
input_name_y 181
input_font Verdana:size=12:dpi=75 (輸入的字體大小)
input_color #000000 (輸入的字體顏色)

# Username / password request
username_font Verdana:size=14:bold:dpi=75 (提示輸入帳號的字體)
username_color #f9f9f9 (提示輸入帳號的顏色)
username_x 280 (提示輸入帳號的位子)
username_y 183
password_x 50% (提示輸入密碼的位子)
password_y 183
username_shadow_color #702342 (提示輸入帳號的陰影顏色)
username_shadow_xoffset 1 (提示輸入帳號的陰影位子)
username_shadow_yoffset 1

username_msg Username: (提示輸入帳號的字串)
password_msg Password: (提示輸入密碼的字串)


4、相關檔案位子
/usr/local/bin/slim (主程式)
/usr/local/share/slim/themes/default/background.jpg (背景圖)
/usr/local/share/slim/themes/default/panel.png (輸入圖)
/usr/local/share/slim/themes/default/slim.theme (主題設定檔)
/usr/local/etc/slim.conf (slim的設定檔)
/usr/local/etc/rc.d/slim (slim的啟動檔,可透過ttyv8 bind)

在ttyv下使用高解析度

在freebsd中,我想大家常用的ttyv應該解析度很低,字都非常的大,透過以下的方式可以讓你的解析度變高,並且還可以修改背景和文字的顏色。

1、設定核心
在options區段加入
options VESA
options SC_PIXEL_MODE


2、重編核心
# cd /usr/src
# make buildkernel KERNCONF=MYKERN
# make installkernel KERNCONF=MYKERN

3、使用vidcontrol來設定解析度
先使用vidcontrol -i mode會列出一大堆可以用的模式和編號,而最前面的就是編號就是要設定的依據了,假設顯示如下:
277 (0x115) 0x00000000f G 800x600x32 1 ........ 前面的227就是編號

先試看看用vidcontrol是否可以跑
# vidcontrol MODE_277
如果成功的話,就加入到你的rc.conf讓開機就自動設定好
# vim /etc/rc.conf
allscreens_flags="MODE_277"


ps. 有非常多種選擇,都可以試看看,只要用「MODE_編號」就可以設定

freebsd無線網路

我想很多人是在notebook上安裝freebsd的,但是因為在基系統下沒有圖形介面來設定上網,所以這裡分享一下我如何透過ifconfig來設定無線網路,並使用dhcp自動取得ip來連線。

1、啟動網卡
# ifconfig ath0 up

2、尋找可用基地台
# ifconfig ath0 list scan

3、設定基地台
# ifconfig ath0 ssid wlan0

4、若有設定wep加密,沒有則跳過
# ifconfig ath0 wepmode on weptxkey 1 wepkey 1:0x1234567890

5、透過dhcp取得ip
# dhclient ath0

透過以上的方式就可以連上基地台了,以下提供一些額外的設定
a.斷線
# ifconfig ath0 down
b.其它方式設定wep
# ifconfig ath0 ssid wlan0 nwkey 0x1234567890
(等同於wepmode on weptxkey 1 wepkey 1:key)
c.重設網卡資訊
# ifconfig ath0 ssid - (重設ssid)
# ifconfig ath0 delete (重設inet netmask)
# ifconfig ath0 wepmode off (取消使用wep)
# ifconfig ath0 weptxkey - (取消wepkey index)
# ifconfig ath0 wepkey - (取消wepkey password)

看完上面的設定之後,相信你已經可以連上無限網路了,這裡講解一下透過ifconfig所顯示的無限網卡資訊
ath0: 表示目前網卡已經up且在工作了
inet 192.168.1.38 netmask 0xffffff00 表示你的ip和網路遮罩
status: associated 表示已經和基地台連接
ssid wlan0 channel 6 bssid 00:13:46:ed:8f:c2 表示連上那台基地台資訊
authmode OPEN privacy ON deftxkey 1 wepkey 1:40-bit 表示使用加密且使用第一把金鑰

tcsh中關閉beep警告音

當按下backspace或是tab的時候,如果沒有可以自動補齊或是已經到行首的時候,系統就開始會有警告音畢畢叫,透過以下的指令就可以關閉它

#set nobeep

也可以直接加在.cshrc中
set nobeep
有關計時器錯誤的警告,可以試試以下的辦法

/etc/sysctl.conf
kern.timecounter.hardware=TSC
將tty下的caps lock改成ctrl

# kbdcontrol -d < /dev/ttyv0 > nocaps.kbd

058 lctrl lctrl lctrl lctrl lctrl lctrl lctrl lctrl O


# mv nocaps.kbd /usr/share/syscons/keymaps/

修改/etc/rc.conf
keymap="nocaps"

ROX-filer中的文字檔用vim開啟

安裝好rox-filer之後,雖然有許多的軟體可以來開文字檔或是程式檔,但是如果你是command line的使用者的話,你一定希望用vim來開啟,因為這樣更方便阿。

開啟rox-filer選擇「set run action...*」之後點選你要用vim開啟的檔案,之後會有一個地方會要讓你「Enter a shell command:」那在下面輸入

urxvt -vb +sb -b 0 -w 0 -fg '#EEEEEE' -tr -sh 20 -fade 30 -e vim "$@"


這樣你的文字檔就可以使用vim來開啟了

fontconfig字型設定

※記錄一下目前在x11下的預設字型與大小的設定

.fonts.config
<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="font">
<edit name="pixelsize" mode="assign">
<double>12</double>
</edit>
</match>
<match target="font">
<test name="family">
<string>AR PL New Sung</string>
</test>
<edit name="antialias" mode="assign">
<bool>false</bool>
</edit>
</match>
</fontconfig>


以上的設定是X11預設字型大小12pix且新宋體不做反鋸齒

<?xml version="1.0"?>
<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
<fontconfig>
<match target="font">
<test name="family">
<string>AR PL New Sung</string>
</test>
<test name="pixelsize" compare="more_eq">
<double>11</double>
</test>
<test name="pixelsize" compare="less_eq">
<double>16</double>
</test>
<edit name="antialias" mode="assign">
<bool>false</bool>
</edit>
</match>
</fontconfig>


以上是修正新宋體有的時候具有點陣字,但是卻使用向量字方式繪出,而上面強制指定若是在範圍以內全都用點陣字體。

※幾個值得參考設定的網站
http://edt1023.sayya.org/#fonts
http://swyear.blogspot.com/2009/03/fontconfig.html

建立快速工作環境

如果你使用電腦都使用滑鼠的話我想工作的速度應該會大打折扣,而如果可以都使用鍵盤來操做,要什麼就有什麼的話,工作速度一定會有效的提升的,所以這篇講講我設定鍵盤操做與一些我常用的快速鍵設定

※先修正ctrl的位置
因為caps_lock我常常用不到,反而是ctrl因為常常會用到,而ctrl的位置又那麼難按,所以我把它和caps_lock來交換,輸入上會更方便。

unix系統的做法:

vim ~/.Xmodmap
remove Lock = Caps_Lock
remove Control = Control_L
keysym Control_L = Caps_Lock
add Lock = Caps_Lock
add Control = Control_L


vim ~/.xinitrc
xmodmap ~/.Xmodmap

windows系統的做法:

請下載安裝這個軟體
http://webpages.charter.net/krumsick/KeyTweak_install.exe
啟動之後就可以修改你的按鍵了,之後會要求重新啟動電腦就完成了

※firefox常用的快速鍵
上一頁 backspace , alt + 方向鍵左
ps. 請確認你的firefox是設有正確設定,先使用about:config 來查詢設定檔的browser.backspace_action的值是否為0,如果是2的話表示不做任何事,所以請自己改為0
新增分頁 ctrl + T
下一個分頁 ctrl + TAB, ctrl + PageDown
上一個分頁 ctrl + Shift + Tab, ctrl + PageUp
關閉分頁 ctrl + W
下載 ctrl + J
瀏灠列 ctrl + L
搜尋列 ctrl + K
搜尋文字 ctrl + F
關閉視窗 ctrl + Q
字型放大 ctrl + +
字型縮小 ctrl + -
字型還原 ctrl + 0

freebsd rxvt-unicode 安裝與設定

用過X11的人應該知道xterm這個終端機,但是也知道它非常的不好用,這裡推薦大家使用rxvt這個功能比xterm強,而且又是輕量級的終端機,而它的unicode版的rxvt稱為urxvt,以下介紹一下設定檔的部份

1、安裝urxvt
# cd /usr/ports/x11/rxvt-unicode
# make install clean

2、設定urxvt
-tr 背景透明(配合-sh使用)
-fade 沒有focus的時候的亮度0~100
-fadecolor 沒有foucs的時候的顏色
-tint 背景色調(要-tr啟動)
-sh 背景明亮0~100黑100~200亮(配合-tr使用)
-icon 指定檔案當icon
-bg 背景色
-fg 前景色(文字色)
-cr 游標色
-pr 滑鼠指標的前景色
-pr2 滑鼠指標的背景色
-bd 邊框色
-fn 設定字型(預設吃XFT)
-vb 關掉vbell
+sb 關掉scroll
-sr 把scroll移到右邊
-sl 歷史記錄筆數
-b 外邊框大小
-w 內邊框大小
-im 指定輸入法
-imlocale 用來開啟輸入法的語系
-imfont 輸入法字型設定
-ch 啟動的根路徑

3、我的設定
記錄1000筆、不開聲音、沒有捲軸、沒有邊框、文字白色、背景黑色、游標白色、沒有focus的時候暗度30%
EX: urxvt -sl 1000 -vb +sb -b 0 -fg #EEEEEE -bg #000000 -cr #EEEEEE -fade 30

記錄1000筆、不開聲音、沒有捲軸、沒有邊框、文字白色、背景透明、透明暗度20%、沒有focus的時候暗度30%
EX: urxvt -sl 1000 -vb +sb -b 0 -fg #EEEEEE -tr -sh 20 -fade 30
在unix like的系統中,輸入法總是讓人家最煩腦的部份,因為設定的東西實在太多了,這裡討論的是不是底層架構的部份,只單純講解如何在freebsd上面安裝中文輸法引擎和加入一個無蝦米輸入法。

1、安裝scim的table(輸入法)
雖然有套件可以裝全語系的scim,叫scim-tables,但是會裝了一堆用不到的輸入法,我覺得沒有必要,所以我用另一個方法安裝,如果要裝scim-tables的人可以安裝
# cd /usr/ports/chinese/scim-tables/
# make install clean
如果像我一樣只要裝無蝦米就好,其它的都不要的話,請依我的方式安裝
# cd /usr/ports/textproc/scim-table-imengine (安裝輸入法表引擎)
# make install clean
裝好之後就有一個輸入法表的引擎了,可以自己新增像無蝦米這樣的輸入法。

2、安裝各種輸入法(無蝦米)
要安裝無蝦米要先下載無蝦米的表格還有它的圖片,你可以在這裡下載
# fetch http://moon.cse.yzu.edu.tw/~s932361/bsd/bsd_scim.tgz
# tar zxvf liu_scim.tgz
裡面有兩個檔案分別cp到它要放的目錄
# cp liu5.bin /usr/local/share/scim/tables
# cp liu5.png /usr/local/share/scim/icons
這樣就安裝完scim還有加入了無蝦米的輸入法了,如果你想用新酷音輸入法,當成注音輸入法的話,也非常的簡單,只要安裝scim-chewing套件就行了
# /usr/ports/chinese/scim-chewing
# make install clean
這樣就裝完了新酷音輸入法了,你就有兩套可以使用的輸入法,一套是無蝦米,另一套就是注音

3、啟動scim
透過以上的方式我們己經裝好我們的輸入法引擎,並且加入了兩種輸入法,那我們該怎麼在x11下啟動scim,那就要設定.xinitrc(X11啟動的時候的設定檔)
vim .xinitrc
export XMODIFIERS='@im=SCIM' (吃XIM的程式使用scim輸入法平台)
exec scim -d & (啟動scim當成deamon)
存檔之後就可以啟動X了

※特別注意,scim必須要以utf8的環境才可以啟動,所以你的系統如果還是全是big5的環境的話,那你必須在.xinitrc裡面改成
exec env LC_CTYPE="zh_TW.UTF-8" scim -d &
才可以順利啟動scim,不過以目前的趨勢來說,unix lik的系統已經走向全面utf8化了,所以最好整個系統都設成utf8的語系
目前的unix like系統像是freebsd ubuntu ...都走上utf8的編碼,因為在utf8編碼上可以支援更多的語系,但是要怎麼將整個使用環境改成utf8編碼可以透過以下的方式。

1、設定登入語系
可以用locale -a |grep zh來查,我用的是zh_TW.UTF-8
vim ~/.login_conf
加入
me:\
:lang=zh_TW.UTF-8:


設好之後重新登入,使用locale來看應該就是zh_TW.UTF-8了

2、設定vim編輯器
vim ~/.vimrc
加入
"file encoding
set fileencodings=utf-8,big5
set fileencoding=utf-8


fileencodings是說vim透過順序解碼,如果成功就使用
fileencoding是說vim建立文件的時候使用utf8編碼

3、設定irssi聊天工具
vim ~/.irssi/config
修改settings部份
settings = {
core = {
recode_fallback = "UTF-8"; #本端使用utf8
recode_out_default_charset = "UTF-8"; #輸出使用utf8
recode_transliterate = "yes";
real_name = "xxxxx";
user_name = "xxxxx";
nick = "xxxxxx";
};
"fe-common/core" = { term_charset = "UTF-8"; }; #用utf8字元集
"fe-text" = { actlist_sort = "refnum"; };
};


4、設定screen工具
在編譯screen的時候請加入cjk的支援,如果沒有加入的話先去重編一次。screen很聰明會自動看你設定的LC_ALL為什麼編碼來開啟編碼方式,所以其實不用太需要去設定,但是會出現一種問題,就是你make config的時候銀目會花掉,這是因為cjk的關系也就是寬字元顯示的關系,所以我會在screen裡面先關掉cjk,因為預設為utf8時它就會自動啟動。
vim ~/.screenrc
加入
cjkwidth off


當有需要顯示像是日文或是韓文時,請手動開啟cjk,請用ctrl+a, :cjkwidth on來開啟
※請注意開啟cjk的時候不論你用的是putty還是pietty全都要和screen一致才行

5、設定pietty或putty
選項 > 字元編碼 > Unicode UTF-8
選項 > 亞洲語系修正 > 取消 亞洲寬字元 (這個就是cjk了)
※所以如果在screen裡面有開cjkwidth on的話,記得這裡就要勾選亞洲寬字元,但是平常如果沒有在看bbs沒有一堆外星文字的話,是不用特別去開cjk的。
※請配合screen所設定的cjk要一致。

6、WinScp檔案傳輸
可以透過設定winscp自動幫忙轉換windows和freebsd兩邊的編碼

開啟login時,選Environment裡面有Server environment的第二個下拉選項
UTF-8 encoding for filenames: 選ON,之後記得存檔

※這裡提醒一下,winscp只有管理檔名的轉換問題,內容編碼為何,它是不理的,所以如果你用vim寫的話,那裡面的編碼已經是utf8了,所以下載回來,需要使用支援utf8編碼的軟體來開,否則會是乩碼。


關於編碼的觀念
==============================================================
對於不論是big5或是utf-8都好,它都是一種編碼的方式,其實要看每個程式是否有支援編碼的部份,像檔名的話,就是由putty或是pietty來顯示編碼,而如果是文件內的資料的話,用vim來開那就是由vim來決定編碼的方式,所以要設定utf8的話,並不是只要設定一個部份而己,其實每個程式都要設定,像是screen和putty就有很大的關係,必須要相互配合。

編碼是編碼,顯示是顯示,今天使用了utf-8編碼,代表你打的每個字都是由utf-8當成內碼來表示,而我們看到的中文字顯示的出來,表示這個軟體它支援轉換utf-8這種編碼的方式,一次只能選擇一種編碼方式,所以不可能檔案裡面又是用big5編碼或是又用utf-8編碼。

不過現在越來越多opensource的軟體越來越強了,只要設定了LC_ALL的部份,它就會自動偵測且自動切換編碼了,是真的非常的方便。

Port Make Target

在Ports下面不只有簡單的make install deinstall clean等等的,其實還有非常多的target可以用,這些可以讓你用來查詢或是做一些設定,這裡列出一些常常在用的target

fetch 抓取此ports套件檔案放在/usr/ports/distfiles/
fetch-recursive 抓取此ports檔案與其所有相依的套件檔案放在/usr/ports/distfiles/
fetch-url-list 檢查這個ports還沒有存在distfiles中的話,需要從那些url抓取
fetch-urlall-list 檢查這個ports不管存不存在distfiles中,需要從那些url抓取
all-depends-list 顯示這個ports所需要的套件清單
build-depends-list 編譯這個ports所需要的套件清單
run-depends-list 這個ports執行時所需要的套件清單

extract 將distfiles中下載的檔解壓縮到work目錄中
patch 為解壓縮後的work目錄打上patch
configure 執行gnu的configure來配置makefile
build 編譯work目錄中的source
install 將已編譯完的source
reinstall 重新安裝,若已安裝了,則會蓋掉所有修改過的資料
deinstall 移除這個ports
deinstall-all 移除所有的ports
package 將此ports建立package讓以後可以用pkg_add來裝
package-recursive 將此ports與所有相依的ports都建立package
clean 清除此ports的work目錄
config 設定這個ports要編譯的相關設定
config-recursive 設定這個ports以及所有相依ports編譯時相關設定
showconfig 顯示這個ports的編譯設定內容
showconfig-recursive 顯示這個ports和所有相依ports要編譯的設定內容
rmconfig 移除編譯這個ports的設定檔
rmconfig-recursive 移除編譯這個ports和所有相依ports的設定檔
all 相當於check-sanity fetch checksum extract patch configure build

irssi 簡單教學

相信IRC是個還滿古老的東西,但是卻非常的有效,本來我完全不知道和很多好朋友在同一個頻道聊天的樂趣,接觸之後我發現我真的非常的喜歡,介紹給大家認識一下

首先先安裝軟體irssi
# cd /usr/ports/chinese/irssi
# make install clean

裝好之後,直接使用irssi就可以啟動這個irc的軟體,而設定檔的部份,第一次進之後離開,就會自動出現在你的家目錄裡的.irssi/config,如果你的環境是UTF-8的話,那應該沒有什麼太大的問題,而我的是Big5編碼,為了和windows相容的關係,首先我們先從config下手
# vim ~/.irssi/config
servers = ( #要連的主機
{
address = "irc.oftc.net";
chatnet = "oftc"; #伺服器
port = "6667";
autoconnect = "yes"; #是否啟動時自動連上
} #用,分開可以設定很多組,因為可以同時連上很多irc server
);

chatnets = { #設定加入伺服器的時候的命令
oftc = { type = "IRC"; };
};

channels = ( #加入頻道時候的命令
{ name = "#yzugeek"; chatnet = "oftc"; autojoin = "yes"; }
);
接下來是命令的alias喜歡的可以在這裡新增自己常用的
aliases = {
J = "join"; #加入某個channel
WJOIN = "join -window";
WQUERY = "query -window";
LEAVE = "part";
BYE = "quit"; #斷線,離開irssi
EXIT = "quit";
SIGNOFF = "quit";
DESCRIBE = "action";
DATE = "time"; #看目前的時間
HOST = "userhost";
LAST = "lastlog"; #列出到目前為止的記錄
SAY = "msg *";
WI = "whois"; #看某個人的訊資
WII = "whois $0 $0";
WW = "whowas";
W = "who"; #看目前channel上每個人的資訊
N = "names"; #看目前channel上有那些人
M = "msg"; #傳送私人資訊給某人
T = "topic"; #若是op的話可以修改channel的標題
C = "clear";
CL = "clear"; #清除銀目
K = "kick"; #若是op的話可以踢人
KB = "kickban";
KN = "knockout";
BANS = "ban";
B = "ban";
MUB = "unban *";
UB = "unban";
IG = "ignore";
UNIG = "unignore";
SB = "scrollback";
UMODE = "mode $N";
WC = "window close"; #關閉目前channel的聊天視窗
WN = "window new hide";
SV = "say Irssi $J ($V) - http://irssi.org/";
GOTO = "sb goto";
CHAT = "dcc chat";
RUN = "SCRIPT LOAD";
CALC = "exec - if which bc &>/dev/null\\; then echo '$*' | bc | awk '{print \"$*=\"$$1}'\\; else echo bc was not found\\; fi";
SBAR = "STATUSBAR";
INVITELIST = "mode $C +I";
Q = "QUERY"; #開啟和某人的私人聊天視窗
"MANUAL-WINDOWS" = "set use_status_window off;set autocreate_windows off;set autocreate_query_level none;set autoclose_windows off;set re
EXEMPTLIST = "mode $C +e";
ATAG = "WINDOW SERVER";
};
statusbar的部份我不討論,因為我用目前的樣式就行了,有興趣的可以自己改一改畫面,或是直接把官網的themes來用也是可以的
settings = { #irssi的設定
core = {
recode_autodetect_utf8 = "yes"; #自動偵測頻道是不是utf8
recode_transliterate = "yes"; #直接轉換
recode_fallback = "Big5"; #設定轉換為Big5
recode_out_default_charset = "UTF-8"; #輸出uft8
real_name = "Clockwork Box"; #在channel上全名
user_name = "clockwork";
nick = "clockwork"; #在channel上使用的nick
};
"fe-common/core" = { term_charset = "Big5"; }; #我們輸入的字元集
"fe-text" = { actlist_sort = "refnum"; };
};


以上大概是整個irssi的設定檔了,設好之後,啟動就可以直接殺進channel裡面,這裡我設定我常去的channel是#yzugeek,還有很多其它的指令你可以使用/help來查尋,不過一堆用不到的,常用的還是那幾個。

※另外這裡要介紹的,就是如何使用irssi
一進來irssi如果你沒有設過上面的東西的話,你要先連上server之後在join到一個channel才可以開始聊天,假設我今天要加入irc.oftc.net裡面的#yzugeek的話先開啟irssi之後輸入
/connect irc.oftc.net
之後會跑阿跑的停了之後就連上了,接著
/join #yzugeek
這個樣子就進了channel了,很簡單吧!
之後你會看到像是這樣的東西
[14:41] [@clockwork(+i)] [2:oftc/#yzugeek(+nt)]
@ - 表示你是個OP就是具有管理權限的人,也可以踢人
2 - 表示你在視窗2,視窗1通常是連上server的資訊,或是相關資訊的output
oftc - 表示目前在這台oftc server上面
#yzugeek - 表示目前你在這個#yzugeek的channel裡面
+i or +nt - 表示你的權限和這個頻道的權限

後面你可能會看到這樣的東西
1 2 3 4 5 6 ....
這個表示是視窗的意思,可以用alt+1 or 2 or 3 ....來切換,或是使用ctrl+n or p來切換
視窗1通常是連上irc server的資訊
視窗2之後都是一般頻道的視窗了,在裡面就可以和別人聊天

※玩irc該了解的大小事
1、聊天的時候如果只是針對某個人講的話,請先打他的nick:之後接要打的資訊
2、如果私人的事,請用/q or /msg私人視窗聊天,一樣用alt+??可以切過去
3、如果要離開還是要做什麼事,請用/me 去睡覺,告訴別人你的情況
4、下命令可以使用alias比較方便,如開私人視窗用/q xxxx比/query xxxx好打
5、善用tab來補齊你的命令,比較方便
6、當有1 2 3 4 5 6 ...的數字在statusbar上出現,表示那個視窗有人聊天
7、如果數字是紅色的話,表示有人叫你的名字
8、如果不知道怎麼用使用的話先用/help輸出所有命令到1視窗去,之後去看看用什麼
9、用/help command來查尋命令的功能
10、不想和別人聊的話,就可以用/wc把視窗關閉
11、想要離開irssi的話用/bye離開
12、善用screen+irssi來掛機(screen說明也在blog中,請找自己找)

以上大概是簡單的設定了,這裡提供一些別人的說明,可以參考看看
http://irssi.org/documentation 這是官網的說明
http://lzy-blah.blogspot.com/2007/08/screen-irssi-irc-q.html 更仔細的說明

字型管理

在X的世界中字型管理到處都是,目前最常用的就是fontconfig,但是不是每個程式都吃XFT這一套,有些舊有的還是吃XLFD的,所以我們使用freebsd內有一套軟體叫ttfm的來解決

fontconfig把xorg裝好就含在裡面了,反而是傳統的XLFD比較麻煩,所以我們先安裝ttfm
# cd /usr/ports/chinese/ttfm
# make install clean

用法 ttfm.sh --help
目錄 /usr/local/share/font/TrueType/
假設今天要裝一個xxx.ttf字型的話,那只要簡單的將它cp到/usr/local/share/font/TrueType/之後執行下面的命令讓它建立fonts.dir

# ttfm.sh --add xttfm xxx.ttf
※當執行這樣動作的時候,雖然產生出來是放在/usr/local/lib/X11/fonts/TrueType/但是會建個一個s-link到上面我們放的目錄,所以ttfm自己管理自己的目錄,和系統用到的字型目錄不混在一起。

如果要移除的話
# ttfm.sh --remove xttfm xxx.ttf
不過樣比較麻煩,我是直接到/usr/local/lib/X11/fonts/TrueType/直接rm -rf *

那如果你已經安裝完你的ttf字型的話,到/usr/local/lib/X11/fonts/TrueType/下面應該可以發現已經產生了fonts.dir,所以我們可以使用XLFD吃我們中文的字型。

但是如果你想要知道你裝了那些字型的話可以透過
# ttfm.sh --list xttfm
※那其實是在fonts.dir裡面的資料^^

如果你是XFT的話,fontconfig套件提供了很方便的功能,直接
# fc-cache -fv
那fontconfig就會透過你設定在xorg.conf裡面的字型路徑去爬你放在這目錄裡面的字型,並加入到cache中,所以你就可以直接使用字型了,像是firefox這些應用程式都吃這一套,所以就可以直接在firefox裡面設定顯示的字型了,透過
# fc-list :lang=zh-tw
我們可以看到安裝的字型中有那些是中文的,來顯示我們安裝了那些中文字型

=================================================
以上不論是XFT或是XLFD都有自己設定字型的方式,舉例來說,如果我今天裝了fvwm2,結果它不吃fontconfig那一套的話,看看設定檔它吃XLFD這一套,那我們其實可以用一套很簡單的工具它叫xfontsel可以讓你在啟動X的時候選字體,決定之後複製貼上就行了

EX:
假設我們今天要用飛星送字體,那我會先用xfontsel,出現視窗之後讓自己選,另一種方式就是直接看fonts.dir看看有什麼可以用的,直接貼過來。

XFLD的表示方式比較特別,雖然設定欄位非常多,但是我從來沒有去注意它,因為設成*系統會自動匹配最佳的設定,沒有辦法匹配的話,就顯示不出來,所以我只會注意挑選我要指定的部份,其它的系統自動會匹配。

以下表示misc這間公一的ar pl new sung字型,後面的其實沒有去查不知道是設什麼,那個11是表示字型大小,而到數第二個是編碼,那如果匹配的話它會看使用者語系自己匹配,所以也放著不用理它

Menustyle * fvwm, Font "-misc-ar pl new sung-medium-r-*-*-11-*-*-*-*-*-*-*"

這種設定方式還有一個好處,可以把中英文分開指定,像ar pl new sung沒有iso8859的編碼,也就是沒有abcdefg....的英文字,所以我補上我英文字的顯示用另一套

Menustyle * fvwm, Font "-misc-ar pl new sung-medium-r-*-*-11-*-*-*-*-*-*-*,-artwiz-snap-normal-r-*-*-*-*-*-*-*-*-*-*"

透過豆號分開就行了,這樣中文字有專門的顯示,而英文的話又有精美字型,真是超客制化,而如果是吃XFT的話,那就好好寫.fonts.conf吧!雖然不難,而且功能又多,但是我覺得還是XLFD比較好用。

同樣的mlterm這隻程式也是吃XLFD所以設定方法可以同上,基本上在X的世界中,字型的問題這樣差不多就搞定了

=================================================
這裡推見一下artwiz-aleczapka這套字型,英文我都用它設,不是向量字型是點陣字型
# cd /usr/ports/x11-fonts/artwiz-aleczapka
# make install clean
裝完之後因為它放在/usr/local/lib/X11/fonts/artwiz-aleczapka-en
所以要讓X吃的到的話我們要去xorg.conf裡面加上fontpath

FontPath "/usr/local/lib/X11/fonts/artwiz-aleczapka-en"
加進去之後就吃的到了,一樣用xfontsel就可以找的到,不然就是去看它的fonts.dir

freebsd 系統升級流程

這幾天把freebsd裝在eeepc901上面剛剛好要從freebsd-release升到freebsd-stable所以就順來記錄一下升級的流程了,首先一定要先準備好make.conf的設定檔

※從頭到尾都要用root做
# cp make.conf /etc/
# cd /usr/src
# make update
# make buildworld
# make buildkernel KERNCONF=LACHESIS
(自訂編譯的kernel檔放在/usr/src/sys/i386/conf)
若要自訂kernel的話
# cd /usr/src/sys/i386/conf
# cp GENERIC ~/LACHESIS
# ln -s ~/LACHESIS
之後在家目錄下修改LACHESIS的kernel設定檔
# make installkernel KERNCONF=LACHESIS
# sync;sync;sync;reboot (重啟動)
# mergemaster -p (避免升級時帳號衝突問題)
# make installworld
# make delete-old (移除舊設定檔和舊目錄)
# mergemager (merge舊的設定檔到新的去)
# sync;sync;sync;reboot
# make delete-old-libs (移除舊的系統函式庫)
# sync;sync;sync;reboot

以上的流程就升級完成了,而過程中編譯的檔案會放在/usr/obj下面,如果你空間不怎麼夠的話,那就去砍了吧!
# cd /usr/obj
# chflags -R noschg *
# rm -rf *