Linux切换账户(或ssh远程)执行QT程序无法输入中文

系统

  银河麒麟

前提条件:

  已经安装了 fcitx 插件,因为QTcreator本身不支持中文输入,需要插件支持;

场景1:

  一台计算机;使用普通用户(例如:user01)登录并打包一个可以执行的QT程序(我使用的是QT 5.6.3),程序中至少有一个文本输入框用于测试,其它UI组件随意;打开user01的终端,使用 ./ 执行打包好的程序(例如:testProgram),可以正常输入中文,此时在打开一个user01终端,并且使用 sudo su 切换为root用户,然后在使用 ./ 来执行testProgram,会发现文本输入框输入不了中文(已经切换到了中文输入);

场景2:

  两台计算机;A机是场景1中的计算机;在B机上使用普通用户user02登录,打开一个终端,使用 ssh user01@x.x.x.x 连接上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 脚本即可。

 

热门相关:超武穿梭   仗剑高歌   仗剑高歌   刺客之王   网游之逆天飞扬