修复 Intellij IDEA 无法使用中文输入法

踩坑记录

TL;DR

系统: ArchLinux
一切的大前提: 环境变量设置正确(GTK_IM_MODULE…)

  1. ibus 用户可以试试迁移到 fcitx
  2. fcitx 如果不行可能得自己编译一个 patched 的 JetBrains Runtime

    开始

    IDEA 没法输入中文的问题其实在我系统上盘踞很久了,一会能用一会不能的….所以我打算动手整顿他

设置环境变量

学着 ArchLinux Wiki,我首先往 ~/.pam_environment 加了这些东西:

1
2
3
GTK_IM_MODULE DEFAULT=ibus
QT_IM_MODULE DEFAULT=ibus
XMODIFIERS DEFAULT=\@im=ibus

然而并没有什么效果… 加到 idea.sh 头上也不行,qtconfig-qt4 也改过了,没啥效果

修改键盘布局

压根没变化

更换输入法

于是我尝试更换到 fcitx (
更换到 fcitx 之后似乎已经可以在 idea 窗口里面召唤出 fcitx 了,但是好像还是输入不了中文

自己编译

在 archlinuxcn 论坛上找到了一个回复:

其实解决这个问题的过程还挺曲折的,我不打算直接给出顺利的解决方案,所以建议先看完,再动手操作,否则会踩老坑,以下是折腾记录:
问题:fcitx搜狗输入法在idea环境中文输入不跟随光标
解决方案参考链接: https://blog.csdn.net/u011166277/articl … /106287587
辛酸史:
先下载JetBrainsRuntime源码,https://github.com/JetBrains/JetBrainsRuntime
因为github很慢,所以到https://gitee.com/上导入github进行下载,还有两种下载方式,教程都在https://zhuanlan.zhihu.com/p/121015450
代下载网站https://shrill-pond-3e81.hunsh.workers.dev/ http://g.widyun.com/ 网速慢的话容易过期
下载完JetBrainsRuntime之后下载idea.patch https://github.com/prehonor/myJetBrainsRuntime
然后把idea.patch拷贝到JetBrainsRuntime根目录
git checkout cfc3e87f2ac27a0b8c78c729c113aa52535feff6 (这一步经过测试,并不需要,用最新的就好)
git apply idea.patch
然后根据官方教程编译就行了,但是,别信官方的,经过测试docker打包出现未知错误,还不知道咋查,ubuntu版本低了还不行,一会儿404,一会儿缺jdk11,拖过来一个jdk11又说glibc版本不够,安装glibc直接整个系统挂了,所有命令都不能用了,所以还是开个虚拟机,直接上ubuntu20吧,然后按照官方的教程编译
$ sudo apt-get install autoconf make build-essential libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libxrandr-dev libcups2-dev libfontconfig1-dev libasound2-dev
$ cd JetBrainsRuntime
$ sh ./configure –disable-warnings-as-errors
$ make images
你以为这就完了吗?中途会直接出现killed错误,所以,内存至少2G,swap单开一个3G的
$ dd if=/dev/zero of=swapfile bs=1024 count=310241024
$ sudo mkswap swapfile
$ sudo swapon swapfile
$ free -h
然后照常make images,编译完了之后,会生成jdk,从虚拟机中拷贝出来
sudo scp -o PasswordAuthentication=yes -r 用户名@虚拟机ip:/home/用户名/JetBrainsRuntime/build/linux-x86_64-normal-server-release/images/jdk /usr/lib/jvm/java-11.0.7-jetbrains
如果你以为按照教程里export IDEA_JDK=/usr/lib/jvm/java-11.0.7-jetbrains 就可以启动,那就又错了,还会报错
/usr/lib/jvm/java-11.0.7-jetbrains/bin/java: symbol lookup error: /usr/lib/jvm/java-11.0.7-jetbrains/lib/libnio.so: undefined symbol: initInetAddressIDs
你以为只要ldd 看到libjvm.so => not found就应该把/usr/lib/jvm/java-11.0.7-jetbrains/lib/server/libjvm.so 加到环境变量就行了?不,亲自试验过了,没用,对比了一下正常启动的idea,发现libnet.so路径不对,正常要取jdk里的,于是又加入环境变量,这回启动两次居然直接crash了
最后,经过一系列折腾,搞出一个最佳解决办法,修改启动文件
$ sudo vim /opt/intellij-idea-ultimate-edition/bin/idea.sh
在开头加上
export LD_LIBRARY_PATH=/usr/lib/jvm/java-11.0.7-jetbrains/lib:$LD_LIBRARY_PATH && export IDEA_JDK=/usr/lib/jvm/java-11.0.7-jetbrain
这回终于能启动成功了,编译好的jdk最好保存一下,别再这么折腾了

实际操作 ( px 是透明代理 ):

1
2
3
4
5
6
7
px git clone https://github.com/JetBrains/JetBrainsRuntime
cd JetBrainsRuntime
px wget https://raw.githubusercontent.com/prehonor/myJetBrainsRuntime/master/idea.patch
git apply ./idea.patch
sh ./configure --disable-warnings-as-errors
make images #其实这一步内存足够就不会出问题,不一定需要开swap什么的 编译使用的是liberica-11-openjdk
sudo mv ./build/linux-<tab>/images/jdk /usr/lib/jvm/jetbrains-11-openjdk

然后打开 IDEA,安装 Choose Runtime 插件
添加自定义jdk,使用你刚编译的jetbrains runtime启动即可。(笔者机器上无报错)
此处提供版本 jb11_0_11-b1504.12 的构建修改版(x86_64): 下载

修复 Intellij IDEA 无法使用中文输入法

https://nstd.sfclub.cc/2021/07/18/Idea/

作者

iceBear67

发布于

2021-07-18

更新于

2021-07-18

许可协议

评论