解决 Debian 中 RStudio 和 Mendeley 下 Fcitx 输入法不能使用的问题 #12
Comments
楼主牛逼。Ubuntu下的这个千年老问题也靠你的办法解决了。 |
猛人! 💪 |
@yihui 竟然被谢老师钦点猛人,我可以拿去吹牛了hah。很喜欢你的博客,加了书签的。 |
哇!!谢谢大佬!!三个小时!我折腾了两天了也没整明白!知道应该重编译,无奈没用过qt完全不会弄,直接用了大佬的库太棒了!大佬可以考虑去你在RStudio Support的贴子后面更新一下你的这个repo,不然真的有点难找呢,就RStudio没加入Debian仓库,我一直以为它不开源,没想到在github上面去找,要不然可以省下不少时间的!百度搜不到github的内容的,这么好的方法,不广而告之实在是对不起大佬的一片心血呀!有时间的话,最好搬到CSDN上,可能方便更多的朋友呢! |
@panhaoyu 只是做了小小的工作。谢谢夸奖。 RStudio 团队一直不理这个问题,我这个只是个 workaround,不想再写到那里去。CSDN 排版我看不上,有帐号但是没开博客。这个本来也就是我自己方便建个博客和 repo 放点东西而已。搜技术性问题的话,Google /Bing 都比百度结果好,为什么一定要吊死在百度的树上呢。 |
唉刚刚搜一个问题,百度怎么都没有,Google解决。。真的差距这么大。。谢谢大佬指点! |
Update: Mendeley has update to 1.19.1 and solve the PDF font mess problem when reading Chinese papers. However, its bundled qt version has also updated to qt5.10.1. Actually, Qt releases its binary package, so we needn't make efforts to compile it. |
@yinflying 原 po 主大驾光临啊 |
感谢楼主@JackieMium的精彩分享。我基于楼主最后的发现,略过了QT的编译,直接在终端里运行
你有遇到这种情况吗?我的操作有没有偏离你原文的意思? |
@zenggyu 仔细看我的文章,编译 我试验了一下,只有
同时我也试验过
|
你的解答非常清晰,谢谢! 现在rstudio的github repo中的
google上显示的一些类似问题的解决方案似乎与此问题无关。这又不知道是哪出了岔子。用linux真的要经得起折腾才行。 |
UPDATE:确实是你装的 Qt 版本的原因,我用 https://s3.amazonaws.com/rstudio-buildtools/qt-unified-linux-x64-3.0.5-online.run 这个装了 Qt 5.4.2,然后 以下为原回复:@zenggyu 我看了 RStudio 的 repo,他们确实换了 qt,但是我尝试下载 https://s3.amazonaws.com/rstudio-buildtools/qt-unified-linux-x64-3.0.5-online.run 这个文件时始终都是下到中间就超时,我的网络可能连 AWS 不是很稳定。现在暂时无法尝试。 所以我现在的建议是先用 Qt-5.4.2 (你如果使用最新的 RStudio 稳定版的话应该是这个版本,当然你也可以自己在软件菜单栏 关于 里确认)试一下。同时在设置 |
多谢楼主提醒。 我想在这里补充一些关于编译 另外,大家可以到楼主发的issue上点赞、留言,可能可以提高这个issue的优先度。 |
@zenggyu 遇到和你类似的问题,我用 QtCreator 编译 fcitx-qt5 项目就能在构建生成的 |
你这就是 fcitx 开发者那个博客写的了,我也提到了。就是 A case study: how to compile a Fcitx platforminputcontext plugin for a proprietary software that uses Qt 5。 |
感谢博主. |
最新的 RStudio 版本为 1.2.1114,Qt 版本为 Qt-5.11.1。RStudio 自带的
libQt5*
文件保存在/usr/lib/rstudio/lib
下,按照之前的方法移除这些文件的办法又失效了。不得已只能又一次自己编译了。简单记录如下:
qt-opensource-linux-x64-5.11.1.run
,安装export
下PATH
和LD_LIBRARY_PATH
platforminputcontexts/libfcitxplatforminputcontextplugin.so
复制到/usr/lib/rstudio/plugins/platforminputcontexts
。最新的
libfcitxplatforminputcontextplugin.so
已经同步更新到我的 repo,不会或者懒得编译的人自己去下载吧。目前发现一种最最最最最最简单的办法。Debian 下进入
/usr/lib/rstudio/bin
目录,直接删掉所有libQt5
开头的文件和qt.conf
即可(测试时不要直接删掉,重命名备份就行了)。我的做法是:
然后再打开 RStudio 测试 Fcitx 输入法是否可用。
这个方法的原理在于,Fcitx 在 RStudio 里不能用是因为 RStudio 使用的 Qt 库版本与系统版本不同,而我们系统的 Fcitx 在编译时是链接到系统的 Qt 库版本的。而我们把 RStudio 自带的 Qt 库删掉之后会迫使 RStudio 调用系统的 Qt 库,即迫使它调用了 Fcitx 一样的版本库,所以这时候 RStudio 和其他 Qt 程序一样就能直接调用 Fcitx 本来的插件了(
libfcitxplatforminputcontextplugin.so
这个插件在 Debian 就是fcitx-frontend-qt5
这个包)。说明
这个方法并不是我想到的,来自统计之都论坛的一篇帖子: win10下Rstudio切换中文输入法问题 。感谢 @linjinzhen !
以下为更新前原文。
一直以来 QT-based App 下 Fcitx 无法输入中文的问题都让我很恼火,用的比较多的 RStudio 先后两次去 Support 发帖无果,在他们的 GitHub 也发了 Issue,他们标记了 bug 之后就啥也没干。Mendeley 也去发帖过一次,官方回复大概意思是“知道了,但是目前这个问题优先级很低”.....
网上看到过几次有人说自己编译
QT
和fcitx-qt
得到libfcitxplatforminputcontextplugin.so
放到指定位置就可以。我试过下载别人编译好的试过都没成功,自己不是很会编译啥的怕把系统组件搞乱又懒得编译.....直到前天又看到 Mendeley Fcitx Problem 这个帖子,在下面留言,po 主表示多几个 QT 也不会搞坏系统我才决定尝试下。其实以前用的是 Zotero 用来管理文献,也写过另一篇博文 #5 ,后来某一次升级之后 Zotero 就打不开了.....终端打开没有任何提示信息。可惜我整理得好好的文献库也没了。然后我就转到 Mendeley 了。
Qt 编译安装
发现 Mendeley Desktop 使用的 Qt 5.5.1 。
下载
qt-everywhere-opensource-src-5.5.1.tar.xz
并解压,进入目录。碰到一大堆报错
XCB
啥的,查了下直接加-qt-xcb
就行了,我也不知道XCB
干嘛的,这不是重点。(configure --help 可以获得编译 Qt 详尽的选项说明)
顺利同过。然后三部曲后两步:
fcitx-qt5
接下来是
fcitx-qt5
。在编译它之前要让刚刚编译好的 Qt 发挥作用,所以要改路径,我的做法也是临时export
一下,只要这个终端不关都能起作用,但是要记得后面的过程都在这个终端完成。是的,又有问题了。
Google 一下,哦,
sudo apt install extra-cmake-modules
就行了。继续:WTF???....不要急不要急,Google 一下,哦,
sudo apt install libxkbcommon-dev
。继续:哦,知道了,Google。哦,
sudo apt install fcitx-libs-dev
。好,继续:手别抖不要惯性
sudo make install
,不需要。现在
platforminputcontext
目录下应该已经有了新鲜出炉的libfcitxplatforminputcontextplugin.so
了,然后就好了:再终端打开 Mendeley 试试 Fcitx 已经可以用了。不保险,直接鼠标点点点菜单找到 Mendeley 打开输入法还没挂,OK。
RStudio
接下来一样,在 RStudio 菜单的关于里看了下,基于 Qt-5.4.0,那就下载
qt-everywhere-opensource-src-5.4.0.tar.xz
好了。以为可以收工了?怎么可能,Naive。
./configure --prefix=/opt/qt.5.4.0 -no-openssl -qt-xcb
直接报错:一头雾水,连报错信息都基本没有。二话不说,Google,靠谱的办法试试看,比如这个帖子:Build Qt Static Make Error - [SOLVED], 官方论坛官方回答,看着靠谱。哦:
还是上面那个报错....我也不知道为啥了,好吧老实点先把不知道的选项拿掉,本着对官方论坛官方回答的相信,那一堆复制过来的的选项我都没看。重新来过:
报错依然,上网一顿查,Google 看了 N 多都是交叉编译的问题,感觉很奇怪而且错误和我不完全一样。百度,各种论坛都是提问题的没有回答的。
N 久无果,中间 2~3个小时过去了。
我开始思索是不是我哪里做法有问题。
这时我突然记起来之前尝试编译 RStudio 的时候,从 RStudio 的 GitHub 里的安装依赖的脚本里看到编译 RStudio 的时候会依照里面的设置从他们自己的 AWS 服务器上下载他们精(魔)简(改)的 QT binary 的。这洋一想我直接去用他们的 QT 编译岂不是更好。二话不说去 GitHub 看他们的 QT 放在哪儿。你看他们的
rstudio/dependencies/linux/install-qt-sdk
里写的:暴力暴力,够社会。
直接自己拼接出 QtSDK-5.4.0 的地址下下来了。由于这个已经是 binary 了就不需要我再编译了,直接用就行。
然后就是跟前面差不多了,十分顺利,没出错。解压他们的 QT 放到
/opt/qt.5.4.0
,然后重新编译fictx-qt5
,得到libfcitxplatforminputcontextplugin.so
。刚刚是 Mendeley 所以最后
libfcitxplatforminputcontextplugin.so
就拷贝到/opt/mendeleydesktop/plugins/qt/plugins/platforminputcontexts/
,即谁要给谁。同理,RStudio 就应该拷贝到/usr/lib/rstudio/bin/plugins/platforminputcontexts/
了。然后试了下 RStudio 终于,Fcitx 起来了。
总结
看起来我这个基本上一个小时能解决,事实上我从昨晚到现在,用的总时间起码昨晚 3+ 小时,今天早上到现在下午起码 4+ 小时。中间我为了记录过程开了一个记事本现在 600+ 行了.....庭有枇杷树,吾妻死之年手植也,今已亭亭如盖矣。
但是我仍然很开心,我觉得我知道了一些新东西,踩了一些新的坑,问题最后也解决了(大概下次谁更新了可能会再来一次,但下次应该就轻车熟路了)。
哦对了,我自己编译的
libfcitxplatforminputcontextplugin.so
我建了一个 repo,也许谁要用的话可以试一试,在知乎上碰到以为用 Ubuntu 16.04 的知友用了我编译的文件解决了 ta 的输入法问题,我表示很开心。说了这么多,总结:
放在最后不代表不重要
20180113 更新:有人告诉我其实 Fcitx 的一位开发者之前写过类似的东西:A case study: how to compile a Fcitx platforminputcontext plugin for a proprietary software that uses Qt 5。好吧,怪我之前为啥没看到啊....
20180205 更新:详细思考了下整个过程,中间看了一些资料,也再一次尝试编译 Qt,由于这时候 RStudio 已经更新过,Qt 也更新为 Qt-5.4.2。简单记录过程如下:
configure
:在
/opt
建立相应文件夹后,再建立一个指向这个文件夹的软链接qt5
。这么做的理由在 BLFS 的 HandBook 中编译 Qt5 有说明:Qt-5.4.2 ,深以为然。具体参数的含义还是去看 help 输出。
bin
目录加到PATH
里,这里的建议还是export
这样做。比较重要的是
LD_LIBRARY_PATH
的问题。首先看看最终我们需要的
libfcitxplatforminputcontextplugin.so
到底需要些什么:发现对于对应 Qt 的话,需要
libQt5Gui.so.5
,libQt5DBus.so.5
和libQt5Core.so.5
这三个库。看看系统到底有没有这 3 个库呢:
发现一个很有意思的事情:我们要得库文件系统
/usr/lib/x86_64-linux-gnu/
下有一份,Miniconda 有一份,我们编译出的/opt/qt.5.5.1/lib/
有一份,还有哪里呢,/usr/lib/rstudio/bin/
和/opt/mendeleydesktop/lib/qt/
。这个就有意思了,就是说库其实好多份,好,系统有的和 Miniconda 的不说,版本不对,我们自己编译的不说。软件自己竟然带了一份,那就有个便利了,那就是说理论上我们编译这些库完全是多此一举,因为我们完全可以直接链接到软件自带的库啊,这样的话不用说库版本绝对没问题。所以我们需要干嘛呢,
export LD_LIBRARY_PATH
要么使用自己编译出来的 Qt 库,要么使用软件自己带的库。我试验了下,两种办法都可以。我仔细看了之前的博客,不知道为什么竟然没有提到
LD_LIBRARY_PATH
的事情,但是最后libfcitxplatforminputcontextplugin.so
链接到了/opt
下我自己编译的库文件,想来我中间可能export
过但是自己忘了,现在才发现这个才是最重要的步骤啊。惭愧。The text was updated successfully, but these errors were encountered: