一、问题原因
二、解决方案
1、通过whereis fcitx找到fcitx的安装位置
2、在/usr/share/fcitx/data,我们可以找到env_setup.sh,这是fcitx的环境变量安装脚本。在里面可以找到对应的配置变量的命令。
3、在/etc/bashrc中配置fcitx的环境变量,使得/etc/sudoers配置文件可以继承该环境变量
sudo gedit /etc/bashrc
# fcitx配置,使得sudo开启的文件也能使用输入法
export XMODIFIERS=“@im=fcitx”
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
4、在/etc/sudoers 中继承以上环境变量
sudo gedit /etc/sudoers
在Defaults下面追加以下命令:
Defaults:%sudo env_keep += "XMODIFIERS GTK_IM_MODULE QT_IM_MODULE"
如图所示:
5、编写 个人用户 和 sudo组 切换使用fcitx输入法的脚本,使其可执行
(1) 自己找个目录,创建 open_sudo_fcitx.sh 和 close_sudo_fcitx.sh
touch open_sudo_fcitx.sh
touch close_sudo_fcitx.sh
(2) open_sudo_fcitx.sh
#!/bin/sh
fcitx-remote -e #关闭用户层级的fcitx
sudo fcitx #开启root层级的fcitx
(3) close_sudo_fcitx.sh
#!/bin/sh
sudo fcitx-remote -e #关闭root层级的fcitx
fcitx #开启用户层级的fcitx
(4) 授予可执行权限
sudo chmod a+x open_sudo_fcitx.sh
sudo chmod a+x close_sudo_fcitx.sh
6、关闭sudo输入密码,使得以上可执行脚本免输入密码
sudo gedit /etc/sudoers
找到 %sudo,末尾的 ALL 改为 NOPASSWD:ALL 即可
7、给上面的脚本起别名
(1) 在/etc/bashrc中起别名,脚本路径修改成你自己的即可
# vim使用的是终端(键盘)输入,vim或者sudo vim都支持fcitx。
# 但是gedit和Notepad-- 在用sudo开启时,是不支持fcitx的,需要先关闭用户层级的fcitx,接着开启sudo组的fcitx
# 方可使用fcitx输入法。
# 下面把开启sudo fcitx和关闭 sudo fcitx的操作写成了两个可执行脚本。
# 每当运行sudo gedit 或者 sudo np 时,请先开启osf: osf|sudo gedit <filename>
# 退出编辑后,运行csf来关闭sudo组的fcitx,开启用户层级的fcitx。
alias osf='/opt/linux简易执行脚本/sudo_fcitx/open_sudo_fcitx.sh' # 开启sudo fcitx的运行脚本
alias csf='/opt/linux简易执行脚本/sudo_fcitx/close_sudo_fcitx.sh' # 关闭sudo fcitx的运行脚本
(2) Shell的配置文件:~/.zshrc 、 ~/.bashrc 引用/etc/bashrc
8、想要 sudo 开启应用程序后使用到fcitx输入法,请输入osf命令
此时关闭了用户层级的fcitx,启动了root层级的fcitx。
此时执行sudo gedit <filename>,可以使用fcitx输入法了
9、关闭应用程序后,我们希望在用户层级使用fcitx,请输入csf命令
参考文章:
【Linux】使用sudo运行的程序,无法输入中文的原因和解决方法_echo "lba" | sudo -s 执行qt应用程序无法输入中文-CSDN博客