当前位置: 首页 > news >正文

Linux桌面环境手动编译安装librime、librime-lua以及ibus-rime,提升中文输入法体验

Linux上的输入法有很多,大体都使用了Fcitx或者iBus作为输入法的引擎。相当于有了一个很不错的“地基”,你可以在这个“地基”上盖上自己的“小别墅”。而rime输入法,就是一个“毛坯别墅”,你可以在rime的基础上,再装修,打造自己的住所。

现在的问题是,使用Linux软件包自带的iBus(很多Linux发行版本,默认使用iBus输入法引擎)和ibus-rime,其内部的librime(ibus-rime的核心,也是rime的核心算法)版本比较低,需要我们手动编译才可以使用rime的完整功能

本篇文章就给大家演示,如何在Linux(Debian、Ubuntu发行版本)上,如何手动编译librime、librime-lua以及ibus-rime。

ibus-rime

ibus-rime 是一个基于 Rime 输入法引擎的iBus后端模块,用于在使用iBus框架的Linux发行版中提供中文输入支持。

理论上,我们安装ibus-rime只需要:

# 更新软件包管理器
sudo apt update
# 安装ibus-rime
sudo apt install ibus-rime

之后,重启用户界面(你可以注销当前桌面环境并重新登录系统桌面),你就可以在系统的设置内添加ibus-rime:
在Kali上安装ibus-rime后,GNOME内添加输入

但是,有一个小问题,部分软件包管理器内ibus-rime使用的librime,也就是rime核心算法库,使用的版本过于老旧(1.8.5左右),性能问题不好说,一些rime的新特性就无法使用;

比如薄荷输入法配置,引入Lua脚本就是使用高版本librime新特性,如果librime版本过低,就无法发挥薄荷输入法配置的全部功能,甚至无法使用

# 查找系统自带的librime版本
find /usr/lib /usr/local/lib /opt -name "librime.so*"

librime的版本是1.8.5

那么,如果librime版本不够,导致ibus-rime无法使用rime的新特性,如何解决呢? 方法很多,比如:

  • fcitx5版本(Flatpak): 基于Flatpak下载并使用Fcitx5(软件包管理器的Fcitx5-rime可能也使用低版本librime和librime-lua)
  • ibus-rime.AppImage: AppImage 格式的中州韵输入法(ibus-rime)的打包方案;目前不支持arm架构。

总的来说,方法还是很多的,这里提供手动编译的方法,方便依旧想使用ibus-rime的用户,或者使用ARM设备的Linux用户安装。

环境准备

首先,我们看看环境准备,主要分为卸载旧依赖安装编译依赖两个部分。

卸载旧依赖

卸载旧版本的ibus-rime;同时,因为我们需要从源码编译,而它依赖于librime和plum两个部分,所以我们也需要卸载这两个的相关软件包:

# 卸载ibus-rime
sudo apt purge ibus-rime
# 卸载librime有关依赖
sudo apt purge librime*

如果你之前就没有安装过ibus-rime,那么这一步就不需要执行了。但是我相信,你都看到这个教程了,十有八九是有安装😏。
卸载相关旧的依赖

安装编译依赖

首先根据官方文档:

  • librime-lua Github: https://github.com/hchunhui/librime-lua/wiki
  • rime Github: https://github.com/rime/home/wiki/RimeWithIBus

特别注意,我们需要:

  • cmake>=3.25: 虽然官方的CMakeLists.txt内描述cmake的最低版本只需要3.12,但是根据issue #856描述,最好需要cmake>=3.25
  • git: 后续我们需要使用git来同步源代码来进行编译。

综上,我们安装依赖:

# 安装cmake和gcc
sudo apt install build-essential cmake
# 安装其他编译依赖
sudo apt install libboost-all-dev libgoogle-glog-dev  libgtest-dev libyaml-cpp-dev libleveldb-dev libmarisa-dev  libz-dev libopencc-dev  libibus-1.0-dev libnotify-dev

可以检查一下cmake的版本:

cmake --version

检查cmake版本

如果cmake的版本过低,可以在cmake项目官网安装高版本的cmake,比如:

# 切换工作路径
cd /opt
# 下载cmake二进制文件
wget https://github.com/Kitware/CMake/releases/download/v3.30.0/cmake-3.30.0-linux-aarch64.sh
# 在此目录安装
bash cmake-3.30.0-linux-aarch64.sh
# 软链接到/usr/local/bin
ln -s /opt/cmake/bin/cmake /usr/local/bin/cmake

到此,我们的前期准备就完成了。

支持创作

制作教程不易,如果热心的小伙伴,想支持创作,可以加入我们的「爱发电」电圈(还可以解锁远程协助、好友位😃):

  • Mintimate的电圈: https://afdian.net/a/mintimate](https://afdian.net/a/mintimate)

当然,也欢迎在B站或YouTube上关注我们:

  • Bilibili: https://space.bilibili.com/355567627
  • YouTube: https://www.youtube.com/@mintimate/featured

更多:

  • Mintimate’s Blog 关于页面

ibus-rime源码

需要编译安装ibus-rime,那么首先第一步就是获取项目的源代码了,ibus-rime的源代码就在GitHub上,目前隶属于rime项目内,我们克隆源代码:

git clone https://github.com/rime/ibus-rime.git

ibus-rime的编译需要依赖与两个外部库:

  • librime: librime的算法核心,还可以加上librime-lua插件,使其支持lua语法插件,进一步扩展rime。
  • plum: 东风破,相当于rime的软件包管理器,ibus-rime的编译安装过程中,需要使用东风破进行数据初始化。

ibus-rime已经做了仓库的关联:

[submodule "librime"]path = librimeurl = https://github.com/rime/librime.git
[submodule "plum"]path = plumurl = https://github.com/rime/plum.git

所以,我们直接使用git submodule update --init进一步克隆子仓库即可:
克隆子仓库

**如果你没什么网络问题,通常情况还是很顺利的。**接下来,我们需要分别先编译librimeplum

librime

注意切换Terminal的工作目录到刚刚ibus-rime初始化后,librime目录内。

编译librime其实很简单,但是ibus-rime默认情况使用的librime分支,或许不是最新。我们这里可以使用git checkout命令切换一下:

git checkout master

切换分支
同时需要注意:默认情况下,如果需要Lua的支持,那么需要融合librime-lua插件。

薄荷输入法配置、雾凇拼音配置等等rime配置,有大量使用Lua扩展的功能,所以我们这个librime-lua插件是肯定要安装的啦。

librime-lua

根据项目地址:

  • librime-lua Github: https://github.com/hchunhui/librime-lua

我们在librime源码内,使用自带的插件安装脚本,执行:

# 自动下载librime插件
bash install-plugins.sh hchunhui/librime-lua

自动下载librime-lua插件

合并插件

在下载librime-lua后,我们合并插件内容进入librime:

make merged-plugins

如果编译不加以限制,可以会导致内存占用过高导致编译卡死,甚至系统卡死。
内存占用过高而被killed

所以,建议大家根据自己系统的核心数,限制编译的进程(线程)编译:

# 使用两个进程进行编译
make merged-plugins -j2

限制线程编译
合并插件完成

编译安装

最后,我们完成最后的编译安装即可:

# 编译
make
# 安装
sudo make install

同样,建议可以使用-j限制编译的进程数量哦。

编译安装开始
编译安装完成

plum

注意切换Terminal的工作目录到刚刚ibus-rime初始化后,plum目录内。

切换工作目录到plum源码目录

plum的编译比较简单了。你只需要:

# 编译并安装
make && sudo make install

编译plum
安装plum

编译ibus-rime

前期的准备都完成了。接下来终于可以回到ibus-rime了。编译的过程很简单,和plum差不多:

# 编译
make
# 安装
sudo make install

同样,建议可以使用-j限制编译的进程数量哦。

编译安装ibus-rime完成

使用ibus-rime

ibus-rime编译安装好后,你可能无法在Gnome桌面的设置内,添加`Rime引擎;这个时候你可以注销桌面环境,重新登录。通常情况就没什么问题了

在Gnome内添加rime
之后就可以使用了。

Opt:plum安装薄荷

上文我们已经编译安装了ibus-rime,接下来我们就使用薄荷输入法配置来快速初始化rime。

  • 薄荷输入法: oh-my-rime 输入法
    快速初始化rime⚡,同时适配多个平台💻

方法很多,比如常规的方法就是下载薄荷输入的配置,导入ibus-rime的配置文件目录内,重新部署即可。使用plum安装薄荷配置,只需要一条命令:

rime-install Mintimate/oh-my-rime:plum/full

每一次都是全量更新替换,这样的更新配置方便很多。而且都是同名文件替换,意味着如果你使用custom文件覆写薄荷输入法配置,那么自定义的配置会被保留下来。

我之前在薄荷输入法文档内已经做了详细介绍。本章节就来点不一样的,使用plum安装薄荷输入配置。

plum的原理,实际上就是根据方案的配置处方文件,对方案内部的文件进行“抓药”。比如薄荷的全量处方:

# encoding: utf-8
---
recipe:Rx: plum/fullargs:description: >-全量安装、更新
install_files: >-dicts/*.*opencc/*.*lua/*.*lua/aux_code/*.*default.yamlsquirrel.yamlweasel.yamlibus_rime.yamlrime_mint*.yamldouble_pinyin*.schema.yamlt9.schema.yamlterra*.yamlstroke*.yamlwubi86*.yamlwubi98*.yamlsymbols.yamlradical*.yamlmelt_eng*.yaml

plum操作解析:

  • plum使用git对薄荷的仓库进行克隆;
  • 检录出薄荷仓库,读取plum/full.recipe.yaml
  • 根据内部配置进行文件部署和覆盖,比如dicts/*.*,就是把dicts文件内部所有文件部署到本地rime配置目录;terra*.yaml就是把仓库根目录内terra开头和.yaml结尾的文件拷贝到本地rime配置目录。

那么,我们这次编译应该如何使用呢? 还记得我们刚刚是有编译plum的,只需要再次cd到plum目录内:
再次进入plum的目录内
可以看到,二进制文件rime-install,我们就使用二进制配置薄荷输入法方案:

./rime-install Mintimate/oh-my-rime:plum/full

默认情况,plum下载的配置文件:

  • 如果系统是Windows,那么默认配置到小狼毫的配置目录内;
  • 如果系统是macOS,那么默认配置到鼠须个人的配置目录内,即$HOME/Library/Rime内。
  • 如果系统是Linux,那么默认配置到ibus的配置目录内,即$HOME/.config/ibus/rime内。

plum自动配置薄荷

是不是发现一个问题? 如果我的设备是使用Fcitx5,plum自动配置到默认的地址,岂不是还需要手动移动配置文件?其实plum也可以完成,只需要运行脚本时候,环境变量内声明即可:

# 提前明确rime需要配置到那个目录
rime_dir="$HOME/.local/share/fcitx5/rime" bash rime-install

END

总而言之,本文不仅提供了详细的步骤来确保ibus-rime及其核心组件得到最新升级,还强调了这一升级对于提升中文输入质量和个性化配置的重要性。通过遵循本文的指导,用户将能够充分利用Rime输入法引擎的最新特性,享受到更加流畅、高效且具有高度定制性的中文输入体验。

不知道大家在Linux上,还是使用ibus-rime作为输入方案么? 还是使用Fcitx5-rime了呢? 其实现在Fcitx5非常完善,但是我还是习惯使用ibus…… 习惯这东西,真实一个可怕的东西。不过,也可能是我的输入习惯,ibus已经完全够用,加上我平时操作Linux,大部分情况都是SSH远程登录,自然对输入法的需求比较少。

你是用什么输入法框架呢? 使用的rime输入方案又是什么呢? 是否是薄荷输入法呢?

相关文章:

Linux桌面环境手动编译安装librime、librime-lua以及ibus-rime,提升中文输入法体验

Linux上的输入法有很多,大体都使用了Fcitx或者iBus作为输入法的引擎。相当于有了一个很不错的“地基”,你可以在这个“地基”上盖上自己的“小别墅”。而rime输入法,就是一个“毛坯别墅”,你可以在rime的基础上,再装修…...

一文入门【NestJs】Providers

Nest学习系列 ✈️一文入门【NestJS】 ✈️一文入门【NestJs】Controllers 控制器 🚩 前言 在NestJS的世界里,理解“Providers”是构建健壮、可维护的后端服务的关键。NestJS,作为Node.js的一个现代框架,采用了Angular的一些核…...

云原生(Cloud native)

云原生(Cloud native) 一 定义 目前比较权威的定义主要来自Pivotal公司和云原生计算基金会(Cloud Native Computing Foundation,简称CNCF)。 1.1 Pivotal 4个要点: DevOps、持续交付、微服务、容器化。六…...

JVM OutOfMemoryError异常模拟

1.Java堆溢出 Java堆用于储存对象实例,我们只要不断地创建对象,并且保证 GC Roots 到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么随着对象数量的增加,总容量触及最大堆的容量限制后就会 产生内存溢出异常。 限制Java …...

架构师机器学习操作 (MLOps) 指南

MLOps 是机器学习操作的缩写,是一组实践和工具,旨在满足工程师构建模型并将其投入生产的特定需求。一些组织从一些自主开发的工具开始,这些工具在每次实验后对数据集进行版本控制,并在每个训练周期后对检查点模型进行版本控制。另…...

【学习笔记】虚幻SkeletalMesh学习(一)基础介绍

文章目录 零、前言一、资源介绍1.1 骨架资源1.2 骨架网格体资源 二、UE4中的定义2.1 骨骼数据2.2 模型网格数据 三、渲染3.1 RenderData的初始化3.2 渲染对象的创建3.3 渲染对象的更新3.3.1 游戏线程的更新(*FSkeletalMeshObjectGPUSkin::Update*)3.3.2 …...

Apache防盗链、网页压缩、网页缓存

目录 网页压缩 类型 示例 动态添加模块操作步骤 重装Apache操作步骤 网页缓存 示例 操作步骤 隐藏版本信息 操作步骤 Apache防盗链 定义 原理 配置防盗链实验环境 实验环境 本地图片盗链示例 操作步骤 防盗链示例 操作步骤 网页压缩 网站的访问速度是由多个…...

LocalAI - 笔记

1.localAI https://localai.io/ 2 使用笔记本电脑搭建本地LLMs大模型环境 使用笔记本电脑搭建本地LLMs大模型环境 - 大模型知识库|大模型训练|开箱即用的企业大模型应用平台|智能体开发|53AI 3LocalAI视频 【LocalAI】(3):超级简单&…...

Windows图形界面(GUI)-SDK-C/C++ - 编辑框(edit)

公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 编辑框(edit) 控件样式 创建控件 初始控件 消息处理 示例代码 编辑框(edit) 控件样式 编辑框(Edit Control)是Windows中最常用的控件之一,用于接收用户…...

区块链学习05-web3中solidity和move语言

Solidity 和 Move 语言的比较:Web3 开发中的两种选择 Solidity 和 Move 都是用于开发区块链平台智能合约的编程语言。它们具有一些相似之处,但也存在一些关键差异。 相似之处: Solidity 和 Move 都是图灵完备语言,这意味着它们可以表达计算…...

web滚动页面到指定位置

方法&#xff1a;scrollTo(x-coord,y-coord) 方法是Web API中Element接口的一部分&#xff0c;但它主要用于Window对象或可滚动的元素&#xff08;如具有overflow属性为auto或scroll的<div>&#xff09;。此方法用于将窗口滚动到文档中的特定位置&#xff0c;或者将某个元…...

操作系统真象还原:实现文件写入

14.7 实现文件写入 这是一个网站有所有小节的代码实现&#xff0c;同时也包含了Bochs等文件 本节要实现的 sys_write 是系统调用 write 的内核实现&#xff0c;咱们之前的 write 是个简易版&#xff0c;它是为了临时完成输出打印的功能&#xff0c;不支持文件描述符。如今要让…...

FastAPI 学习之路(四十九)WebSockets(五)修复接口测试中的问题

其实代码没有问题&#xff0c;但是我们忽略了一个问题&#xff0c;就是在正常的开发中&#xff0c;肯定是遇到过这样的情况&#xff0c;我们频繁的有客户端链接&#xff0c;断开连接&#xff0c;需要统一的管理这些链接&#xff0c;那么应该如何管理呢。其实可以声明一个类去管…...

STM32智能楼宇照明系统教程

目录 引言环境准备智能楼宇照明系统基础代码实现&#xff1a;实现智能楼宇照明系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;楼宇照明管理与优化问题解决方案与优化收尾与总结 1. 引言 智能楼宇照明系…...

【C语言】原码、反码、补码详解 -《码上有道 ! 》

目录 原码、反码、补码详解及其在C语言中的应用一、原码&#xff08;Sign-Magnitude&#xff09;1.1 定义与表示1.2 历史来源与作用1.3 示例1.4 C语言示例1.5 代码运行结果 二、反码&#xff08;Ones Complement&#xff09;2.1 定义与表示2.2 历史来源与作用2.3 示例2.4 C语言…...

C++找到错误的具体信息

fprintf(stderr, "Errno: %d, Error message: %s\n", errno, strerror(errno));为什么不用printf来打印输出&#xff1f; 使用 fprintf(stderr, …)&#xff0c;将错误消息输出到标准错误流 stderr。这种做法是为了将错误信息输出到一个专门用于记录错误的流中&…...

Windows 安装Zookeeper

安装 下载地址&#xff1a;Apache ZooKeeper 我下载的版本&#xff1a;zookeeper-3.4.12 下载后&#xff0c;解压 配置 1、 在D:\zookeeper-3.4.12文件夹中创建一个“data”文件夹和“log”文件夹 2、 复制zoo_sample.cfg&#xff0c;改名&#xff1a;zoo.cfg 修改zoo.c…...

从人工巡检到智能预警:视频AI智能监控技术在水库/河湖/水利防汛抗洪中的应用

一、背景需求分析 近日&#xff0c;我国多省市遭遇连日暴雨&#xff0c;导致水库、湖泊、河道等水域水位暴涨&#xff0c;城市内涝频发。随着夏季汛期的到来&#xff0c;降雨天气频繁&#xff0c;水利安全管理面临严峻挑战。为保障水库安全、预防和减少洪涝灾害&#xff0c;采…...

【轻松拿捏 】Java-static关键字(面试)

Java-static关键字 1. 定义和基本概念 回答要点&#xff1a; 示例回答&#xff1a; 2. static 变量 回答要点&#xff1a; 示例回答&#xff1a; 代码示例&#xff1a; 3. static方法 回答要点&#xff1a; 示例回答&#xff1a; 代码示例&#xff1a; 4. static 代…...

【阶乘】个人练习-Leetcode-LCP 22. 黑白方格画

题目链接&#xff1a;https://leetcode.cn/problems/ccw6C7/description/ 题目大意&#xff1a;给出一块白方格面积为n*n&#xff0c;给出一个数字k&#xff0c;每一次操作可以把方格的某一整行或者某一整列涂黑&#xff0c;求使得黑色格子数字为k的【最终图案】的个数。 思路…...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

ArcGIS Pro制作水平横向图例+多级标注

今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作&#xff1a;ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等&#xff08;ArcGIS出图图例8大技巧&#xff09;&#xff0c;那这次我们看看ArcGIS Pro如何更加快捷的操作。…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...