ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Debian 10.8 搜狗输入法安装与 fcitx 排错指南

Debian 10.8 搜狗输入法安装与 fcitx 排错指南 装完 Debian 10.8 第一次进桌面浏览器能开、终端能敲命令等到要写一行中文备注的时候才发现事情不对CtrlSpace按下去毫无反应顶上那个键盘图标点开只有English (US)。这大概率不是你装坏了系统而是 Debian 的默认安装从来不预装完整的中文输入法框架——它给你留了一套 ibus 的空壳却没有给任何中文引擎。我这次要记录的是在 Debian 10.8buster上把搜狗输入法跑起来并且让它稳定工作的完整过程包括框架选型、依赖对齐、环境变量落地、以及真正把人卡住的几个坑Wayland 会话下死活切不出来、候选框显示成方块、Qt 程序里按快捷键没反应、deb 包依赖对不上导致apt反过来要把搜狗删掉。这篇内容适合三类人一是刚在虚拟机或者旧笔记本上装完 Debian 10 想打中文的二是从 Ubuntu 迁移过来、发现apt install sogoupinyin这条路走不通的三是已经把搜狗装上了但只能打英文、或者每次重启都要手动fcitx启动一次的。我下面写的所有命令都在 buster 的 amd64 环境验证过遇到 Ubuntu 专有包名的地方我会明确讲清楚 Debian 该怎么替代。如果你用的是 Debian 11 或者 Ubuntu思路完全一样个别包名换一下就行。1. Debian 10.8 上的输入法框架之争为什么搜狗只能挂在 fcitx 上1.1 Debian 默认那套 ibus 为什么接不住搜狗Debian 桌面版尤其是带 GNOME 的 ISO默认会装上ibus这是事实但它默认装的只是一套框架和ibus-pinyin之类的可选组件很多精简镜像里连引擎都没装。ibus 的设计是框架 引擎两块分离框架负责和 X11、GTK、Qt 打交道引擎负责把拼音转成汉字。你敲CtrlSpace没反应通常不是框架挂了而是框架里压根没有可切换的引擎。那为什么搜狗不能塞进 ibus因为搜狗 Linux 版从一开始就是按 fcitx 的插件接口写的。它编译出来的产物是一个.so动态库命名规则就是fcitx-sogoupinyin.so放在fcitx的 addon 目录里靠 fcitx 的 addon 加载机制被发现。你把它丢给 ibusibus 根本不认识这个接口。所以第一个结论很硬想用搜狗 Linux 版就必须装 fcitx没有第二条路。我见过有人试图用ibus的自定义引擎去包装搜狗折腾半天最后放弃。这条路在工程上不成立因为两个框架的输入法上下文InputContext、候选词回调、前后端通信协议都不一样不是写个配置文件能糊过去的。1.2 fcitx 的三层结构以及每一层坏了会有什么症状理解 fcitx 的分层后面排错会快很多。它大致是三层常驻守护进程fcitx必须有一个进程在后台跑着它是整个体系的中枢。ps -ef | grep fcitx看不到东西那后面所有事都免谈。前端模块frontend负责和具体的 GUI 工具包对接。fcitx-frontend-gtk2、fcitx-frontend-gtk3、fcitx-frontend-qt5分别对应不同的程序类型。前端没装症状就是在某些程序里能打字在另一些程序里不行。引擎engine真正干活的比如搜狗、拼音、五笔。引擎没加载症状是能切换出输入法状态但打出来还是英文/候选词是空的。这三层的故障表现完全不同所以排错时第一件事不是瞎重启而是先确定是哪一层出问题了。后面第 5 节我会给一套按症状定位的方法这里先记住这个分层。1.3 fcitx4 还是 fcitx5Debian 10.8 的现实选择理论上 fcitx5 更现代、对 Wayland 支持更好但 Debian 10 的官方仓库里主要是 fcitx 4.2.9.6 这一代fcitx5 在 buster 正式源里并不是标配。而搜狗 Linux 版长期只支持 fcitx4 的插件 ABI。所以在这台机器上路线是确定的fcitx4 搜狗。方案Debian 10.8 可得性对搜狗的支持建议fcitx4 搜狗 deb官方源齐全原生支持首选fcitx5 拼音/中州韵需自行解决来源搜狗不支持 fcitx5 插件不推荐给新手ibus ibus-libpinyin官方源齐全不支持搜狗装不上时的替代fcitx4 fcitx-pinyin / 云拼音官方源齐全不需要搜狗最稳的兜底方案这个表格其实是我踩过一圈之后才愿意承认的如果你的目标只是能在 Debian 上打中文fcitx-googlepinyin或者fcitx-pinyin装完 5 分钟就能用稳定性比搜狗高得多搜狗的价值在于词库、云候选和长句联想。你得先想清楚自己到底要哪个再决定要不要折腾。2. 装之前必须确认的五件事省掉后面两小时2.1 先看会话是 X11 还是 Wayland这条决定成败这是我最想放在第一条讲的。Debian 10 的 GNOME 默认会启动Wayland 会话而 fcitx4 在 Wayland 下基本没法正常工作——环境变量GTK_IM_MODULEfcitx在 Wayland 里是被忽略的GTK3 在 Wayland 下走的是自己的输入法协议你那套配置写了也白写。判断方法很简单在终端里执行echo $XDG_SESSION_TYPE输出x11就继续往下走输出wayland就先解决这件事注销回到登录界面点右下角或者用户名旁边的齿轮图标选GNOME on Xorg或者GNOME 经典然后再登录。登录后再执行一次上面的命令确认已经变成x11。如果你用的是 KDE 或者 XFCEDebian 10 上它们默认就是 X11 会话这一步可以跳过。但 XFCE 用户要注意XFCE 的会话启动脚本和 GNOME 不太一样环境变量的落点也不同这个我在 4.1 节细说。2.2 生成 zh_CN.UTF-8 locale 并装好中文字体很多人在虚拟机里装 Debian 用的是最小化安装系统里根本没有生成中文 locale。这会导致两个后果一是搜狗的界面文字显示成问号二是某些程序里的中文会变成方块。先看当前状态locale如果LANG是C或者POSIX那就生成一下sudo dpkg-reconfigure locales在列表里找到zh_CN.UTF-8 UTF-8用空格键选中前面出现星号Tab 到 OK 确认然后在下一步把它设为默认 locale。之后重新登录一次让环境变量生效。字体同样不能省。候选框如果显示成方块90% 是字体问题sudo apt install fonts-wqy-microhei fonts-wqy-zenhei fonts-noto-cjk这三个包加起来占用不算大但覆盖了绝大多数的中文显示场景。fonts-noto-cjk体积偏大如果你在虚拟机里磁盘紧张只装文泉驿那两个也够用。提示如果你之前装过localepurge这类清理工具它会删掉你没在配置里列出的 locale 文件重装locales之后要重新跑一次dpkg-reconfigure locales。2.3 把 fcitx 全家桶和依赖一次性装齐与其装完搜狗再被apt追着补依赖不如提前把该装的都装上。下面这组是我验证过的组合sudo apt update sudo apt install fcitx fcitx-bin fcitx-config-gtk3 fcitx-frontend-all \ fcitx-frontend-gtk2 fcitx-frontend-gtk3 fcitx-frontend-qt5 \ fcitx-module-cloudpinyin fcitx-ui-classic fcitx-tools im-config这里有几个包值得解释一下为什么不省fcitx-frontend-all是个元包会把常见的 GTK2、GTK3、Qt5 前端一次性拉下来。你单独装也行但很容易漏掉某一个结果就是Chrome 里能打VLC 里打不了。fcitx-config-gtk3是图形化配置工具。不装的话你只能手改~/.config/fcitx/profile效率极低。im-config是 Debian 官方的输入法框架选择器它做的事就是帮你写~/.xinputrc比手写可靠。fcitx-module-cloudpinyin是云拼音模块即使你后面不用搜狗它配fcitx-pinyin也能用上联想。另外搜狗 2.4.0 系列会依赖一批 Qt5 的 QML 模块在 Ubuntu 上这些是打包在一起的Debian 上要单独装sudo apt install libqt5qml5 libqt5quick5 libqt5quickwidgets5 \ qml-module-qtquick2 qml-module-qt-labs-settings \ qml-module-qtquick-window2 qml-module-qtquick-controls这七个包先装好后面dpkg -i的成功率会高一大截。我第一遍装的时候就是跳过了这一步结果 dpkg 报了一屏 dependency problems prevents configuration。3. 搜狗 deb 包落地从下载到依赖对齐的完整过程3.1 版本怎么选为什么我不建议直接上最新的搜狗 Linux 版在社区里能拿到的常见版本有这么几个2.2.0.0108、2.3.1.0112、2.4.0.3469。版本号越大功能越多但对 Qt 和 QML 的依赖也越新在 Debian 10 这种相对老一点的发行版上反而更容易出依赖冲突。我的建议顺序是先试 2.4.0装不上再退到 2.3.1。2.2.0 那一代太老输入法状态栏的兼容性有已知问题除非前面两个都不行否则别用。下载的时候有一点要注意搜狗官方的 Linux 版面只提供 amd64 的包。如果你的 Debian 是 i386现在很少了或者 arm64那这条路直接走不通得转 fcitx-pinyin 方案。装之前确认一下架构uname -m输出x86_64就没问题。3.2 dpkg -i 报错了怎么办一个可以复用的依赖修法假设你把包下载到了~/Downloads/sogoupinyin_2.4.0.3469_amd64.deb。不要一开始就用apt install ./xxx.deb先用dpkg -i把真实报错打出来cd ~/Downloads sudo dpkg -i sogoupinyin_2.4.0.3469_amd64.deb这里会出现两类报错处理方式完全不同。第一类包存在但版本不对或者包名不一样。典型的是 Ubuntu 用的fcitx-libs-qt5在 Debian 上叫fcitx-frontend-qt5Ubuntu 的libopencc2在 buster 里可能是libopencc1.1。这种情况可以用equivs造一个假包来满足依赖声明这是我在 Debian 上处理跨发行版 deb 包最常用的手段sudo apt install equivs cd /tmp equivs-control libopencc2然后用编辑器打开生成的libopencc2文件改三行关键内容Package: libopencc2 Version: 1.0.0 Depends: libopencc1.1 Provides: libopencc2 Description: dummy package to satisfy sogoupinyin dependency保存后构建并安装equivs-build libopencc2 sudo dpkg -i libopencc2_1.0.0_all.deb同样的方法可以给fcitx-libs-qt5造一个假包让它Depends: fcitx-frontend-qt5。核心思路是真实的.so文件其实已经有了只是包名对不上用 equivs 把名字这层皮补上就行。第二类依赖真的缺失。这时候用apt让 Debian 自己算sudo apt --fix-broken install注意执行apt --fix-broken install的时候一定要看它准备做什么。如果输出里出现The following packages will be REMOVED: sogoupinyin先按n取消回到 equivs 那一步去补假包否则 apt 会把你好不容易装上的搜狗直接卸掉。这个坑我踩过不止一次。3.3 装完之后文件到底落在哪了搞清楚文件落点出问题时你能直接定位。搜狗安装完之后主要涉及这几个位置路径内容说明/usr/lib/x86_64-linux-gnu/fcitx/fcitx-sogoupinyin.sofcitx 引擎插件被 fcitx 加载的核心文件/usr/share/fcitx/sogoupinyin/皮肤、图标等资源删了会影响外观不影响功能/usr/bin/sogou-qimpanel候选框面板进程候选框不显示时重点看它~/.config/SogouPY/用户词库与配置卸载后想清干净要手动删~/.sogouinput/用户数据目录同上验证插件是否被 fcitx 识别fcitx-diagnose | grep -A 5 Sogou如果这里能看到搜狗拼音的条目说明引擎已经被加载了剩下的是配置问题。如果完全看不到那是插件路径或者 ABI 不匹配需要回头检查 fcitx 版本。4. 让输入法在登录后自己就绪环境变量与自启动4.1 三件套环境变量写到哪个文件里fcitx 能不能在图形程序里生效全看这三个变量export GTK_IM_MODULEfcitx export QT_IM_MODULEfcitx export XMODIFIERSimfcitxGTK_IM_MODULE管 GTK 程序GNOME 系应用、Firefox、LibreOfficeQT_IM_MODULE管 Qt 程序KDE 系应用、WPS、VLCXMODIFIERS是给那些直接用 XIM 协议的老程序兜底的。三个缺一个就会出现部分程序打不了中文的诡异现象。关键不在于写什么而在于写哪里。写错地方等于没写。不同桌面环境的正确落点GNOME / LightDM写进~/.xprofile。LightDM 的 X 会话脚本会读取这个文件。SDDM / KDE写进~/.config/plasma-workspace/env/fcitx.sh或者直接写~/.xprofile也可以。XFCE~/.xprofile一般不被 XFCE 的会话管理器读取更可靠的做法是在设置 → 会话和启动 → 应用程序自启动里加一条命令或者在~/.config/xfce4/xinitrc里 export。通用兜底~/.xsessionrcDebian 的 Xsession 脚本会 source 它。注意/etc/environment这个文件是不支持export语法的它只接受KEYvalue的纯键值对。我看到过太多人把export GTK_IM_MODULEfcitx写进/etc/environment登录时静默报错然后一脸茫然地说我明明配了。4.2 im-config 和 fcitx 自启动两件事都要做环境变量解决的是程序知道去找 fcitx但还有一个问题fcitx 进程本身得先跑起来。这两件事是独立的。用 im-config 指定框架im-config -n fcitx它会往~/.xinputrc写入内容告诉 X 会话启动时优先拉起 fcitx。执行过程中的图形提示全部确认即可。然后处理开机自启。最省事的做法是把 fcitx 的 desktop 文件丢进自启动目录mkdir -p ~/.config/autostart cp /usr/share/applications/fcitx.desktop ~/.config/autostart/如果你在 GNOME 里也可以直接到优化或者启动应用程序里手动加一条fcitx。KDE 用户在系统设置 → 开机与关机 → 自动启动里加。两次都做完之后注销重登。登录后立刻验证ps -ef | grep -v grep | grep fcitx应该能看到fcitx主进程甚至还有sogou-qimpanel。如果什么都没有说明自启动没生效先手动fcitx -d起一次能起来就说明是自启动配置的问题。提示如果你在虚拟机里经常做快照回滚注意~/.config/autostart里的文件不会被快照机制保护回滚后要重新确认一次。4.3 在 fcitx 里把搜狗排到正确的位置打开fcitx-config-gtk3有些环境下菜单里叫Fcitx 配置。在输入法标签页里正确的排列应该是第一位键盘 - 英语(US)这个不要删。第二位搜狗拼音。第一位的英语键盘必须保留因为它是未激活输入法时的默认状态也是很多快捷键的落点。我见过有人为了简洁把英语键盘删了结果发现某些程序里按 Esc 之后状态混乱、光标位置漂移。添加搜狗拼音的时候点左下角加号把只显示当前语言的勾去掉搜索框里输sogou或者搜狗选中添加。如果搜不到说明引擎没有被加载回到 3.3 节去验证插件。添加完之后把全局切换键确认一下。默认是CtrlSpace这个快捷键在虚拟机和某些 IDE 里会冲突我在 5.5 节细说。5. 中文打不出来时的排查链路按症状定位而不是靠重启5.1 fcitx-diagnose 的输出该从哪一行开始读fcitx-diagnose是 fcitx 自带的自检脚本输出很长很多人看一眼就放弃了。其实它的结构很规整你只需要按顺序看几块fcitx-diagnose /tmp/fcitx-diag.txt 21拉到文件里慢慢看。关注这几段# Environment检查GTK_IM_MODULE、QT_IM_MODULE、XMODIFIERS三个值是不是fcitx。这是第一个要排除的。# Frontends列出 fcitx 找到了哪些前端。如果这里只有 gtk2 没有 gtk3 和 qt5那对应程序里必然打不了中文。# Addons确认sogoupinyin是否在列表里以及加载是否成功。按这个顺序看下去90% 的问题能在两分钟内定位。5.2 候选框显示成方块或者干脆不出现方块字的情况前面 2.2 节其实已经给了答案——字体缺失。补装fonts-wqy-microhei之后注销重登即可。有个细节字体装完之后 fcitx 需要重启才能重新读取字体配置光刷新缓存不够。候选框完全不出现要分两种情况看。先执行ps -ef | grep -v grep | grep sogou如果sogou-qimpanel进程不在候选框自然没有。手动拉一下sogou-qimpanel 能起来而且候选框出现了说明是启动顺序的问题——fcitx 起来的时候 qimpanel 还没准备好。解决办法是在自启动里把sogou-qimpanel也加一条或者干脆写个延时启动的小脚本。如果sogou-qimpanel起来了又立刻退出那要看它的输出。直接在前台跑sogou-qimpanel它崩的时候一般会打印 Qt 相关的错误多半是 QML 模块找不到。回到 2.3 节把那一串qml-module-*补全。5.3 在 Qt 程序里切换不出中文这个症状特别典型Firefox 里能打中文一打开 WPS 或者 VLC 就变英文。原因就是 Qt 前端没生效。先确认包在不在dpkg -l | grep fcitx-frontend-qt5再确认插件文件存在ls /usr/lib/x86_64-linux-gnu/qt5/plugins/platforminputcontexts/正常情况下应该能看到libfcitxplatforminputcontextplugin.so。看不到就重装fcitx-frontend-qt5。文件在但程序还是不认那就是环境变量的问题。在终端里临时设一下再启动目标程序可以快速验证QT_IM_MODULEfcitx wps如果这样启动就能打中文了说明你的环境变量没写到正确的位置回到 4.1 节。还有一种情况是程序自带了一套 Qt 运行时。AppImage 打包的软件、某些 Electron 应用就属于这一类它们不会去读系统的 Qt 插件目录。这时候要显式指定插件路径QT_PLUGIN_PATH/usr/lib/x86_64-linux-gnu/qt5/plugins QT_IM_MODULEfcitx ./YourApp.AppImage顺带说一句Electron 应用其实是走 GTK 前端的出问题时优先检查GTK_IM_MODULE而不是QT_IM_MODULE。这个方向我一开始也搞反过浪费了不少时间。5.4 能切换但打出来还是英文候选词是空的这种情况说明前端通了、输入法状态也激活了但引擎没拿到按键。可能性有两个。一是输入法列表里搜狗没被真的选中。按CtrlSpace之后看输入法状态图标确认当前确实是搜狗拼音而不是键盘 - 英语。二是搜狗的用户数据目录权限出了问题。它需要往~/.config/SogouPY和~/.sogouinput里写词库和状态如果这两个目录是 root 所有比如你曾经用sudo启动过就会写不进去ls -ld ~/.config/SogouPY ~/.sogouinput看到root root就修回来sudo chown -R $USER:$USER ~/.config/SogouPY ~/.sogouinput这个坑很隐蔽因为界面上不会有任何报错就是安静地打不出字。5.5 虚拟机环境里额外要处理的两个冲突在 VMware 或者 VirtualBox 里跑 Debian 的人特别多这里有两个和宿主机相关的坑不属于 fcitx 的问题但症状一模一样。第一快捷键被宿主机吞掉。CtrlSpace在很多宿主系统里是输入法切换键虚拟机的键盘捕获机制会让它优先被宿主机处理。表现就是你在虚拟机窗口里按了没反应切出去再切回来又好像生效了。解决办法是把虚拟机的切换键改掉比如在 fcitx 配置里把切换输入法设成CtrlShiftSpace或者SuperSpace避开冲突。第二虚拟机增强工具的剪贴板同步偶尔会和输入法抢焦点。如果你在装完增强工具之后突然发现候选框位置偏移或者点不到先禁用剪贴板同步试试能快速排除是不是这个原因。另外虚拟机里还有个体验问题fcitx 的候选框走的是独立的合成窗口如果虚拟机没开 3D 加速候选框可能会出现残影。这个不是配置问题开启 3D 加速或者在 fcitx 配置里换成经典界面样式fcitx-ui-classic提供的那个就能缓解。5.6 排错顺序的一张速查表我把自己排过的几次故障整理成一张表下次遇到可以直接对号入座症状最可能的原因第一件事CtrlSpace 完全无反应fcitx 进程没跑ps -ef | grep fcitx只有部分程序能打中文前端包缺失检查 gtk3 / qt5 前端候选框是方块缺中文字体装fonts-wqy-microhei候选框不出现qimpanel 未启动手动前台跑看报错能切换但打不出字用户目录权限ls -ld ~/.config/SogouPY重启后失效自启动没配检查~/.config/autostart切到别的窗口就失效Qt 环境变量没全局生效确认写到了~/.xprofile6. 装不上或者用不顺手时的备份方案6.1 fcitx 自带拼音系列十分钟能跑通的兜底如果你的网速慢、deb 包下不下来或者装完搜狗之后一直不稳定我建议先把中文输入这件事解决掉再回头折腾搜狗。Debian 官方源里的这几个包质量都不错sudo apt install fcitx-pinyin fcitx-googlepinyin fcitx-sunpinyin \ fcitx-table-wubi fcitx-module-cloudpinyinfcitx-pinyin是基础拼音词库一般但绝对稳定fcitx-googlepinyin词库和联想更好一些fcitx-sunpinyin的长句输入体验不错配上网易云拼音模块之后云候选项也能用上。我把这套方案在一台老笔记本上跑了两年多除了词库没搜狗智能没出现过任何崩溃。6.2 如果你的发行版已经是 Debian 11 或更新顺带说一下因为很多人是在 Debian 11 或者 Ubuntu 22.04 之后的环境里看到这篇文章的。Debian 11 的仓库里 fcitx5 已经是标配了fcitx5-chinese-addons里的拼音引擎质量相当好而且支持 Wayland。如果你的环境允许我更推荐走 fcitx5 这条路稳定性和长期可维护性都更好。但要注意一点fcitx4 和 fcitx5 不能共存它们的插件目录和配置目录都不一样混装会导致各种诡异行为。切换时先把 fcitx4 卸干净再装 fcitx5。另外搜狗在较新的环境里也有对应版本安装思路和本文一样先装框架和前端的依赖再dpkg -i最后用apt --fix-broken install收尾。区别只在于包名从fcitx-*变成了fcitx5-*。6.3 想彻底卸干净搜狗该删哪些东西折腾失败想推倒重来的时候只执行apt remove sogoupinyin是不够的用户数据会留在家里目录下次装回来还是带着之前的坏状态。sudo dpkg -r sogoupinyin sudo apt autoremove rm -rf ~/.config/SogouPY ~/.config/SogouPY.users ~/.sogouinput卸完之后确认一下 fcitx 的引擎列表里搜狗已经消失fcitx-diagnose | grep -i sogou没有输出就干净了。这时候重启 fcitxfcitx -r就能回到只有拼音引擎的状态。这个清理步骤在做换版本重装的时候尤其重要我试过一次直接覆盖安装 2.4.0结果旧的配置和新版本不兼容候选框一直闪最后还是清干净重来才好的。7. 用了几个月之后我自己会固定做的几件事我在这台 Debian 10.8 上挂着搜狗用了挺久慢慢养成了一些固定习惯。第一件是把 fcitx 的云计算候选关掉。它确实能提高一些生僻词的命中率但每次敲字都要往外发请求在虚拟机里网络一卡候选框就跟着一顿一顿的。关闭位置在 fcitx 配置的附加组件标签页里把Cloud Pinyin前面的勾去掉。第二件是禁用皮肤。搜狗的默认皮肤挺好看但它是用 QML 渲染的对显卡驱动有依赖在没有 3D 加速的虚拟机里就是卡顿的来源。换回默认的经典界面之后输入响应明显跟手了。第三件是定期备份词库。~/.config/SogouPY这个目录里存着你自己积累的词汇重装系统或者换机器的时候直接拷过去就能接着用比重新养一遍省事得多。我在两台机器之间同步词库就是靠这个目录比云同步可靠。最后一条经验是关于心态的搜狗在 Debian 这类非原生支持的发行版上本质上是能用但别指望它像 Windows 版一样无缝。如果你发现自己每隔两周就要修一次输入法别犹豫换回fcitx-googlepinyin或者 fcitx5 的拼音引擎。输入法这个东西稳定压倒一切花在它上面的时间应该越少越好。
返回列表