(强烈推荐)Ubuntu 22.04 雾凇拼音,VoCoType

发布时间:2026/7/23 14:01:49

(强烈推荐)Ubuntu 22.04 雾凇拼音,VoCoType title: 强烈推荐Ubuntu 22.04 雾凇拼音VoCoTypepublished: 2026-07-20pinned: falsedraft: falsedescription: 记录在 Ubuntu 22.04 中从搜狗输入法和 Speed of Sound 迁移到 Fcitx 5、雾凇拼音与 VoCoType并解决 Fcitx 5.0.14 兼容、编译依赖和音频临时文件问题。tags: [ubuntu, Linux, Fcitx5, Rime, VoCoType]category: Linux强烈推荐Ubuntu 22.04 雾凇拼音VoCoType这篇接着上一篇 [[Ubuntu 22.04 输入法语音输入截图]] 继续写。上一篇中我在 Ubuntu 22.04 上安装了搜狗输入法也尝试使用 Speed of Sound 完成语音输入。它们确实能用但是继续使用一段时间后问题也比较明显。搜狗输入法 Linux 版依赖较旧的 Fcitx 4版本长期停留在旧状态维护性、兼容性和后续更新能力都比较差。即使能够在 Ubuntu 22.04 上运行兼容性也很差。它还会把整个输入法环境限制在 Fcitx 4 上不方便使用现在持续维护的 Fcitx 5、Rime 和其他开源输入方案。我也测试了 Speed of Sound。在我的机器上它需要通过Allow和“分享”动作把识别结果交给其他程序这个流程经常会失效识别结果还经常偏向繁体中文准确率很差。像这种一般可能中文和英文混输的时候识别率特别差。几乎所有模型也存在下载失败的问题。它比较像一个独立语音工具而不是直接融入输入法框架中的输入方式。因此我最终经过多方查询和探究决定以Fcitx 5为基本的输入法框架Fcitx 5 ├── 雾凇拼音负责正常键盘输入 └── VoCoType负责 F9 按住说话、松开识别这套组合的实际体验很好普通打字直接使用雾凇拼音按住F9说话松开后直接在当前输入框上屏不需要复制、粘贴也不需要再调用“分享”菜单语音识别在本地完成VoCoType 使用 CPU 就可以运行不要求 CUDA 和独立显卡Fcitx 5、Rime、雾凇拼音和 VoCoType 都是开源方案后续更方便维护。折腾完成以后我个人强烈推荐 Ubuntu 22.04 用户使用Fcitx 5 雾凇拼音 VoCoType至此记录一下整个折腾的过程。我的最终环境本文是在下面的环境中实际安装和测试的系统Ubuntu 22.04 桌面会话X11 Fcitx 55.0.14 librime1.7.3 Python3.12 VoCoTypev2.1.2 VoCoType 分支fcitx5-5.0.14-compat这里最需要注意的是版本问题。Ubuntu 22.04 官方软件仓库中的 Fcitx 5 版本是5.0.14但是 VoCoType 后来的代码已经使用了 Fcitx 5.1 系列才提供的 API所以直接编译会报错。我没有为了一个插件强行升级整套系统输入法框架而是基于 VoCoTypev2.1.2建立了一个 Fcitx 5.0.14 兼容分支只修改 VoCoType 的两份源码。安装 Fcitx 5 和雾凇拼音一、搜狗输入法迁移冲突问题搜狗输入法依赖 Fcitx 4而下面的新方案使用 Fcitx 5。安装 Fcitx 5 的过程中根据依赖规则apt会删除与 Fcitx 5 冲突的 Fcitx 4 和搜狗输入法软件包。不需要担心冲突问题下面是安装Fcitx 5的时候终端显示的内容。apt把Fcitx 4和搜狗一起卸载了。正在从软件包中解出模板100% (正在读取数据库 ... 系统当前共安装有 393007 个文件和目录。) 正在卸载 sogoupinyin (4.2.1.145) ... 正在卸载 fcitx (1:4.2.9.8-5) ... 正在卸载 fcitx-bin (1:4.2.9.8-5) ... 正在卸载 fcitx-data (1:4.2.9.8-5) ... 正在选中未选择的软件包 fcitx5-data。 (正在读取数据库 ... 系统当前共安装有 390568 个文件和目录。) 准备解压 .../00-fcitx5-data_5.0.14-1_all.deb ...卸载时已经运行的搜狗输入法进程可能暂时继续工作因为进程已经加载了所需的可执行代码和部分资源。但是退出进程后软件将无法再次正常启动。这不代表卸载失败。二、安装 Fcitx 5、Rime 和前端Ubuntu 22.04 中的fcitx5、fcitx5-rime和部分编译依赖位于 Ubuntu 官方的 Universe 仓库中。部分桌面版系统已经默认启用 但精简安装或服务器环境中可能没有启用。 先确保 Universe 仓库可用sudoadd-apt-repository universesudoaptupdate然后apt install下列内容sudoaptinstall-y\fcitx5\fcitx5-config-qt\fcitx5-frontend-gtk3\fcitx5-frontend-gtk4\fcitx5-frontend-qt5\fcitx5-module-xorg\fcitx5-rime\im-config然后将默认输入法框架切换到 Fcitx 5im-config-nfcitx5然后reboot重启电脑检查当前框架im-config-m三、安装适合 Ubuntu 22.04 的雾凇拼音雾凇拼音项目地址 https://github.com/iDvel/rime-ice官方配置: https://dvel.me/posts/rime-ice/Ubuntu 22.04 官方仓库中的librime是1.7.3。雾凇拼音从2024.12.12开始使用了更新的 Lua 引入方式官方发布说明中也明确提醒 Ubuntu 22.04 等旧版发行版需要更新依赖或者继续使用之前的版本。因此我这里固定使用2024.11.29版本下载雾凇拼音RIME_DIR$HOME/.local/share/fcitx5/rimemkdir-p$HOME/.local/share/fcitx5if[-d$RIME_DIR];thenmv$RIME_DIR${RIME_DIR}.backup.$(date%Y%m%d-%H%M%S)figitclone\--depth1\--branch2024.11.29\https://github.com/iDvel/rime-ice.git\$RIME_DIR只启用雾凇拼音全拼方案并把候选词数量调成 9 个创建自定义补丁cat~/.local/share/fcitx5/rime/default.custom.yamlEOF patch: schema_list: - schema: rime_ice menu/page_size: 9 EOF然后打开 Fcitx 5 配置工具fcitx5-configtool添加“中州韵”确认里面有了再重新部署 Rime。我这安装完的时候就已经加上去了。部署可以执行touch~/.local/share/fcitx5/rime/default.custom.yaml fcitx5-r没有的话可以在这篇文章中Ctrl F搜VoCoType添加输入法方法按照相同的方式把中州韵加进去就行,就完成了。安装 VoCoType项目地址与框架解释VoCoType 项目地址 https://github.com/LeonardNJU/VocoType-linuxVoCoType 的 Fcitx 5 版本由两部分组成C Addon └── 接收 F9、处理输入法 UI、向当前输入框提交文本 Python Backend └── 录音、FunASR 识别、标点恢复、Rime 处理两部分通过本地 Socket 通信/tmp/vocotype-fcitx5.sock使用 Conda 准备 Python 3.12本文采用VoCoType 需要合适的 Python 解释器但并不强制要求使用 Anaconda。由于我的机器已经安装了 Anaconda因此这里创建一个独立的 Python 3.12 环境避免把依赖装进baseconda create-nvocotypepython3.12-yconda activate vocotype这个 Conda 环境主要用于在安装阶段提供 Python 3.12。运行安装脚本后脚本还会在用户目录中创建 VoCoType 自己的虚拟环境~/.local/share/vocotype-fcitx5/.venv安装完成后后台服务实际执行的是~/.local/share/vocotype-fcitx5/.venv/bin/python因此平时使用 VoCoType 时不需要再执行conda activate vocotype不需要激活 Conda 环境不代表可以立即删除它。VoCoType 的.venv可能仍然以 Conda 环境中的 Python 3.12 作为基础解释器所以暂时保留vocotype环境更稳妥。一、一次性安装完整依赖下面是结合整个安装过程整理出来的完整依赖。提前全部安装可以避免后面反复遇到缺少头文件或pkg-config找不到库的问题我前前后后中断了好几次就是因为缺少库中途还要再去装现在先一次性装好比较好。如果装了这些库后面执行脚本的时候还是说因为缺少这些库所以中断了那么就再另外再加吧。可能Ubuntu 22.04环境不一样。sudoaptupdatesudoaptinstall-y\build-essential\cmake\pkg-config\gcc\python3-dev\libfcitx5core-dev\nlohmann-json3-dev\libportaudio2\portaudio19-dev\libsndfile1\libcairo2-dev\libgirepository1.0-dev\gobject-introspection\libglib2.0-dev\libffi-dev\gir1.2-gtk-3.0\librime-dev\librime1C Addon 编译依赖build-essential cmake pkg-config libfcitx5core-dev nlohmann-json3-dev音频依赖libportaudio2 portaudio19-dev libsndfile1PyGObject 和 pycairo 编译依赖libcairo2-dev libgirepository1.0-dev gobject-introspection libglib2.0-dev libffi-dev python3-dev gcc gir1.2-gtk-3.0Python Rime 绑定pyrime的编译依赖librime-dev librime1 pkg-config二、我实际遇到的依赖错误pycairo 找不到 Cairo安装 Python 依赖时出现Run-time dependency cairo found: NO ERROR: Dependency cairo not found这是因为系统中虽然可能已经有 Cairo 运行库但是缺少编译pycairo所需的开发包。解决sudoaptinstall-y\libcairo2-dev\libgirepository1.0-dev\gobject-introspection\libglib2.0-dev\libffi-dev\pkg-config\python3-dev\gcc\gir1.2-gtk-3.0检查pkg-config--modversioncairo pkg-config--modversiongobject-introspection-1.0pyrime 找不到 librime之后又出现Run-time dependency rime found: NO ERROR: Dependency rime not found雾凇拼音配置文件已经存在不代表系统中已经安装了librime的开发文件。解决sudoaptinstall-ylibrime-dev librime1 pkg-config检查pkg-config--modversionrimeUbuntu 22.04 中一般会输出1.7.3三、克隆 VoCoType并用 Git 分支保存原版和兼容版一、克隆仓库cd~/桌面gitclone https://github.com/LeonardNJU/VocoType-linux.gitcd~/桌面/VocoType-linux我一开始直接使用了master但是编译时出现[ 33%] Building CXX object CMakeFiles/vocotype.dir/vocotype_module.cpp.o [ 66%] Building CXX object CMakeFiles/vocotype.dir/home/hyz/桌面/VocoType-linux/fcitx5/addon/ipc_client.cpp.o In file included from /home/hyz/桌面/VocoType-linux/fcitx5/module/vocotype_module.cpp:1: /home/hyz/桌面/VocoType-linux/fcitx5/module/vocotype_module.h:10:10: fatal error: fcitx-utils/eventloopinterface.h: 没有那个文件或目录 10 | #include fcitx-utils/eventloopinterface.h | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. make[2]: *** [CMakeFiles/vocotype.dir/build.make:76CMakeFiles/vocotype.dir/vocotype_module.cpp.o] 错误 1 make[2]: *** 正在等待未完成的任务.... make[1]: *** [CMakeFiles/Makefile2:83CMakeFiles/vocotype.dir/all] 错误 2 make: *** [Makefile:136all] 错误 2eventloopinterface.h属于较新的 Fcitx APIUbuntu 22.04 的 Fcitx 5.0.14 中没有这个头文件。因此我退回到项目的固定发布版本gitfetch--tags--forcegitcheckout v2.1.2此时 Git 会提示您正处于分离头指针状态二、创建两个分支我建立了两个分支fcitx5-5.1.9-plus-original fcitx5-5.0.14-compat作用分别是fcitx5-5.1.9-plus-original └── 保留 VoCoType v2.1.2 原始代码不在里面修改 fcitx5-5.0.14-compat └── 在 v2.1.2 基础上修改兼容 Ubuntu 22.04 的 Fcitx 5.0.14创建命令gitswitch-cfcitx5-5.1.9-plus-original v2.1.2gitswitch-cfcitx5-5.0.14-compat v2.1.2确认自己 * fcitx5-5.0.14-compat之后所有修改都在里面进行。三、再遇错误切换到v2.1.2以后eventloopinterface.h缺失的问题消失了但编译时又出现了新的错误[ 33%] Building CXX object CMakeFiles/vocotype.dir/vocotype.cpp.o [ 66%] Building CXX object CMakeFiles/vocotype.dir/ipc_client.cpp.o /home/hyz/桌面/VocoType-linux/fcitx5/addon/vocotype.cpp:329:28: error: ‘class fcitx::Instance’ has no member named ‘eventDispatcher’ instance_-eventDispatcher().scheduleWithContext( ^~~~~~~~~~~~~~~ /home/hyz/桌面/VocoType-linux/fcitx5/addon/vocotype.cpp:348:20: error: ‘class fcitx::Instance’ has no member named ‘eventDispatcher’ instance_-eventDispatcher().scheduleWithContext( ^~~~~~~~~~~~~~~ make[2]: *** [CMakeFiles/vocotype.dir/build.make:76: CMakeFiles/vocotype.dir/vocotype.cpp.o] 错误 1 make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/vocotype.dir/all] 错误 2 make: *** [Makefile:136all] 错误 2出错代码是instance_-eventDispatcher().scheduleWithContext(...)buntu 22.04 官方软件源中的 Fcitx 5 核心软件包版本为5.0.14。这个版本可以正常作为输入法框架使用但它没有包含 VoCoTypev2.1.2当前代码所调用的部分新版 Fcitx API。所以会出现不存在的问题具体来说Ubuntu 22.04 的 Fcitx 5 是5.0.14Instance::eventDispatcher()是 Fcitx 5.1.9 才加入的接口scheduleWithContext()是 Fcitx 5.1.8 才加入的辅助接口Fcitx 5.0.14 已经有基础的EventDispatcher::schedule()可以完成同样的线程调度。这不是因为 Ubuntu 22.04 已经停止维护也不是因为 Fcitx 5.0.14 无法正常使用而是因为稳定发行版软件包版本较旧但是上游项目使用新 API的源码兼容问题。解决时不需要删除异步线程也不需要把耗时的语音识别工作放回 Fcitx 主线程。Fcitx 5.0.14 已经提供了基础的fcitx::EventDispatcher以及EventDispatcher::schedule()因此可以在 VoCoType Addon 中自行创建一个EventDispatcher将其连接到 Fcitx 的主事件循环再把两处instance_-eventDispatcher().scheduleWithContext(...)改为兼容旧版本的event_dispatcher_.schedule(...)同时继续保留对InputContext引用是否有效的检查。另一种办法是自行升级整套 Fcitx 5但输入法框架还涉及核心库、Rime 插件、GTK/Qt 前端和桌面会话配置。为了使用一个 VoCoType 插件而替换 Ubuntu 22.04 官方软件源中的整套输入法组件改动范围和维护成本都更大。因此我最终选择保留系统提供的 Fcitx 5.0.14只对 VoCoType 中使用新版 API 的代码添加兼容补丁。四、添加补丁只修改两个文件给原来打补丁fcitx5/addon/vocotype.h fcitx5/addon/vocotype.cpp修改vocotype.h文件路径~/桌面/VocoType-linux/fcitx5/addon/vocotype.h在头文件区域增加#includefcitx-utils/eventdispatcher.h然后在类成员变量中增加fcitx::EventDispatcher event_dispatcher_;修改后的相关部分#includefcitx/inputcontextproperty.h#includefcitx-utils/eventdispatcher.h#includememory成员变量fcitx::EventDispatcher event_dispatcher_;fcitx::Instance*instance_;std::unique_ptrIPCClientipc_client_;修改vocotype.cpp的构造函数文件路径~/桌面/VocoType-linux/fcitx5/addon/vocotype.cpp在构造函数中把自己的EventDispatcher附着到 Fcitx 主事件循环VoCoTypeAddon::VoCoTypeAddon(fcitx::Instance*instance):instance_(instance),ipc_client_(std::make_uniqueIPCClient(/tmp/vocotype-fcitx5.sock)){event_dispatcher_.attach(instance_-eventLoop());// 后面的原代码保持不变}替换第一处scheduleWithContext原代码instance_-eventDispatcher().scheduleWithContext(ic_ref,[this,ic_ref](){auto*ic_ptric_ref.get();if(ic_ptr){showError(ic_ptr,录音失败);}});修改为event_dispatcher_.schedule([this,ic_ref](){auto*ic_ptric_ref.get();if(ic_ptr){showError(ic_ptr,录音失败);}});替换第二处scheduleWithContext原代码instance_-eventDispatcher().scheduleWithContext(ic_ref,[this,ic_ref,result](){auto*ic_ptric_ref.get();if(!ic_ptr){return;}if(result.success!result.text.empty()){commitText(ic_ptr,result.text);}elseif(!result.success){showError(ic_ptr,result.error.empty()?转录失败:result.error);}else{clearUI(ic_ptr);}});修改为event_dispatcher_.schedule([this,ic_ref,result](){auto*ic_ptric_ref.get();if(!ic_ptr){return;}if(result.success!result.text.empty()){commitText(ic_ptr,result.text);}elseif(!result.success){showError(ic_ptr,result.error.empty()?转录失败:result.error);}else{clearUI(ic_ptr);}});这里仍然保留auto*ic_ptric_ref.get();以及空指针检查。也就是说虽然没有使用新版的scheduleWithContext()但当原输入框已经关闭或失效时仍然不会继续访问无效的InputContext。检查旧接口是否还存在grep-R\instance_-eventDispatcher\|scheduleWithContext\-nfcitx5/addon\--exclude-dirbuild||true正常情况下没有任何输出。检查新接口grep-R\event_dispatcher_\|eventdispatcher.h\-nfcitx5/addon/vocotype.h\fcitx5/addon/vocotype.cpp应该看到vocotype.heventdispatcher.h vocotype.hevent_dispatcher_ vocotype.cpp一处 attach vocotype.cpp两处 schedulegit add .git commit提交五、单独编译 C Addon清理旧构建目录rm-rffcitx5/addon/build生成构建文件cmake\-Sfcitx5/addon\-Bfcitx5/addon/build\-DCMAKE_INSTALL_PREFIX$HOME/.local编译cmake--buildfcitx5/addon/build -j$(nproc)成功输出[100%] Linking CXX shared module vocotype.so [100%] Built target vocotype出现Built target vocotype说明 Fcitx 5.0.14 的兼容补丁已经通过编译和链接。六、运行完整安装脚本确认单独编译成功以后再执行cd~/桌面/VocoType-linuxenv-uLD_LIBRARY_PATH\bashfcitx5/scripts/install-fcitx5.sh安装脚本会依次完成检查 Fcitx 5 检查编译依赖 编译并安装 C Addon 安装 Python 后端 安装 Python 依赖 配置 systemd 用户服务 配置 Rime 配置麦克风七、脚本方案选择安装器检测到[1] melt_eng [2] radical_pinyin [3] rime_ice - 雾凇拼音 [0] luna_pinyin这里选的是三。我的设备列表中有[11] pulse [12] default优先选择系统默认设备12这样 VoCoType 会跟随 Ubuntu 当前的默认麦克风。然后就可以尝试说话试一下我觉得效果还不错效果挺好。我一开始创建过 Conda 环境但是最终安装脚本创建并使用的是 VoCoType 自己的用户级虚拟环境~/.local/share/vocotype-fcitx5/.venv后台服务实际执行的是~/.local/share/vocotype-fcitx5/.venv/bin/python因此日常使用不依赖 Conda。VoCoType 默认使用 CPU 推理不要求 CUDA。即使 Python 环境中安装了 Torch也不代表日常使用必须配置显卡 CUDA。最后是安装模型。八、启动后台服务按照脚本提示来集合。安装完成重启后执行systemctl--userdaemon-reload systemctl--userenable--now\vocotype-fcitx5-backend.service检查systemctl--userstatus\vocotype-fcitx5-backend.service\--no-pager正常会看到Active: active (running)安装完成后注销并重新登录桌面会话使安装脚本写入的FCITX_ADDON_DIRS生效。重新登录后执行以下命令检查echo$FCITX_ADDON_DIRS然后重启 Fcitx 5fcitx5-r九、VoCoType添加输入法列表方法打开fcitx5-configtool在右侧“可用输入法”中搜索vocotype选中后点击中间的左箭头把它加入“当前输入法”。十、平时使用以后正常使用时不需要执行conda activate vocotype因为后台服务已经设置为用户登录后自动启动systemctl--userenable\vocotype-fcitx5-backend.service平时的流程是登录 Ubuntu → Fcitx 5 自动启动 → VoCoType Backend 自动启动 → 切换到 vocotype → 普通键盘输入使用雾凇拼音 → 按住 F9 说话 → 松开 F9 后识别并直接上屏实时看日志journalctl--user\-uvocotype-fcitx5-backend.service\-fF9 不能只轻点一下十一、录音文件保存问题VoCoType 录音时会先把 WAV 文件临时写入/tmp/tmpXXXX.wav日志中会出现INFO: 已保存到: /tmp/tmp9sjask4a.wav这个“已保存”不是永久保存。当前 C 代码在识别完成后执行TranscribeResult resultipc_client_-transcribeAudio(audio_path);std::remove(audio_path.c_str());搞完就删除不进行转录时也会删除if(!transcribe){std::remove(audio_path.c_str());return;}参考项目VoCoType Linux https://github.com/LeonardNJU/VocoType-linux雾凇拼音 https://github.com/iDvel/rime-iceFcitx 5 https://github.com/fcitx/fcitx5pyrime https://pypi.org/project/pyrime/Ubuntu 22.04 Fcitx 5 软件包 https://packages.ubuntu.com/jammy/fcitx5

相关新闻