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 [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 脚本即可。