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 *