尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

CentOS 7安装搜狗输入法:fcitx框架与deb转rpm完整实战指南

CentOS 7安装搜狗输入法:fcitx框架与deb转rpm完整实战指南 CentOS 7上装搜狗输入法我一开始也觉得是自找麻烦。搜狗Linux版官方只提供deb安装包默认适配Ubuntu那套体系和CentOS 7的RPM生态玩不到一块儿去。但真到了每天要写中文文档、回中文邮件、在技术社区里长回复的时候英文输入法顶着用特别耽误事这麻烦就值得折腾了。这篇文章把从下载安装包、处理格式转换、配置fcitx环境变量到最终能正常打字的完整过程都摊开讲过程和踩过的坑一个不落适合用CentOS 7桌面环境、又不想放弃搜狗输入法的朋友参考。1. 项目概述与整体思路拆解1.1 为什么CentOS 7装搜狗输入法会这么麻烦搜狗输入法Linux版官方发布的一直是deb包这个包是为Ubuntu、Debian这类Debian系发行版打的。CentOS 7属于RedHat系包管理用的是rpm和yum两边的目录规范、依赖库、服务管理方式都有差异所以想直接双击安装基本不可能。从根上说搜狗输入法Linux版并不是一个独立跑起来的程序它必须挂在输入法框架上运行。搜狗官方的deb包默认依赖的是fcitx这套框架而CentOS 7默认桌面环境里系统自带的输入法框架是ibus。一边是软件要fcitx一边是系统在跑ibus两套框架互相抢输入事件这也是很多人装上以后发现一直打不出中文的根本原因。搞清楚这层关系整个安装思路就清晰了先把fcitx这套底座搭起来再把搜狗的deb包装成CentOS 7能认的rpm格式最后让系统默认用fcitx接管输入。只要这三个环节不出错装搜狗也就是几分钟的事。1.2 三条安装路线对比我选了哪条路线A用alien工具把deb直接转成rpm安装包。alien是个格式转换工具能把Debian系的deb包转成RedHat系的rpm包转换之后再用rpm -ivh安装。路线B手动解压deb包把里面的文件按目录结构复制到系统对应位置。deb包本质是个压缩归档可以手动解压后把usr/下的内容复制到/usr/下再用配置文件让系统识别。路线C找第三方编译好的rpm包。网上有一些人自己打包的搜狗输入法rpm直接拿来用。问题是非官方产物版本老旧不说还可能带不明依赖不太放心。路线原理优点缺点适合人群alien转换deb转rpm再安装操作简单流程简短依赖关系可能不完整有一定Linux经验的人手动解压解压后复制文件不受rpm依赖限制兜底稳卸载时需手动清理想彻底搞清楚文件结构的人第三方rpm网上现成包直接装省事版本老、来源不明有风险不推荐我最终用的是A为主、B为辅的思路优先用alien转换遇到转换后依赖缺失或装不上的情况再用手动解压的方式补文件。这两条路都不需要动系统的核心库风险相对可控出现问题也好排查。2. 环境准备桌面、fcitx与基础依赖2.1 没有桌面环境先解决图形界面CentOS 7服务器一般是纯命令行没有图形界面输入法自然无从谈起。如果你是在VMware虚拟机里装的CentOS 7用于学习或办公安装时如果选择了Minimal或Server默认也是没有桌面的。需要先补上GNOME桌面。yum install epel-release -y yum groupinstall -y GNOME Desktop systemctl set-default graphical.target rebootgroupinstall会装一大堆软件包耗时比较长这属于正常现象。装完之后重启系统会默认进入图形登录界面。特别提醒一下VMware虚拟机场景建议顺手装好open-vm-tools鼠标在宿主机和虚拟机之间切换、分辨率自适应会舒服很多不然你后面配置输入法时鼠标来回飘都够烦的。yum install -y open-vm-tools2.2 安装fcitx框架和配套组件fcitxFree Chinese Input Toy for X是一个老牌开源输入法框架支持拼音、五笔、双拼等多种输入方式。搜狗输入法Linux版的deb包里有几条硬依赖比如libfcitx、fcitx-libs这些先装好框架再装搜狗依赖关系才满足。yum install -y fcitx fcitx-configtool fcitx-table fcitx-qt5这里说一下几个包的作用。fcitx是主框架fcitx-configtool是图形化配置工具fcitx-table提供码表类输入法支持fcitx-qt5是让基于Qt5的软件能调用fcitx输入法的桥接库。后面这个包特别容易被忽略等你发现WPS或网易云音乐里怎么都调不出中文输入法时多半就是缺了它。如果yum安装时报没有可用软件包大概率是EPEL源没配好。重新执行第一步的epel-release安装再yum clean all清一下缓存基本就能解决。2.3 中文字体与语言环境输入法能调出来但显示成口口口口那是字体缺失。建议顺手装一套开源中文字体文泉驿微米黑是Linux桌面下最常见的免费中文字体UI界面显示效果比较耐看。yum install -y wqy-microhei-fonts wqy-zenhei-fonts另外在系统设置的区域和语言里把语言改成汉语中国。这项不是必须的但部分依赖locale的软件对中文支持会更好也能减少搜狗输入法面板出现乱码的概率。如果你不想整个系统都切成中文至少保证用户目录下的locale和桌面环境保持一致能少踩不少坑。3. 搜狗输入法安装实操全流程3.1 下载搜狗输入法Linux版deb安装包打开搜狗输入法官网Linux版页面下载64位deb安装包。CentOS 7基本都是x86_64架构下载后用file命令确认一下文件格式。file sogoupinyin_*.deb正常情况下会显示Debian binary package。这一步看着多余但我在不同环境里见过有人误下成Windows版压缩包解压半天发现不是那么回事养成先确认文件类型的习惯能省很多时间。3.2 用alien把deb转成rpmyum install -y alien alien --to-rpm --scripts sogoupinyin_*.debalien转换完成后当前目录会出现一个sogoupinyin-*.rpm文件。原理是把deb包里的文件路径映射成rpm包路径再把依赖关系改写掉。但alien对依赖关系的处理并不完美转换出来的rpm包在安装时可能会报缺依赖最常见的是缺libQtWebKit还有一些fcitx关联库。遇到这种报错可以先强行忽略依赖安装或者把缺的库单独补齐。rpm -ivh sogoupinyin-*.rpm --nodeps用--nodeps装完以后接下来到fcitx配置里手动添加输入法。这里解释一下为什么敢用--nodeps因为fcitx的底层环境我们已经装好了alien识别不到的部分只是它自己转换能力有限并不代表系统里真没有稍微胆大心细一点问题不大。3.3 rpm安装失败时用手动解压兜底实际操作中alien转换出来的rpm在部分CentOS 7小版本上会安装失败报错信息五花八门。这种情况不用慌换手动解压路线。mkdir -p /tmp/sogou ar -x sogoupinyin_*.deb tar -xf data.tar.xz -C /tmp/sogou cp -a /tmp/sogou/usr/* /usr/deb包其实是一个ar格式的归档data.tar.xz里面才是真正的文件内容。把解压出来的usr目录内容直接覆盖到系统的/usr目录相当于把文件按原始布局放好了。这种方式不走rpm依赖管理装完不会有依赖报错但也有个问题卸载的时候得自己删文件。作为兜底方案足够了。文件复制完后验证一下关键文件是否到位ls /usr/lib/ | grep sogou ls /usr/share/fcitx/ | grep sogou只要能找到libsogou相关的动态库和fcitx插件目录后面基本就顺了。如果发现lib目录下没有东西可能是64位系统把文件放到了/usr/lib64搜一下换个目录复制即可。3.4 配置环境变量让系统默认使用fcitx这一步是整个安装过程中最容易被忽略、也最影响成败的地方。光把软件装上不够系统不会自动知道你想用fcitx接管输入。需要配置环境变量告诉GTK和Qt应用该用哪个输入法模块。推荐写入用户目录下的~/.xprofile文件不存在就新建cat ~/.xprofile EOF export GTK_IM_MODULEfcitx export QT_IM_MODULEfcitx export XMODIFIERSimfcitx EOF有教程写~/.bashrc也有写/etc/profile的。从实际表现看~/.xprofile在图形登录时被读取的时机更早对桌面环境更有效。~/.bashrc在每次打开终端时都会加载反而可能造成变量反复导出虽然一般没大碍但不够干净。写完以后注销重新登录让变量生效。三个变量各管一摊GTK_IM_MODULE告诉GTK程序文件管理器、浏览器等用fcitxQT_IM_MODULE对应Qt程序XMODIFIERS则是对老式XIM协议程序的兜底。3.5 设置fcitx开机自启动为了让重启后不用每次手动敲fcitx命令把它加到桌面自启动项。cp /etc/xdg/autostart/fcitx.desktop ~/.config/autostart/如果找不到这个文件也可以自己在~/.config/autostart/下建一个fcitx.desktop指向/usr/bin/fcitx。mkdir -p ~/.config/autostart cat ~/.config/autostart/fcitx.desktop EOF [Desktop Entry] TypeApplication NameFcitx Execfcitx X-GNOME-Autostart-enabledtrue EOF设置完以后重启系统fcitx会自动拉起输入法也就跟着生效了。这里有个细节要留意自启动文件里的Exec路径最好写成/usr/bin/fcitx这样的绝对路径。有的系统PATH里不包含/usr/bin写成fcitx启动会失败你在桌面环境里怎么点都没反应排查半天发现是路径问题。4. 输入法配置、切换与日常调优4.1 启动fcitx并把搜狗添加到输入法列表重启后先确认fcitx是否在运行ps -ef | grep fcitx如果没有进程手动执行fcitx -d启动。然后打开fcitx配置工具fcitx-configtool在“输入法”标签页把搜狗输入法从左侧候选列表添加到右侧。默认情况下搜狗输入法在fcitx里显示为Sogou Pinyin或搜狗拼音。添加完以后用CtrlSpace切换输入法就能在中文和英文之间切换了。如果你打开配置工具发现左侧列表里根本没有搜狗先别急着重装。检查一下~/.config目录下有没有sogou相关目录以及/usr/share/fcitx/addon或/usr/lib/fcitx下有没有搜狗对应的插件文件。很多时候只是因为手动解压时文件复制路径不对重新复制一次就好。4.2 搜狗输入法面板与词库设置搜狗输入法首次启动会询问是否同步词库这个和Windows版一样登录搜狗账号可以同步个人词库日常使用建议开上。输入法右上角的功能菜单里有属性设置可以调整候选词个数、模糊音、双拼方案等。我习惯把候选词数量调成9个减少翻页频率打字节奏能顺不少。搜狗输入法在Linux版上支持的主要功能包括云词库、细胞词库、皮肤切换和简繁切换跟Windows版体验差距已经很小了。唯一的遗憾是部分高级功能依赖特定版本CentOS上如果发现某个设置项点了没反应可以先看看是不是搜狗版本太老。4.3 快捷键冲突与VMware虚拟机里的特殊处理CtrlSpace是fcitx默认的切换键但VMware虚拟机里CtrlSpace有时会被宿主系统拦截。如果你在Windows宿主机里按CtrlSpace没反应先改VMware的快捷键设置把宿主机的输入法切换从CtrlSpace改为其它组合比如CtrlShift。这一步非常隐蔽。我在虚拟机里折腾半天最后发现是VMware把CtrlSpace吃掉了。在VMware Workstation的“编辑-偏好设置-快捷键”里把切换输入法相关快捷键清空或改成别的组合改完后重新进入虚拟机fcitx的CtrlSpace就正常了。VirtualBox里也有类似的宿主键冲突问题排查思路相同。4.4 保留备用输入法防止搜狗抽风搜狗输入法自带词库能力很强但离线状态下偶尔会遇到生僻词。我习惯在系统里同时保留fcitx自带的拼音输入法作为备用。在fcitx配置里添加Pinyin需要时用CtrlShift在拼音和搜狗之间切换。双保险的好处是遇到搜狗候选词面板不刷新、云词库连不上等小问题时至少还能打中文。这个备用方案虽然简单但在演示或写文档的关键时刻能帮你顶住尴尬场面。5. 常见问题与排查技巧实录5.1 问题速查表问题现象可能原因解决方案安装rpm报缺少依赖alien转出来的依赖不完整rpm -ivh --nodeps 强行安装再手动补库fcitx启动后任务栏无输入法图标fcitx进程没起来或自启动失效检查~/.config/autostart手动执行fcitx -d输入法列表里没有搜狗文件没被正确识别重新复制libsogou相关文件检查解压路径切换键CtrlSpace无效被VMware或宿主系统占用修改VMware快捷键或在fcitx配置里改切换键能调出搜狗但打出的是英文环境变量没生效检查~/.xprofile注销重新登录Qt程序无法使用输入法缺少fcitx-qt5yum install fcitx-qt5输入文字显示为方块缺中文字体yum install wqy-microhei-fonts搜狗面板白屏输入法框架冲突停用系统自带ibus框架5.2 实战排查案例fcitx进程起来了但输入法面板空白这个案例比较经典。一次我帮同事在虚拟机里排查fcitx进程是有的输入法配置工具也能打开但候选词面板一片空白怎么敲都没反应。检查了一圈发现他之前装了ibus系统里有两个输入法框架在同时运行两个框架抢同一个输入事件谁也没完全拿到控制权。处理方法是把ibus相关组件停用并把环境变量里残留的ibus配置清理干净。gsettings set org.gnome.settings-daemon.plugins.keyboard active false关掉后重装环境变量注销重新登录fcitx恢复正常。需要说明的是在GNOME 3的不同版本里这个gsettings键值的位置略有差异如果你找不到可以搜索gnome shell扩展里和keyboard相关的插件把它停掉也行。核心思路始终是让桌面环境不要额外接管键盘输入事件把控制权完全交给fcitx。5.3 一次完整卸载重装的排障记录还有一次我在升级搜狗版本后输入法直接消失了。当时先rpm -e卸载了老版本又手动删除了~/.config下的搜狗目录和fcitx目录然后重新安装。但重新转换rpm后怎么都加不进fcitx的输入法列表。排查发现是~/.config/fcitx/profile文件里有残留的EnabledIMList记录还指向旧版本号。解决方法是删除或备份这个profile文件让fcitx重新生成mv ~/.config/fcitx/profile ~/.config/fcitx/profile.bak重启fcitx后问题消失。这个文件是fcitx的输入法配置档案删除后fcitx会以默认状态重新初始化不影响搜狗本身的词库和皮肤设置。以后遇到“明明装了新版本却好像没生效”的情况先想到这个文件比反复卸载重装快得多。5.4 离线环境安装的补充方案如果你所在的工作网络不能随便访问外网比如内网机器上装CentOS 7可以从有网的机器上把rpm包和搜狗deb包一并拷过去。用yum的本地安装方式yum localinstall -y fcitx-*.rpm rpm -ivh sogoupinyin-*.rpm --nodeps依赖问题在离线场景下会放大所以有条件的话尽量把fcitx相关的rpm包连同依赖一起下载全。推荐在联网机器上用yumdownloader配合--resolve参数把依赖一次拉下来yumdownloader --resolve fcitx fcitx-configtool fcitx-qt5然后把下载好的rpm包全部拷到内网机器上放到同一个目录执行yum localinstall *.rpm这样会把目录里的rpm一次性装完自动解决互相依赖。整套流程走下来我最大的感受是搜狗输入法在CentOS 7上装不上的阵痛期大部分不是软件不行而是框架环境没对齐。你只要记住fcitx是底座、deb包要转格式、环境变量三行不能少这三点多数问题都能顺藤摸瓜解决。最后再分享一个小技巧如果你在VMware虚拟机里装最好把快照打好。安装前打一个干净快照装好配置完再打一个后面无论怎么折腾输入法一条命令就能回到可用状态。这套流程我后来又帮朋友在VirtualBox和VMware里复现过几次只要按步骤走基本都能成功希望这篇文章能帮你少走弯路。
返回列表