討論這篇「如何讓gcin開機後不多次執行」 [論壇 - Ubuntu 與中文]
正在瀏覽:
1 名遊客
討論這篇「如何讓gcin開機後不多次執行」 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 901
![]() |
PS: 剛重新做實驗,有新發現,以下有些說法,可能會導致誤導,請搭配「#6」的說明。
======================================== 剛看到這篇「如何讓gcin開機後不多次執行」,做了一些探索, 還沒研究透徹,先紀錄目前發現到的一些線索。 我知道該篇參與討論的人,也會來這裡觀看, 我懶得再申請那裡的帳號,也想在這裡討論, 所以先說聲「歹勢」,我就直接在這回覆了。 (後來有發現,有Guest發言的機制,所以就留下連結,連回這裡了) 以下測試環境,「Ubuntu 16.04 (64位元) 英文界面」。 我一開始有用之前trace過「im-config」和「fcitx」的流程,再trace一遍, 那個第一個process「/usr/bin/gcin」應該是從「/usr/share/im-config/data/26_gcin.rc」執行的。 所以我先把「/usr/share/upstart/sessions/im-config.conf」拿掉,這樣就不會跑第一個「/usr/bin/gcin」了。 不過第二個Process 的「gcin」,重開機還是會跑出來。 所以我想了一個土法煉鋼的方法,寫了一個「shell script」來取代「/usr/bin/gcin」,來找線索。 若其他大德有比較好trace的方法,煩請不吝提供,感恩先,小弟不才,目前只會這個方式。 而我也不懂im的相關技術和概念,我只能就目前會的來提出,歹勢拉! 使用「bash who call」當關鍵字查詢, 找到「一篇參考文章」。 簡單寫了scirpt,內容如下
然後重開機,就會看到類似如下面的log
然後執行
顯示
執行
顯示
也就是「/usr/lib/x86_64-linux-gnu/hud/hud-service」是屬於「hud」這個套件 然後執行下面指令,觀看「hud」這個套件,有那些檔案安裝在系統上。
顯示
然後來做個小實驗(以下非解法) 把「/usr/share/upstart/sessions/hud.conf」和「/usr/share/dbus-1/services/com.canonical.hud.service」這兩個檔移走。
然後重開機,就會發現第二個Process的「gcin」,就不會再出現了。 剩下的沒再深究了,先紀錄到此,其他有了解的人,歡迎加入討論,感恩。 因為有些疑問,待研究的 * 就是直接下指令執行gcin,好像會被檔掉,不允許重複執行,所以就不確定怎麼的方式才能重複執行。 * 「hud」這個套件,那一段流程會跑「im (gcin)」? (這個不確定,我要重灌再試試,是否真的跟這個套件有關) * 另外開軟體,也會跑「im (gcin)」, 例如「firefox」或「gonome-terminal」,這個在log都會跑出來,剛log只有列一開機的時候。 所以我測試的時候,使用「Xterm」來打指令。又想起「這篇討論 (#28)」了,Orz... 報告完畢 ![]() 額外一提一個輔助指令「pstree」。 可以執行下面指令看顯示結果
另外裡面提到的「/proc」,可以執行下面指令,找到相關說明 $ man 5 proc 我先來複習研讀「鳥哥的 Linux 私房菜 / 第十六章、程序管理與 SELinux 初探」好了 :p
2016/8/2 17:53
|
||||||||||
![]() |
回覆: 討論這篇「如何讓gcin開機後不多次執行」 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員四級
![]() ![]() 註冊日期:
2015/9/29 21:19 所屬群組:
已註冊使用者 等級: 16
HP : 0 / 380
![]() |
我比較想知道的是
套件依賴, 有沒有類似 pstree 可以在終端機列出樹狀檢視的指令 ![]() 例如: 套件 bumblebee 依賴有 libbsd0 libc6 libglib2.0-0 ... 然後在終端機顯示 bumblebee 依賴套件的樹狀圖變成: bumblebee ├─ libbsd0 ├─ libc6 └─ libglib2.0-0 類似這樣的指令 ![]()
2016/8/2 18:59
|
||||||||||
![]() |
回覆: 討論這篇「如何讓gcin開機後不多次執行」 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 901
![]() |
姜至奐 寫到: 我也蠻想知道的,因為之前「有一篇討論」,我有這樣的需求。 所以那時候有使用「apt-get debug dependencies」,找到「一篇文章」, 我當時有使用該篇提到的技巧,來找線索。 您可以參考看看,不過裡面提到的技巧,應該沒我們預期想要的樹狀圖就是了。 ![]()
2016/8/2 19:33
|
||||||||||
![]() |
回覆: 討論這篇「如何讓gcin開機後不多次執行」 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
管理員
![]() ![]() 註冊日期:
2011/3/11 6:32 所屬群組:
討論區管理群 等級: 44
HP : 216 / 1084
![]() |
2016/8/2 23:22
|
||||||||||
本篇發表文章以「創用CC BY 3.0 或更新之台灣地區版本」授權條款釋出,如何使用敬請參考
Creative Commons — 姓名標示 3.0 台灣 — CC BY 3.0 TW http://creativecommons.org/licenses/by/3.0/tw/ 「你不懂的東西就不要亂講,被懂得人看破手腳就算了,騙不懂的人誤導別人,還要別人把你當成大師,這就真的是說不過去了。」 by Allen Own 出處 http://www.plurk.com/p/i4uogm 自由知識創作平台介紹 https://docs.google.com/document/d/1MGG6lW_0qCgH4U785R-IwSc_INdoBGej1l-JxiA4gPE 如何建立新的自由知識創作平台文件 https://docs.google.com/document/d/11NdzOW2lGYksfyQIcPMPye5tlmj1J0QTkgPTmQvIvKA |
|||||||||||
![]() |
回覆: 討論這篇「如何讓gcin開機後不多次執行」 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 901
![]() |
V字龍 寫到: 收到,讚喔,太感恩了, 晚點來試試 ![]() # 連結整理 ## 套件 * apt-rdepends ## 指令 * apt-rdepends ## 腳本 * https://gist.github.com/damphat/6214499#file-apt-rdepends-tree * https://gist.github.com/sr105/09d2534d467fcd8b881e#file-apt-rdepends-tree ## 查詢 * apt-rdepends site:https:/ /www.ubuntu-tw.org/
2016/8/3 10:03
|
||||||||||
![]() |
回覆: 討論這篇「如何讓gcin開機後不多次執行」 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 901
![]() |
今天使用全新系統來重新測試,有新的發現
測試環境跟上面一樣是「Ubuntu 16.04 (64位元) 英文界面」。 然後這次測試有一個要特別注意的事項,上面最後有稍微提到, 就是「下指令」的時候,要用「xterm」來測試,不要用「gnome-terminal」,因為這會影響測試結果。 為了測試方便,先把下面幾個程式「Lock to Launcher」, * xterm * gnome-terminal * gedit 上面取代「/usr/bin/gcin」的「scirpt」稍微再改寫一下,內容如下 主要多加了紀錄「$XMODIFIERS」當下的值。
然後重開機,再測試。 觀看「~/trace.txt」內容, 顯示如下,
可以先來做一些測試
再來,先啟動「gedit」, 再次觀看「~/tract.txt」, 會發現多了下面的資訊。
可以看到「$XMODIFIERS」的值是「@im=gcin」。 注意上面的資訊,會重複,因為目前「/usr/bin/gcin」改寫成「script」,所以「gcin」這個「process」執行完就離開,所以我猜「xim」的機制會再次呼叫「gcin」,這一段的實做細節我目前還不懂,只有從「這篇 (#28)」的討論看到的概念。 然後執行
顯示
然後再開啟「gnome-terminal」 再次觀看「~/tract.txt」, 會發現多了下面的資訊。
可以看到「$XMODIFIERS」的值是「@im=ibus」。 然後執行
顯示
再來你可以自行測試「firefox」和「nautilus」, 「firefox」是「@im=gcin」, 「nautilus」則是「@im=ibus」。 接下來把「/usr/bin/gcin」還原,再重新測試, 分別執行上面的程式,你就會發現會跑出來「gcin」這個「process」,注意非「/usr/bin/gcin」。 然後你觀看「gcin」的「/proc/$pid/environ」,「gcin」的「XMODIFIERS」會根據該啟動程式的「XMODIFIERS」而定。 我有測試過「Ubuntu 16.04 (64位元) 中文界面」結果也是如此。 而測試「Xubuntu 16.04 (64位元) 英文界面」,上面四個程式結果都是「@im=gcin」,而且不會有重複gcin執行的狀況發生。 ==================================================== 接下來另一個發現, 因為一直在想,啟動程式,為啥「XMODIFIERS」會被改掉? 所以看到「nautilus」有一些聯想,讓我發現下面的情況, 先執行
然後找到「nautilus」,會看到掛在「gnome-session-bin」底下。 所以一樣使用上面的方法,觀察「/proc」那, 可以看到「gnome-session-bin」,其「XMODIFIERS」的值是「@im=gcin」。 然後看到掛在「gnome-session-bin」底下的程式,例如「nautilus」,「nm-applet」,其「XMODIFIERS」的值是「@im=ibus」。 至於為啥會如此,尚未探究,先紀錄到此, ![]()
2016/8/3 22:36
|
||||||||||
![]() |
回覆: 討論這篇「如何讓gcin開機後不多次執行」 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員五級
![]() ![]() 註冊日期:
2012/4/22 10:50 所屬群組:
已註冊使用者 等級: 37
HP : 0 / 901
![]() |
找到一個線索
執行
會下載「gnome-session-bin」的「Source Package: gnome-session」,並且解開。 執行
顯示 gnome-session-3.18.1.2/gnome-session/main.c: gchar *ibus_path; gnome-session-3.18.1.2/gnome-session/main.c: ibus_path = g_find_program_in_path("ibus-daemon"); gnome-session-3.18.1.2/gnome-session/main.c: if (ibus_path) { gnome-session-3.18.1.2/gnome-session/main.c: gsm_util_setenv ("QT_IM_MODULE", "ibus"); gnome-session-3.18.1.2/gnome-session/main.c: gsm_util_setenv ("XMODIFIERS", "@im=ibus"); gnome-session-3.18.1.2/gnome-session/main.c: g_free (ibus_path); 從「gnome-session-3.18.1.2/gnome-session/main.c」 可以看到一段程式碼如下 (github參考連結) gchar *ibus_path; ibus_path = g_find_program_in_path("ibus-daemon"); if (ibus_path) { gsm_util_setenv ("QT_IM_MODULE", "ibus"); gsm_util_setenv ("XMODIFIERS", "@im=ibus"); } g_free (ibus_path); ================================================================================ 來做個小實驗, 把「/usr/bin/ibus-daemon」移走, 重開機, 照上面提的方法,觀看「/proc」那, 分別觀看「gnome-terminal-server(先執行gnome-terminal)」,「nm-applet」,「nautilus」 就可以看到「XMODIFIERS」的值,都是「@im=gcin」。 「gcin」那個「process」也不會再重複跑出來了。 報告完畢 ![]() ================================================================================ ## 相關討論 * unity panel 出現兩組gcin icons * 如何讓gcin開機後不多次執行 * gcin ubuntu 1604 unity <-- 結論在此討論串的回覆#2 * 砍掉gcin後會自動執行? * 回覆: 新手求解 ubuntu gnome 已安裝gcin 卻無法使用 * 回覆: 裝了 ubuntu 16.04 lts 64位元版 一直無法輸入中文 ## 實驗專案 簡單寫了兩個「shell script」,可以幫助了解相關的執行模型。 ================================================================================ 後記 (2017-03-09): 這個問題,後來的版本應該是有被修正了,請參考「這篇」。 後記 (2022-05-24): 若ibus同時存在,如何解決? ================================================================================ ![]()
2016/8/3 23:59
|
||||||||||
![]() |
回覆: 討論這篇「如何讓gcin開機後不多次執行」 |
|||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
會員二級
![]() ![]() 註冊日期:
2013/11/7 9:24 所屬群組:
已註冊使用者 等級: 8
HP : 0 / 187
![]() |
幾乎已經確認在16.04+gcin 2.8.4版的組合下,會出現上面討論的主題---多個gcin的process。
由於開發者釋出gcin 2.8.5,於是立馬將它重新編譯後測試,這個問題完全消失了!不知是不是這個版本的修正還是其它的原因? 有一樣問題的人可以嘗試看看,這樣也好確認是不是和我的情況一樣!如果是的話就解決了這一個長久以來的問題!至少,我目前是用得非常好,再也不會因為這個問題而造成gcin不定時掛掉的情況!
2017/2/23 15:41
|
||||||||||
![]() |
您可以查看帖子.
您不可發帖.
您不可回覆.
您不可編輯自己的帖子.
您不可刪除自己的帖子.
您不可發起投票調查.
您不可在投票調查中投票.
您不可上傳附件.
您不可不經審核直接發帖.