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 = librime
	url = https://github.com/rime/librime.git
[submodule "plum"]
	path = plum
	url = 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/full
  args:
  description: >-
    全量安装、更新
install_files: >-
  dicts/*.*
  opencc/*.*
  lua/*.*
  lua/aux_code/*.*
  default.yaml
  squirrel.yaml
  weasel.yaml
  ibus_rime.yaml
  rime_mint*.yaml
  double_pinyin*.schema.yaml
  t9.schema.yaml
  terra*.yaml
  stroke*.yaml
  wubi86*.yaml
  wubi98*.yaml
  symbols.yaml
  radical*.yaml
  melt_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输入方案又是什么呢? 是否是薄荷输入法呢?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/800366.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Docker之在外执行docker内部命令(十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 优质视频课程:AAOS车载系统+AOSP…

什么是CAN总线?

目录 1 CAN总线简介 2 CAN总线物理结构 2.1 CAN总线原理 2.2 CAN总线和I2C 3 CAN的电气属性 4 CAN帧的种类 4.1 CAN帧的种类 4.2 数据帧 4.3 遥控帧 1 CAN总线简介 1.1 CAN是什么? CAN总线,全称为Controller Area Network,即控制器…

【Ubuntu】安装使用pyenv - Python版本管理

当我们在Ubuntu上使用Python进行开发的时候,可能会遇到版本不兼容的问题,当然你可以选择使用apt的方式安装不同版本的python环境 但是存在一定的问题:安装不同版本的Python通常不会改变默认的python3命令指向的版本,而且就算你进行…

《云原生安全攻防》-- 容器攻击案例:Docker容器逃逸

当攻击者获得一个容器环境的shell权限时,攻击者往往会尝试进行容器逃逸,利用容器环境中的错误配置或是漏洞问题,从容器成功逃逸到宿主机,从而获取到更高的访问权限。 在本节课程中,我们将详细介绍一些常见的容器逃逸方…

知识付费小程序源码 thinkphp后台 带3000多条教程数据

知识付费小程序源码 thinkphp后台 带3000多条教程数据,云码素材有进行了更新开发,更新了广告位管理,后台一键更新数据,用户登录 不单单是一个源码,我们对接了云码素材的教程资源,也就是说你可以免费拥有云码素材所有教程资源,后台一键更新,无须自己再更新资源,每天有我们更新,…

【嵌入式开发 Linux 常用命令系列 4.4 -- repo 工具安装】

请阅读【嵌入式开发学习必备专栏 】 文章目录 Repo 工具下载Repo 安装Multiple Git Repository Tool Repo 工具下载 Repo 官网链接 Repo 安装 方法一: # Debian/Ubuntu. $ sudo apt-get install repo# Gentoo. $ sudo emerge dev-vcs/repo方法二: $ …

系统架构设计师 - 系统配置与性能评价

系统配置与性能评价 系统配置与性能评价(0 - 2分)性能指标 ★ ★硬件软件性能调整 阿姆达尔解决方案 ★性能评价方法 ★ ★ ★ 大家好呀!我是小笙,本章我主要分享系统架构设计师 - 系统配置与性能评价知识,希望内容对你…

4.定时器

原理 时钟源:定时器是内部时钟源(晶振),计数器是外部计时长度:对应TH TL计数器初值寄存器(高八位,低八位)对应的中断触发函数 中断源中断处理函数Timer0Timer0_Routine(void) interrupt 1Timer1Timer1_Routine(void) …

ubuntu虚拟机安装ssh时报错 正在等待缓存锁

问题: 连接vm ubuntu虚拟机安装ssh时报错 正在等待缓存锁。 sudo apt install openssh-server 处理办法 sudo rm /var/lib/dpkg/lock-frontend sudo rm /var/cache/apt/archives/lock sudo rm /var/lib/dpkg/lock

关于SQLException: Illegal mix of collations (`utf8mb4_general_ci,IMPLICIT`)...错误

希望文章能给到你启发和灵感~ 如果觉得文章对你有帮助的话,点赞 关注 收藏 支持一下博主吧~ 阅读指南 开篇说明一、基础环境说明1.1 硬件环境1.2 软件环境 二、报错信息三、最后 开篇说明 记录一个查询错误 场景:数据库之间某表复…

写python代码,怎么用工厂模式思维设计接口?

接口的好处 接口就是抽象方法,用来设计后架构,后端开发者和客户端调用者都可以使用这个接口规则同步写代码,客户端调用者(app、网页甚至时自动化接口测试)不用担心后端对接口的实现细节具体是什么样子的。直接去调用就…

数据结构--二叉树遍历

目录 1.介绍 (1)前序遍历 (2)定义结构体 (3)前序遍历实现 (4)中序遍历实现 (5)二叉树的节点个数 (6)二叉树树叶节点个数 &…

SpringBoot整合Swagger报错:Failed to start bean ‘documentationPluginsBootstrapper

文章目录 1 问题背景2 问题原因3 修改SpringBoot配置文件 application.properties参考 1 问题背景 Swagger是SpringBoot中常用的API文档工具,在刚接触使用的时候,按照通用的代码进行配置,发现报错了 [main] ERROR org.springframework.boot…

计算机的错误计算(三十二)

摘要 在计算机的错误计算(二十八)与(三十 一)中,我们探讨了 Visual Studio 对 6个随机exp(x)函数的计算精度问题。根据网友的反馈,本节将展示 Python 对它们的输出:结果几乎与 Visual Studio …

DataBricks Best Practice for Delta Lake

本文介绍了使用 Delta Lake 时的最佳做法。 Databricks 建议使用预测性优化。 请参阅 Delta Lake 的预测性优化。 删除并在同一位置重新创建表时,应始终使用 CREATE OR REPLACE TABLE 语句。 请参阅删除或替换 Delta 表。 移除旧版 Delta 配置 Databricks 建议在升…

实现将Nginx的每个网站配置单独的访问日志

一、问题描述 Nginx默认的访问日志是不会区分哪个网站有哪些日志的,全部糅杂在一起;如果需要哪个网站有哪些访问日志记录,还需要将访问日志下载下来后筛选,比较麻烦;希望将每个网站对应的日志能够单独记录到对应的日志文件里面,方便排查和管理。 # 进入Nginx默认的日志文…

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

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

Spring容器Bean之XML配置属性的细节

1、简单值注入使用&#xff1c;property&#xff1e;的value属性可以换一种写法 2、简单值注入使用&#xff1c;property&#xff1e;的value属性值中有些特殊的字符&#xff0c;比如< 、> 的时候可以用包裹 3、对象注入使用&#xff1c;property&#xff1e;的ref属性时…

二 GD32 MCU 烧录说明

GD32 MCU提供了多种烧录方法&#xff0c;可在调试和生产等阶段进行便捷的烧录。GD32目前主要烧录方法有ISP烧录、SWD/JTAG在线下载、脱机烧录三种类型。 ISP烧录&#xff1a;使用串口或USB即可烧录&#xff0c;无需特殊工具支持。可根据协议自行定制下载方式&#xff0c;需要控…

请你谈谈:AnnotatedBeanDefinitionReader 显式地注册一个Bean到Spring容器,以及注册并解析配置类

为了深入探讨Spring框架中的beanDefinition对象&#xff0c;我们不可避免地要提及BeanFactoryPostProcessor这一核心类&#xff0c;它作为Spring的bean工厂后置处理器发挥着关键作用。接下来&#xff0c;我们将详细讨论BeanFactoryPostProcessor的执行时机&#xff0c;这是一个…