上一篇掛站系統所講的相關設定我貼在這篇文章裡面,用途當然是掛站(BBS和irc),目前我的設定還沒辦法開機自動啟動,正在研究問題在哪,另外對expect不熟,還沒厲害到可以被踢下站自動重登入。需求:
首先是irssi,用0.8.10版主要原因是他可以針對不同頻道作不同的語系設定(recode),如果沒有這個需求用0.8.9也可以,不過我還是建議用0.8.10,直接從官網抓就可以,看是要手動編譯或是抓rpm安裝皆可。
SCREEN雖然大部分的linux系統都預設安裝,不過為了修正一些字碼上的錯誤,我們一定要手動編譯才行,不修正的話會造成BBS的排版錯誤。就照著Tiberius大大的步驟patch好原始碼後編譯即可:
./configure
make
make clean
make install
Expect在大部分的linux系統應該也都有安裝,沒有的話就想辦法裝上去吧,和irssi一樣不限安裝方法。
需要的軟體都裝好後,就開始設定吧,因為我的需求比較多一點,所以整個環境是以UTF-8編碼為基本編碼(如果只是要掛Big5編碼的BBS而已,那其實連SCREEN都不用patch),首先是irssi的部份,我需要開啟時自動連上IRCNet,並且連上我指定的三個頻道,我需要做的設定是指定自動連線的irc網路和要連線的頻道,首先是自動連線的部份,進入irssi後輸入:
/NETWORK ADD -kicks 4 -msgs 1 -modes 4 -whois 1 seednet
/SERVER ADD -auto -network seednet irc.seed.net.tw
接下來是自動加入頻道:
/CHANNEL ADD -auto #elixus seednet
這樣每次啟動irssi都會自動連到irc.seed.net.tw這個irc伺服器,並且自動加入elixus這個頻道,如果想要自動加入更多頻道就是/CHANNEL ADD
的部份多輸入幾次即可,也可以用/CHANNEL LIST
和/CHANNEL REMOVE
,來檢視現在有哪些頻道和移除已經設定好的頻道。設定好自動加入後就是設定recode了:
/RECODE ADD #elixus Big5
一樣有多個頻道就設定多次,這樣就完成irssi部份的設定了,接下來是Expect和BBS了,現在假設要自動掛kkcity,我要建立一個exp設定檔,內容如下:
#!/usr/bin/expect
# 設定 timeout 時間,以秒為單位。
set timeout 20
# 啟動 telnet
spawn telnet -8 bbs.kkcity.com.tw
# 將 my_id 與 my_password 分別置換成您的帳號與密碼。
set ID 帳號
set PASSWD 密碼
# 當 telnet 輸出 guest,便輸入帳號與密碼,超過時限則直接離開。
expect "guest" { send "$ID\r$PASSWD\r" } timeout { exit }
#把畫面轉交給使用者控制,並每隔三百秒送出 " "
interact timeout 300 { send " " }
exit
另外還要一個shell script內容如下:
#!/bin/bash
export LC_CTYPE=C
export LANG=zh_TW.big5
expect /home/othree/bbs/4.kkcity.exp
檔名和路徑請自訂,我是在home目錄裡開一個bbs的子目錄,把相關設定檔都放在裡面,另外記得要開啟shell script的執行權限。就像上面的範例,一個bbs站需要兩個檔案,不過其實可以把Expect的設定寫到shell script裡面,不過我還不熟悉所以先這樣比較保險。
依照上面的範例把bbs相關的設定檔都建好後,就來建立SCREEN的rc檔,不過我不用.screenrc,以確保我需要用SCREEN作其他工作時不會被掛站系統干擾,一樣我是把這個獨立的screenrc放在bbs的子目錄裡面,檔名為screenrc-ej84,內容如下:
vbell off
defencoding big5
screen -t 'PTT' 3 /home/othree/bbs/3.ptt.sh
screen -t 'KKCITY' 4 /home/othree/bbs/4.kkcity.sh
defencoding utf-8
screen -t 'IRC' 0 irssi
內容蠻簡單的,就是先用big5的encoding開啟bbs的screen,最後再用utf-8開irssi,這樣基本上就完成設定的工作了,只要執行
LANG="zh_TW.UTF-8" screen -c /home/othree/bbs/screenrc-ej84
就會開啟掛站系統了,需要注意的是LANG="zh_TW.UTF-8"
是必要的,不然bbs排版還是會不正常,當然每次都要打這串指令實在很麻煩,所以我就把他在寫進一個shell script,我取名叫initial,並加入檢查是否已經有啟動了,內容如下:
#!/bin/bash
if ! screen -r BBS >& /dev/null ;then
LANG="zh_TW.UTF-8" screen -S BBS -c /home/othree/bbs/screenrc-ej84
fi
這樣每次需要啟動就只要執行/home/othree/bbs/initial
即可,好記多了吧:P,當然要放到path的目錄或把path指到這也可以,如果能開機自動執行起不更好,不過我還設定不起來,目前是在crontab裡加上:
@reboot /home/othree/bbs/initial
不過一直沒反應,讓我很難過。再來簡單介紹一下基本指令,在SCREEN中,想要下命令或是輸入設定都是以Ctrl+A為開始,例如我要切換到視窗三的ptt,我就需要Ctrl+A後再按3,要列出所有視窗則是Ctrl+W,至於在irssi中要切換視窗則有Ctrl+P(Previous)或是Ctrl+N(Next)兩個快速鍵可以用,當然也可以用輸入命列的方式/window goto 2
,不過反而比較累。如果不小心離開某個bbs站或把irssi關掉,一樣事先輸入Ctrl+A後輸入:
然後看你是關掉哪一個站,把該站的screen指令貼上然後輸入即可,例如ptt的就會變成:screen -t 'PTT' 3 /home/othree/bbs/3.ptt.sh
,輸入的指令會在右下角顯示。要小心的是defencoding可能和你想要的不一樣,如果要改變單一視窗的encoding的話就是Ctrl+A :encoding big5
。知道這些應該就可以應付平常使用所需了:P。
最後是參考網址:
- Irssi Help,irssi的使用說明,不過有點舊了,最新的可以上irssi.org查詢。
- irssi UTF-8 Big5 中文轉換與設定,irssi的相關部份,還有log的設定可以參考。
- 如何開機時自動執行某程式,而不用修改 /etc/rc.local ?,我接下來會照著個測試看看。
- Rxvt BBS,SCREEN的rc檔和Expect的exp檔都是參考這的。
- screen,中文的SCREEN指令介紹
- 使用screen & expect來掛站,簡單的掛站設定,原理和程式都一樣。
- 請教 expect in Debian <Linux>,解決用screen上BBS會有一些字元變亂碼的問題。
- 會響的 PuTTY + screen + irssi,我不確定我成功了沒。