Linux切換賬戶(或ssh遠(yuǎn)程)執(zhí)行QT程序無法輸入中文
系統(tǒng):
銀河麒麟
前提條件:
已經(jīng)安裝了 fcitx 插件,因?yàn)镼Tcreator本身不支持中文輸入,需要插件支持;
場景1:
一臺計(jì)算機(jī);使用普通用戶(例如:user01)登錄并打包一個可以執(zhí)行的QT程序(我使用的是QT 5.6.3),程序中至少有一個文本輸入框用于測試,其它UI組件隨意;打開user01的終端,使用 ./ 執(zhí)行打包好的程序(例如:testProgram),可以正常輸入中文,此時在打開一個user01終端,并且使用 sudo su 切換為root用戶,然后在使用 ./ 來執(zhí)行testProgram,會發(fā)現(xiàn)文本輸入框輸入不了中文(已經(jīng)切換到了中文輸入);
場景2:
兩臺計(jì)算機(jī);A機(jī)是場景1中的計(jì)算機(jī);在B機(jī)上使用普通用戶user02登錄,打開一個終端,使用 ssh user01@x.x.x.x 連接上A機(jī),進(jìn)入到testProgram目錄,使用 ./ 執(zhí)行testProgram,也會出現(xiàn)文本框輸入不了中文的情況;
?
解決方案(不是唯一):
在場景1的情況下:
引起該問題的主要原因是環(huán)境變量的改變引起的,主要有三個環(huán)境變量,使用 env | grep QT? 和 env | grep XM 可以查看:
① QT4_IM_MODULE = fcitx?
② QT_IM_MODULE = fcitx?
③ XMODIFIERS = @im = fcitx?
當(dāng)從user01切換到root時,環(huán)境變量①②的值會從 fcitx 變?yōu)?xim,此現(xiàn)象就是導(dǎo)致無法輸入中文的主要原因;可以創(chuàng)建一個 test.sh 腳本,內(nèi)容為:
?
#$!bin/bash
export DISPLAY = :0? #用來防止出現(xiàn) cloud not connect to display 的錯誤;
export QT_IM_MODULE = fcitx? # 經(jīng)過測試,只用修改這個環(huán)境變量即可;
#fcitx start?? #重啟fcitx插件,先注釋掉,若此腳本不行,在重啟fcitx試試;
./path/testProgram? # path是有testProgram可執(zhí)行文件的路徑;
?
后續(xù)使用 test.sh 腳本執(zhí)行那個QT程序即可;
場景2的問題也是只需要執(zhí)行 test.sh 腳本即可。