在 fedora 15 的環境下要用新酷音,可以採用 ibus or scim ,但是 scim 在 fedora 15 上整個像殭屍一樣,只好用 ibus 了,可以先用 yum 裝好 ibus-gnome3,會與 gnome-shell 有比較好的整合介面,在某些軟體的輸入上會比較相容。
但是在 ibus-chewing 在變換設定(例如我要關閉簡易符號輸入)時會發生記憶體區段錯誤,而且改每個設定都儲存後都沒有被記起來,因此…這是一個千金難買的好時刻!~阿阿
因此開始瞭解一下 open source 的 package 的生態,以 ibus-chewing 為例就有分成 ibus、libchewing 、ibus-chewing 這些專案,ibus 是輸入法引擎,libchewing 是酷音輸入法的核心, ibus-chewing 是將 chewing 整合到 ibus 引擎上。因此…要先找到是哪一個部份出錯才能知道要對哪個除錯,在其他情況的就算了,我遇到的這個錯誤很明顯是跟 gnome-shell or ibus 的其中一者更新造成的不相容,因為這兩個 package 在 fedora 15 上都有過大更新。
而一個套件(發行套件上的軟體)在不同的發行套件上又有各自維護的版本像 ibus-chewing 就會在 fedora 15 上面有對應的版本,他會把 ibus-chewing 的某個版本做些修改後套用到 fedora 上…,由於 fedora 本身又有分成很多版本,實際上應該是每個 fedora 版本都會對應一個被測試過穩定的 package 版本。例如 fedora 15 目前的 ibus-chewing 版本是 1.3.9.2-3,應該要等其維護者 definite 修好這個 issue 然後上傳至 fedora package database(應該會變 1.3.9.2-4?)才會取代 fedora 15 的對應 ibus-chewing。
而理當要有網頁記載每個發行版本的 package 對應、版本控制、問題回報,原本有印象有找到 fedora 的 package 的網頁,只是忘記在哪了~像 ubuutu 的 package 網頁[3],就有記載版本的變更與維護者等資訊,就類似 package 版本控制紀錄。只是 feodra 這個 ueno package 的網頁裡面有紀錄每個 package 的 rpm 的三種版本應該與 yum 抓到的一致,有分成一般版本、原始碼版本, debuginfo 的版本,且 fedora 另外還有一個 package database,另外提一下不同 rpm 分別的安裝方法是:
$ yum install ibus-chewing $ yumdownloader --source ibus-chewing $ debuginfo-install ibus-chewing
應該裝 debuginfo 的就是在用 gcc 編譯的時候有加 -g 的選項,可以用來跑 gdb,也可以自己抓 src 下來編譯,接著我想要尋找發生錯誤的程式碼,只是不曉得怎麼用 gdb 啟動 ibus-chewing,因為 輸入法 都是有一套啟動的機制,就算 ibus-chewing 當掉了 ibus 也會自動重新啟動他,所以我先試著用 ps aux 看他的 process 並找到他的 id 以後先 kill 掉,然後自己用 gdb 啟動看看是不是能銜接取代原本會自動執行的 process,試圖替輸入法除錯。
$ ps aux|grep chewing mlwmlw 13390 0.1 0.4 364544 17884 ? Sl 16:25 0:21 /usr/libexec/ibus-engine-chewing --ibus $ kill 13390 $ gdb /usr/libexec/ibus-engine-chewing (gdb) set args --ibus (gdb) r ... ... Program received signal SIGSEGV, Segmentation fault. g_atomic_int_get (atomic=0x20) at gatomic-gcc.c:64 (gdb) bt ...
然後就可以試著把原始碼抓下來檢查錯誤的原因並修正,可惜…把這個錯誤訊息貼到 google 以後就找到[5]已經有人修正這個問題並且回報到 ibus 囉!很想試著投入一些 Open Source 的專案但是不知道怎麼開始,類似這樣試圖解決自己使用上的問題可能是很好的開始吧~只是真的投入可能要…花不少時間摸索吧~像此問題 g_value_get_gtype 要換成 G_VALUE_TYPE 就需要花一些時間瞭解原生 gtk 的使用,與新舊版本轉換的差異,但可因此慢慢熟悉此領域需要的背景知識。
—
另外一提跟輸入有關的問題,目前在 fedora15 上面有一個嚴重的輸入問題則不知道怎麼修正,按完 Caps Lock 以後再快速輸入一個按鍵則該按鍵會被鎖住造成連續輸入,如果鎖住的按鍵是 Backspace 則會當機~好糟糕阿~只是不知道怎麼克服~猜測應該是 gnome-shell 的問題。
專案連結:
- ibus project http://code.google.com/p/ibus/
- ibus chewing https://github.com/definite/ibus-chewing
- ubuntu ibus-chewing https://launchpad.net/ubuntu/+source/ibus-chewing/+publishinghistory
- fedora ibus-chewing http://ueno.fedorapeople.org/ibus-chewing/
- [PATCH] ibus-chewing always crashes on preference on F15 http://code.google.com/p/ibus/issues/detail?id=1281
- fedora ibus-chewing package database https://admin.fedoraproject.org/pkgdb/acls/name/ibus-chewing?_csrf_token=54357cf01bf81780904b85354b0787f0437457a2
感謝分享 🙂
也歡迎利用 Google Groups,與其他開發者交流 : http://groups.google.com/group/chewing-devel
感謝你在開放原始碼的投入與貢獻,引發我欲參與的熱誠~ 🙂
希望以後有機會實質的對 chewing 等開放原始碼專案貢獻微薄之力…