星期三, 2月 11, 2009

battlelan for Linux

雖然說Linux 本身不是設計用來玩遊戲的,但是有時候還是想玩一些遊戲。我最常玩的大概就是StarCraft(天阿,好老的遊戲,聽說快出2 了!!) 跟 WarCraft3 吧。但這些戰略遊戲自己玩單機一點也沒挑戰性,也不刺激,所以連線對戰可以說是這些戰略遊戲最重要的部分了。

除了上Battle.Net 以外,有時候我們想用區網連線,Windows 上透過 BattleLan 或是 LanCraft 都可以以 socket redirecting 達到與區網外連線的目的,但Linux 上我好像沒有看到類似的軟體。

那時候為了跟同學連線,上網找了相關的資料,後來看到有人自己寫了BattleLan,雖然是在Windows 上的,可是有了他的程式碼我可以改成在Linux 上用的BattleLan。搭配Qt,我做了我的'FreeLan',執行畫面如下。

目前是可以一次設定多個連線的ip/host,對於host game 很方便,做client 的時候通常只要設定一組就可以了。現在做的還不是很完全,所以暫時大概也不會開放下載,但如果很想要的人可以跟我要:p。

-----另解----------
由於是socket redirecting,理論上使用 iptables 也可以做到這種功能,但是我對iptables 實在不熟,試過幾種設定都不見功效,如果有高人請賜教 :)

不過以上這兩種都需要root的權限才行。

-----又 另解-------
就像Windows 上的 Garena (人稱 GGc),理論上也是可以hook 那些socket 的api (透過LD_PRELOAD, 應該可以) 修改過封包以後再送出,這種方法我還沒試過,不過就算是wine,最後也是調用系統的socket function 才是,所以我想這應該是沒問題的,而且這種方法也不需要root 的權限,應該是最方便的解決方法。

-------------------------------------------------------------------
02/13/09 更新

今天看了一下 wine 的 source, 看來WSASendTo 的地方是用 sendmsg 來實作。於是便寫了一個小 library 用 LD_PRELOAD 替換掉wine 會呼叫的 sendmsg,完全符合我預期的情況,看到War3 送了一堆broadcast 的 packet,redirecting 或修改封包也都不成問題了。想一想,這東西要是在Windows 下寫還真麻煩,不得不讚賞一下 Linux 完美的機制。

執行結果:

trap

今天在找 mplayer 相關的 dev 資訊,無意中翻到 mplayer 附的一些 code,裡面有個 mpconsole 的shell script挺有趣的。 裡面有用到一個指令叫作 `trap'。

找了一下資料,原來 trap 就是有點像 C 裡面的 signal(),可以設定在執行時的signal handler,沒想到 shell 也能做如此的設定,真是大開眼界 :p

使用範例:
http://steve-parker.org/sh/trap.shtml

所有的可以用的signal 在 signal(7) 有列表

星期四, 1月 15, 2009

stop autoplay with GreaseMonkey

Greasemonkey 是個firefox 的plugin, 非常有彈性所以很強大。使用者可以透過他將設計好的javascript 插入到網頁中,來達到任何目的。

我第一次聽到這個東西是在 2007 的 OSDC.tw,那時有個大大在介紹他寫的瀏覽無明相簿的 script。那時候就大概試了一下,後來沒什麼在用重灌後就也沒想到要加上。

今天聽到有人在討論firefox 的一個叫作 Stop Autoplay 的 plugin。突然想到這個功能應該也可以透過Greasemonkey 實現。Google 了一下果不然,有如此一個Disable Embed Autoplay 的script。馬上下載下來裝看看。可是發現現在無明很多都用yimg 的 flash music player,而剛剛那個script 只支援使用Embed 標籤的檔案。於是做了一點小hack,在script 後面加上:
var o = document.getElementById("automusic");
if(o != null)
{
o.style.display = "none";
}
由於無明好像提供的語法就是 span id="automusic",所以只要找到這個span,不顯示就可以了,這樣還蠻dirty 的可是可以work 啦 :p

星期日, 1月 11, 2009

Archlinux

用了Ubuntu 好幾年了(少說也有3, 4 年吧), 一直覺得Ubuntu 還蠻好用的, 雖然說有時候會被覺得是"新手" 用的 distro, 但好用嘛 :p

昨天看到學長在講 Archlinux, 小小新手的我就去找了一下這什麼. 看了官網的介紹, 似乎是給i686, x86-64 做過優化的distro, 心想我這 E6550 好像也是 i686, 不知道Archlinux 會不會快一些!? 雖然說我現在用Ubuntu, WM 是 fluxbox 速度還算不錯. urxvt 也讓我蠻滿意的, 但是想說學長推薦的distro 不試一下可惜, 便下載了 Arch 來試試.
-----------

Arch 安裝的速度真是蠻快的, 跟Ubuntu 比起來是輕便許多. 我在VirtualBox 裡裝的時間大概是 15 分鐘左右, base, bootloader 就都裝完可以開機了.

他用的package manager 是 pacman, 套件庫應該不算多但是還蠻夠的了.

試用了一天整個感覺就是:快!, 也是裝了才知道原來Ubuntu 裝了不少不必要的東西, 也難怪許多Ubuntu 老手後來都喜歡用 Debian. Anyway, 我也才試用這麼一天, 也實在沒資格說整個系統的優缺點, 等寒假再來玩個透撤.

更換游標主題

今天在試 Archlinux, 剛裝好X 的時候的cursor theme 是預設的xcursor theme, 對於用了Ubuntu 好幾年的我實在不習慣, 於是想換回DMZ 的theme.

通常裝好的 cursor theme 都會放在 /usr/share/icons 裡面, 如果沒有root 的話可以放在 ~/.icon/ 裡面, 更換 cursor theme 的話就只要在 ~/.icon/default/index.theme 放這些:
[Icon Theme]
Inherit=DMZ-White
然後重新啟動X 就行了.

這邊DMZ-White 是指 icon 的名字, 可以在icon theme 的資料夾裡, index.theme 中 Name= xxx 找到.