前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux桌面环境手动编译安装librime、librime-lua以及ibus-rime,提升中文输入法体验

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

原创
作者头像
Mintimate
发布于 2024-07-13 06:52:31
发布于 2024-07-13 06:52:31
8310
举报
文章被收录于专栏:Mintimate's BlogMintimate's Blog

大部分开发者,可能都使用Linux作为服务器,但是有些情况,也需要Linux桌面环境,方便进行更为仿真的测开、测试等。那么,输入法就是一个问题了。

头图不能少( ̄∇ ̄)
头图不能少( ̄∇ ̄)

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

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

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

ibus-rime

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

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

代码语言:bash
AI代码解释
复制
# 更新软件包管理器
sudo apt update
# 安装ibus-rime
sudo apt install ibus-rime

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

在Kali上安装ibus-rime后,GNOME内添加输入
在Kali上安装ibus-rime后,GNOME内添加输入

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

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

代码语言:bash
AI代码解释
复制
# 查找系统自带的librime版本
find /usr/lib /usr/local/lib /opt -name "librime.so*"
librime的版本是1.8.5
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两个部分,所以我们也需要卸载这两个的相关软件包:

代码语言:bash
AI代码解释
复制
# 卸载ibus-rime
sudo apt purge ibus-rime
# 卸载librime有关依赖
sudo apt purge librime*

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

卸载相关旧的依赖
卸载相关旧的依赖

安装编译依赖

首先根据官方文档:

特别注意,我们需要:

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

综上,我们安装依赖:

代码语言:bash
AI代码解释
复制
# 安装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的版本:

代码语言:bash
AI代码解释
复制
cmake --version
检查cmake的版本
检查cmake的版本

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

代码语言:bash
AI代码解释
复制
# 切换工作路径
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

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

ibus-rime源码

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

代码语言:bash
AI代码解释
复制
git clone https://github.com/rime/ibus-rime.git

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

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

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

代码语言:bash .gitmodules
AI代码解释
复制
[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命令切换一下:

代码语言:bash
AI代码解释
复制
git checkout master
切换分支
切换分支

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

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

librime-lua

根据项目地址:

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

代码语言:bash
AI代码解释
复制
# 自动下载librime插件
bash install-plugins.sh hchunhui/librime-lua
自动下载librime-lua插件
自动下载librime-lua插件

合并插件

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

代码语言:bash
AI代码解释
复制
make merged-plugins

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

内存占用过高而被killed
内存占用过高而被killed

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

代码语言:bash
AI代码解释
复制
# 使用两个进程进行编译
make merged-plugins -j2
限制线程编译
限制线程编译
合并插件完成
合并插件完成

编译安装

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

代码语言:bash
AI代码解释
复制
# 编译
make
# 安装
sudo make install

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

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

plum

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

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

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

代码语言:bash
AI代码解释
复制
# 编译并安装
make && sudo make install
编译plum
编译plum
安装plum
安装plum

编译ibus-rime

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

代码语言:bash
AI代码解释
复制
# 编译
make
# 安装
sudo make install

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

编译安装ibus-rime完成
编译安装ibus-rime完成

使用ibus-rime

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

在Gnome内添加rime
在Gnome内添加rime

之后就可以使用了。

Opt:plum安装薄荷

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

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

代码语言:bash
AI代码解释
复制
rime-install Mintimate/oh-my-rime:plum/full

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

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

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

代码语言:yaml
AI代码解释
复制
# 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的目录内
再次进入plum的目录内

可以看到,二进制文件rime-install,我们就使用二进制配置薄荷输入法方案:

代码语言:bash
AI代码解释
复制
./rime-install Mintimate/oh-my-rime:plum/full

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

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

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

代码语言:bash
AI代码解释
复制
# 提前明确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输入方案又是什么呢? 是否是薄荷输入法呢?

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
TKE创建的容器如何被别的vpc下云主机访问?
此专栏是为了“补货”一些官网没有的操作文档,大家走过路过,可以留言告诉我,哪里写的不清不楚的地方,洒家给它整明白了、
pengsiryan
2020/01/03
3.4K0
NAT网关的应用
NAT 网关(NAT Gateway)是一种支持 IP 地址转换服务,提供 SNAT 和 DNAT 能力,可为私有网络(VPC)内的资源提供安全、高性能的 Internet 访问服务。
研究僧
2020/06/21
3.6K0
公网网关
之前突然有客户问起这个东西,纠结是购买公网网关还是NAT网关,经过一番了解后,我推荐了公网网关。
相柳
2019/03/13
8.3K5
公网网关
tke集群固定ip模式pod如何绑定eip访问公网
业务部署到tke集群中,很多时候需要通过公网去调用第三方接口服务,正常pod访问公网是依赖于节点访问公网的能力,节点访问公网可以给节点绑定公网ip或者给vpc绑定nat网关。其实在tke中,我们还可以给pod绑定弹性公网ip(eip),让pod通过绑定的eip去访问公网。下面我们来说说如何给pod配置eip,并通过eip去访问公网。
聂伟星
2021/10/31
7.9K2
玩转腾讯云-云上网络实操
本文带大家一起通过实操方式来学习腾讯云私有网络管理,通过弹性公网IP、NAT网关访问Internet,通过安全组、ACL进行网络访问控制。对等连接、云联网实现跨地域网络访问等网络互联实操请参阅:玩转腾讯云-网络互联实操。
hsp
2022/05/15
8.6K0
玩转CVM之外网不通排查
在用户使用CVM的过程中,经常会出现访问外网不通的情况。外网不通的原因从平台到系统都有可能会出现,在排查的时候涉及的方面有很多。基于此,本文提供详细的排查思路帮助各位解决类似的问题。
苏欣
2019/07/23
19.1K0
如何利用腾讯云BGP网络提升客户外网出口的冗余
最近几年,互联网公司发展迅速,有很多互联网公司本身的基础架构都构建在一些公有云厂商之上,除了节省初期投资之外,另外也是借助于一些大的云厂商本身的网络能力,实现业务更好的覆盖。
张小波
2018/10/25
6.9K2
网络产品使用场景及各种坑规避
子区:类似于广州一区、广州二区这种,一个地域含有多个子区,对应于aws就是zone;
用户7316624
2020/07/17
6.5K0
网络产品使用场景及各种坑规避
容灾系列(七)——混合云公网出口容灾建设
企业系统架构的形态为混合云模式,即IDC和云平台共同承载线上业务流量,来保证业务高可用。墨菲定律告诉我们,如果事情有变坏的可能,不管这种可能性有多小,它总会发生。如果IDC公网出口异常,IDC内业务要访问第三方服务,如何实现高可用呢?本文结合云平台公网能力,从网络平台角度来分析容灾建设可行性。
开元
2021/12/29
3.4K0
容灾系列(七)——混合云公网出口容灾建设
TEZ API 文档
腾讯云计算产品团队
2023/07/26
7020
如何最便捷的打通不同地区的容器集群网络?
此专栏是为了“补货”一些官网没有的操作文档,大家走过路过,可以留言告诉我,哪里写的不清不楚的地方,洒家给它整明白了、
pengsiryan
2020/01/17
8170
全面理解云上网络
作者:ronaldoliu,腾讯 IEG 后台开发工程师 公司一直在推动业务上云,同时越来越多的项目也要开始出海,对云的依赖会越来越多。但是云并不像它宣传的那么简单易用,尤其是云上网络,是大家理解云的一大阻碍。本文比较全面地梳理了云上网络的各种概念以及简要的原理,希望能够帮助大家建立一个知识索引,以备不时之需。由于本人不是云的专家,因此文章中有不对的地方也欢迎指正。 私有网络 VPC VPC 全称 Virtual Private Cloud,翻译成私有网络其实不太准确,但是它确实就是对网络资源的一种抽象。我
腾讯技术工程官方号
2022/06/20
12.3K1
全面理解云上网络
TKE 容器外网访问能力介绍
当前的实现是让容器访问外网的数据包 SNAT 为节点 IP 出去,所以容器具备外网访问能力依赖于节点具备外网访问能力。
zhaoqiyuan
2020/03/13
4.6K0
公网IP 申请 与 配置
公司是电信的家庭千兆宽带,我直接打电信客服 转人工,直接要的公网IP!什么理由都不要,基本上午要,下午就可以了。过程一共3个电话。一个是我打给电信客服的申请电话,一个是电信专员询问我做公网是不是单个路由进行配置的确认电话,另一个就是电信客服回复我:公网IP 申请成功,并让我重新登录一下宽带猫的宽带账号,就可以使用了!!!切记,要重新登录一下猫的宽带账号,重启是无效的!
收心
2022/01/19
10K0
公网IP 申请 与 配置
跨VPC或者跨云供应商搭建K8S集群正确姿势-番外篇
上周发了几篇关于Kubernetes集群搭建相关的文章,里面有一个部分谈到了Kubernetes集群CNI插件(也就是容器网络接口)的部署,很多读者看到了这个部分之后有问到“如何跨VPC或者跨云供应商打通集群之间的网络访问”,我当时搭建集群和写文章的时候也没有注意这点,只是根据以往的经验单纯地把几台机器搞在一起再加上部署好CNI就想当然的以为Kubernetes集群算是“全网通”了。经过读者的提醒和自己的实践,发现忽略了一个严重的问题,也是大多数人在个人搭建Kubernetes集群常常会碰到的问题,也是就今天需要谈论的问题---“如何跨VPC或者跨云供应商搭建Kubernetes集群,保证集群网络互通”。
云爬虫技术研究笔记
2020/02/19
3.3K1
跨VPC或者跨云供应商搭建K8S集群正确姿势-番外篇
腾讯云 ES Kibana 内网访问有问题,怎么办?
最近经常遇到内部客户、外部客户使用Kibana内网访问ES集群的时候出现各种问题,因为涉及的流程比较多,今天特花点时间梳理一下这部分内容。
南非骆驼说大数据
2021/03/04
5.2K0
内网穿透和公网ip什么区别
在远程访问、企业组网等场景中,内网穿透和公网IP是两种常见的解决方案,但它们的原理、成本和使用方式截然不同。
零讯
2025/05/14
1300
内网穿透和公网ip什么区别
NAS 篇二:外网访问NAS上面的应用
一开始跟客服说客服说办理专网才有公网IP,申请失败!(客服可能理解错了,要的不是固定的公网IP,有钱当然随意了)
IT小马哥
2020/04/08
10.2K2
配置使用 Snat 实现内网代理上网
NAT 全名是 Network Address Translation,字面上的意思是网络地址转换,它还可以分为源地址转换(SNAT)和目的地址转换(DNAT)。SNAT 主要是用来给内网的主机提供连接到 Internet 的默认网关,而 DNAT 主要将内网机器的端口映射到外网上面。
民工哥
2021/10/18
1.9K0
配置使用 Snat 实现内网代理上网
neutron外网支持多子网
外网有一个子网,子网的ip地址用完了,需要添加新的外网地址段,同一个内网子网上有两个虚拟机,分别绑定这两个外网子网的fip。
惠伟
2021/02/24
1.7K0
neutron外网支持多子网
推荐阅读
相关推荐
TKE创建的容器如何被别的vpc下云主机访问?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档