cht電腦資訊gcin
adm Find login register

gcin >2.6.6 之後在大多數 KDE 程式裡叫不出來

guest
1 gcin >2.6.6 之後在大多數 KDE 程式裡叫不出來
Promote 0 Bookmark 02012-01-03quote  

這是個很奇怪的問題,gcin 在 2.6.6 之後在 KDE 大多數的程式下都無法呼叫出來。更奇怪的是在 konsole 下又可以正常使用,而且從 konsole 啟動的 kwrite/kate 就可以叫出 gcin。,從 GUI 開起 kwrite 就叫不出來。重開 KDE 也沒用,但只要一回到 2.6.6 版就很正常。我是用 Arch Linux,從 gcin 2.6.0 一直 compile 到 gcin 2.6.9 得出的結論。

看了好久 gcin 在 terminal 下也沒任何警告或錯誤訊息,~/.xsession-errors 也看不出什麼來,只有點 restart gcin 時會顯示 cannot write to gcin server: Broken pipe 和 gcin_im_client_focus_out error: Broken pipe。

eliu
2
Promote 0 Bookmark 02012-01-03quote  
edited: 1
hyslion
3
Promote 0 Bookmark 02012-01-03quote  

沒想到現在有空想要提報這個問題,結果有人比我快呢@@

檢查的結果,應該是以kde去啟動的Qt-based程式都會沒有辦法使用。若使用其他的shell啟動(像是開konsole啟動軟體、或是在krunner中以sh -c ' '的方式啟動…等)就會可以使用。若為GTK-based則無此問題。

我猜,具體的原因應該是其沒有載入im_module的關係。但是原因不明,只要使用2.6.6以前的版本就沒有問題。

附件為相關的檢查內容。

  * pid 10468的kwrite是以krunner輸入sh -c kwrite的方式啟動的

  * pid 10426的kwrite則是一般點選單的方式啟動的

測試環境:

KDE 4.7.4, ArchLinux 32bit

KDE 4.8 RC1, ArchLinux 64bit

Qt版本皆為4.8

若eliu老大需要套件編譯時相關的內容我會再附上

eliu
4
Promote 0 Bookmark 02012-01-03quote  

可能是 archlinux environ 的問題。

我在 fedora 16/QT 4.8RC1, ubuntu 11.10 QT 4.7.4 都沒有你說的問題。

hyslion
5
Promote 0 Bookmark 02012-01-03quote  

eliu

可能是 archlinux environ 的問題。

我在 fedora 16/QT 4.8RC1, ubuntu 11.10 QT 4.7.4 都沒有你說的問題。

 

有什麼方法可以檢查嗎?

eliu
6
Promote 0 Bookmark 02012-01-03quote  
hyslion
7
Promote 0 Bookmark 02012-01-03quote  

eliu

直接在 bash

export QT4_IM_MODULE=gcin 
kate

這樣有用嗎? 

如果在終端機打開是都可以正常用(以launcher啟動shell再execute的方式亦同,即上述之sh -c型式)…變數應該是都沒有設定錯。

應該在進入X時,關於輸入法的變數都載入了(QT_IM_MODULE、XMODIFIERS、GTK_IM_MODULE)

參閱上面附件,兩個process都有QT_IM_MODULE、XMODIFIERS=@im=gcin的變數

我發現差別在於有沒有im-gcin.so的載入而已

這樣有什麼線索嗎?

 

不好意思,麻煩老大囉

eliu
8
Promote 0 Bookmark 02012-01-03quote  
hyslion
9
Promote 0 Bookmark 02012-01-03quote  

eliu

你確定是 QT4_IM_MODULE or QT_IM_MODULE

Arch Linux應該是用QT_IM_MODULE沒錯,這組設定檔我用好久了,除非packer有改過設定,不過目前沒有看到相關消息就是了…。

剛剛測試過QT4_IM_MODULE也沒有用。

eliu
10
Promote 0 Bookmark 02012-01-03quote  

你的 uid 是多少,在 bash 執行 id 可以看到

gcin 為了某些 dm 的問題,在 uid >0 && uid < 500 時無法使用輸入法的。

hyslion
11
Promote 0 Bookmark 02012-01-03quote  

eliu

你的 uid 是多少,在 bash 執行 id 可以看到

gcin 為了某些 dm 的問題,在 uid >0 && uid < 500 時無法使用輸入法的。

1000唷

eliu
12
Promote 0 Bookmark 02012-01-03quote  

 

$ ldd /usr/lib/qt4/plugins/inputmethods/im-gcin.so

libgcin-im-client.so.1 => /usr/lib/gcin/libgcin-im-client.so.1

/usr/lib/gcin/libgcin-im-client.so.1 & /usr/lib/qt4/plugins/inputmethods/im-gcin.so 都有更新?

/usr/lib/gcin/libgcin-im-client.so.1 是否指到 libgcin-im-client.so.1.2.5

edited: 1
hyslion
13
Promote 0 Bookmark 02012-01-03quote  

$ldd /usr/lib/qt/plugins/inputmethods/im-gcin.so | grep libgcin

libgcin-im-client.so.1 => /usr/lib/gcin/libgcin-im-client.so.1

好像跟老大的預期結果不太一樣

會錯意不好意思

 

$ls -l /usr/lib/gcin/
總計 152
-rwxr-xr-x 1 root root 41816 1月 3 16:54 anthy-module.so
-rwxr-xr-x 1 root root 23616 1月 3 16:54 chewing-module.so
-rwxr-xr-x 1 root root 37504 1月 3 16:54 gcin1.so
-rwxr-xr-x 1 root root 5452 1月 3 16:54 gcin2.so
-rwxr-xr-x 1 root root 12500 1月 3 16:54 intcode-module.so
lrwxrwxrwx 1 root root 26 1月 3 16:54 libgcin-im-client.so -> libgcin-im-client.so.1.2.5
lrwxrwxrwx 1 root root 26 1月 3 16:54 libgcin-im-client.so.1 -> libgcin-im-client.so.1.2.5
-rwxr-xr-x 1 root root 16524 1月 3 16:54 libgcin-im-client.so.1.2.5

 

是指向libgcin-im-client.so.1.2.5沒有錯。

edited: 1
swyear
14
Promote 0 Bookmark 02012-01-03quote  

在 openSUSE 12.1 KDE 4.7.2 gcin 2.6.7 也有此問題

eliu
15
Promote 0 Bookmark 02012-01-04quote  

昨天我是在 fedora 16 LXDE & ubuntu 11.10 unity 開啟的。

今天在 fedora 16 試了一下 真正的 KDE 4.8,gcin 在這邊有兩個問題

  • KDE login 後執行了 gcin 數次,其實早就有某 proccess 把 gcin 叫出來,造成 gcin 警告有已經有其他的 gcin 正在執行,還要 click button
  • 在倚天26鍵使用 ,./ 輸入標點符號,會看到 gcin 的 window 閃來閃去,在 LXDE、Unity、gnome 3 都不會有這種現象。
KDE 的 menu 也改得很複雜,好像比 gnome 3 還難用。
我在 menu 開 kate 依然是 ok,真是奇怪。diff 2.6.6 2.6.7 也比不出那邊出問題。
hyslion
16
Promote 0 Bookmark 02012-01-04quote  

我自己在ArchLinux的作法是只設定輸入法相關變數,待登入後讓IM_MODULE自己呼叫gcin出來。

我今天如果有空會再安裝虛擬機器,試看看不同DE下,有沒有不同的行為。

 

話說,這論壇有限額度嗎?剛剛要回不讓我回哩,胡搞瞎搞之後又可以了 @@"

edited: 1
eliu
17
Promote 0 Bookmark 02012-01-04quote  
guest
18
Promote 0 Bookmark 02012-01-04quote  

eliu

KDE login 後執行了 gcin 數次,其實早就有某 proccess 把 gcin 叫出來,造成 gcin 警告有已經有其他的 gcin 正在執行,還要 click button

數次是超過兩次?不過警告視窗好像是 2.6.0 開始會跳出,之前都不會。是 2.6.0 之後加入的警告訊息嗎?還是之前就有,只是 2.6.0 之後開使被多次起動?
eliu
KDE 的 menu 也改得很複雜,好像比 gnome 3 還難用。
Kicker 從一開始我就用得很不慣,所以我一直都是用 lancelot。
eliu
我在 menu 開 kate 依然是 ok,真是奇怪。diff 2.6.6 2.6.7 也比不出那邊出問題。
我也是看 diff 看不出個所以然...
qt4-im 根本就沒動,不曉得問題到底出在哪裡。
eliu
19
Promote 0 Bookmark 02012-01-04quote  

guest
數次是超過兩次?不過警告視窗好像是 2.6.0 開始會跳出,之前都不會。是 2.6.0 之後加入的警告訊息嗎?還是之前就有,只是 2.6.0 之後開使被多次起動?

為了避免造成 KDE 的困擾,下一版會把這個 fatal error 改成只在 tty print,不會跳出 dialog

hyslion
20
Promote 0 Bookmark 02012-01-04quote  

在gnome、fluxbox之下就很正常...

我在猜是不是因為KDE(或其他支援KDE的WM)是以kdeinit4來產生process的緣故,然後不知為何地gcin就沒載入了。

剛剛觀察到其他的環境下,parent process都是init,也都可以正常使用gcin。

不知道跟這有沒有關係,當作一個線索囉

siyuan
21
Promote 0 Bookmark 02012-01-04quote  

問題找到了,但造成問題的原因不明。

void box_warn(char *fmt,...)
{
    va_list args;
    char out[4096];

    va_start(args, fmt);
    vsprintf(out, fmt, args);
    va_end(args);

//  GtkWidget *dialog = gtk_message_dialog_new (NULL, GTK_DIALOG_MODAL,
//                                              GTK_MESSAGE_ERROR,
//                                              GTK_BUTTONS_CLOSE,
//                                              out);
//  gtk_dialog_run (GTK_DIALOG (dialog));
//  gtk_widget_destroy (dialog);
}

只要到 util.cpp 裡的 void box_warn(),uncomment 掉 GtkWidget *dialog 那一行,gcin 在 KDE 下的程式就叫不出來了。試過了 2.6.7~2.6.9 都有用。

eliu
22
Promote 0 Bookmark 02012-01-04quote  

這真的很難理解 box_warn 這個 function 只有 gcin 自己在用,沒有給 im-gcin.so & libgcin-im-client.so 用,怎麼會出現問題?

不知道 KDE 弄了什麼怪東西,是不是有改變 GTK ?

eliu
23
Promote 0 Bookmark 02012-01-04quote  

我大概知道原因了,那段 code 會造成 qt的程式 call lib-gcin-im-client 時 load gtk,看起來是不允許同時 load gtk & qt。

guest
24
Promote 0 Bookmark 02012-01-04quote  

剛才發現有些 KDE 的 lineedit widget 點滑鼠右鍵會造成那個程式 segfault。我把 backtrace 貼出來,希望會有點用處。但沒有開 debugging symbol,不過應該還是可以看出來些可疑之處。

http://pastebin.com/TwQxLTZH

hyslion
25
Promote 0 Bookmark 02012-01-04quote  

太神奇了…真的可以,囧

eliu
26
Promote 0 Bookmark 02012-01-04quote  
guest
27
Promote 0 Bookmark 02012-01-04quote  

感謝!問題解決了。

hyslion
28
Promote 0 Bookmark 02012-01-05quote  

測試完後可以用囉,謝謝eliu!!

coolcd
29
Promote 0 Bookmark 02012-01-05quote  

hyslion

我自己在ArchLinux的作法是只設定輸入法相關變數,待登入後讓IM_MODULE自己呼叫gcin出來。

可以請教 archlinux 如果使用 KDM,應該在哪裡設定環境變數嗎?

我一般習慣設在 .xinitrc,但 kdm 似乎不會去讀它

ziyawu
30
Promote 0 Bookmark 02012-01-05quote  

coolcd

 

可以請教 archlinux 如果使用 KDM,應該在哪裡設定環境變數嗎?

我一般習慣設在 .xinitrc,但 kdm 似乎不會去讀它

我是寫在「~/.xprofile」。

1,2,next

cht電腦資訊gcin
adm Find login register
views:89564