| 
 | |||||||
| adm | Find | login register | |||||
| 
 大家好我現在遇到一個小問題 首先就是我的空白鍵是選字鍵 在我「還未輸入任何中文前」,只要按下空白鍵 (似乎就會去試圖想要去選字,然後根本沒有字給他選) 就會使得畫面卡住 
 以下是我的一些設定 系統 Gentoo 安裝 package: =app-i18n/gcin-2.8.3 USE="filter-nobopomofo gtk3 qt4 -anthy -chewing -chinese-sound" ~/.xinitrc ====== 
 
 $ gtk-query-immodules-2.0 ====== "/usr/lib64/gtk-2.0/2.10.0/immodules/im-multipress.so"  "/usr/lib64/gtk-2.0/2.10.0/immodules/im-ipa.so"  "/usr/lib64/gtk-2.0/2.10.0/immodules/im-cyrillic-translit.so"  "/usr/lib64/gtk-2.0/2.10.0/immodules/im-ti-et.so"  "/usr/lib64/gtk-2.0/2.10.0/immodules/im-inuktitut.so"  "/usr/lib64/gtk-2.0/2.10.0/immodules/im-cedilla.so"  "/usr/lib64/gtk-2.0/2.10.0/immodules/im-viqr.so"  "/usr/lib64/gtk-2.0/2.10.0/immodules/im-ti-er.so"  "/usr/lib64/gtk-2.0/2.10.0/immodules/im-thai.so"  "/usr/lib64/gtk-2.0/2.10.0/immodules/im-xim.so"  "/usr/lib64/gtk-2.0/2.10.0/immodules/im-am-et.so"  "/usr/lib64/gtk-2.0/immodules/im-gcin.so"  
 ====== 
 
 $ gtk-query-immodules-3.0 ====== "/usr/lib64/gtk-3.0/3.0.0/immodules/im-multipress.so"  "/usr/lib64/gtk-3.0/3.0.0/immodules/im-ipa.so"  "/usr/lib64/gtk-3.0/3.0.0/immodules/im-cyrillic-translit.so"  "/usr/lib64/gtk-3.0/3.0.0/immodules/im-ti-et.so"  "/usr/lib64/gtk-3.0/3.0.0/immodules/im-inuktitut.so"  "/usr/lib64/gtk-3.0/3.0.0/immodules/im-cedilla.so"  "/usr/lib64/gtk-3.0/3.0.0/immodules/im-viqr.so"  "/usr/lib64/gtk-3.0/3.0.0/immodules/im-ti-er.so"  "/usr/lib64/gtk-3.0/3.0.0/immodules/im-thai.so"  "/usr/lib64/gtk-3.0/3.0.0/immodules/im-xim.so"  "/usr/lib64/gtk-3.0/3.0.0/immodules/im-am-et.so"  "/usr/lib64/gtk-3.0/immodules/im-gcin.so"  ====== 
 這兩個檔案確實存在 ====== $ ls -l /usr/lib64/gtk-2.0/immodules  $ ls -l /usr/lib64/gtk-3.0/immodules ====== 
 還有相關設定 
 
 
 | |||||||||||||
| 
 
 這個先移除看看。 | |||||||||||||
| 
 | |||||||||||||
| 
 可能先只 install gcin 最基本的,create 新的 user account. 從頭開始測才知道問題在哪裡。 | |||||||||||||
| 
 這是gentoo在安裝gcin-2.8.3時的設定檔 https://github.com/microcai/gentoo-zh/blob/master/app-i18n/gcin/gcin-2.8.3.ebuild 預設部份只有 --use_i18n=Y --use_tsin=Y --use_qt3=N 沒有太多複雜的設定 | |||||||||||||
| 
 剛剛測試了一下 2.8.0~2.8.3 各個版本 都是用 gentoo portage ebuild 的安裝方式,預設條件都相同(見上篇) 2.8.0 和 2.8.1 不會按空白鍵就卡住 看來是從 2.8.1 → 2.8.2 這次改版引發的問題 | |||||||||||||
| 
 是用什麼輸入法?有 diff gcin 2.8.1 2.8.2,看不出問題出在哪裡。 | |||||||||||||
| 
 只有詞音輸入法會出現這個問題 | |||||||||||||
| 
 我來考古一下,和很不專業的 trace 
 reproduce steps 
 此時我用 gdb 去 attach 看一下 bt #0 0x00007fc135b4c580 in read () from /lib64/libc.so.6 卡在 read(),我猜測這段 code 是在 eve.cpp 裡 248 行,在等 pipe 的值 242 if (pid) { 243 close(pfdw[0]); 244 close(pfdr[1]); 245 if (write(pfdw[1], text, len) < 0) { 246 } 247 close(pfdw[1]); 248 int rn = read(pfdr[0], filter_text, sizeof(filter_text) - 1); 249 filter_text[rn] = 0; 250 // puts(filter_text); 251 close(pfdr[0]); 252 text = filter_text; 253 len = rn; 254 } else { 
 我對 gcin source code 不熟,不知道該怎麼再追下去 | |||||||||||||
| 
 這邊是有用 GCIN_OUTPUT_FILTER 才會進入這段 code,這個 filter 只能用在 filter process 執行然後馬上結束,如果 filter process 一直不結束,就會產生卡住這種情形。我自己沒在用。 這個 filter 有可能造成安全漏洞,未來的版本有可能會內定不開啟,需要使用者自行 compile 打開。 edited: 4
 | |||||||||||||
| 
 感謝解惑。我現在把注音文的 filter 拿掉,就不會卡住了。 | |||||||||||||
| 
 | |||||||
| adm | Find | login register | |||||