系統: 銀河麒麟 前提條件: 已經安裝了 fcitx 插件,因為QTcreator本身不支持中文輸入,需要插件支持; 場景1: 一臺電腦;使用普通用戶(例如:user01)登錄並打包一個可以執行的QT程式(我使用的是QT 5.6.3),程式中至少有一個文本輸入框用於測試,其它UI組件隨意;打開us ...
系統:
銀河麒麟
前提條件:
已經安裝了 fcitx 插件,因為QTcreator本身不支持中文輸入,需要插件支持;
場景1:
一臺電腦;使用普通用戶(例如:user01)登錄並打包一個可以執行的QT程式(我使用的是QT 5.6.3),程式中至少有一個文本輸入框用於測試,其它UI組件隨意;打開user01的終端,使用 ./ 執行打包好的程式(例如:testProgram),可以正常輸入中文,此時在打開一個user01終端,並且使用 sudo su 切換為root用戶,然後在使用 ./ 來執行testProgram,會發現文本輸入框輸入不了中文(已經切換到了中文輸入);
場景2:
兩台電腦;A機是場景1中的電腦;在B機上使用普通用戶user02登錄,打開一個終端,使用 ssh [email protected] 連接上A機,進入到testProgram目錄,使用 ./ 執行testProgram,也會出現文本框輸入不了中文的情況;
解決方案(不是唯一):
在場景1的情況下:
引起該問題的主要原因是環境變數的改變引起的,主要有三個環境變數,使用 env | grep QT 和 env | grep XM 可以查看:
① QT4_IM_MODULE = fcitx
② QT_IM_MODULE = fcitx
③ XMODIFIERS = @im = fcitx
當從user01切換到root時,環境變數①②的值會從 fcitx 變為 xim,此現象就是導致無法輸入中文的主要原因;可以創建一個 test.sh 腳本,內容為:
#$!bin/bash
export DISPLAY = :0 #用來防止出現 cloud not connect to display 的錯誤;
export QT_IM_MODULE = fcitx # 經過測試,只用修改這個環境變數即可;
#fcitx start #重啟fcitx插件,先註釋掉,若此腳本不行,在重啟fcitx試試;
./path/testProgram # path是有testProgram可執行文件的路徑;
後續使用 test.sh 腳本執行那個QT程式即可;
場景2的問題也是只需要執行 test.sh 腳本即可。