Archlinux安装搜狗输入法
写在前面
archlinux安装搜狗输入法本不是新闻,AUR上早有大神打好了包,网上安装的文章也已经烂大街了。
这里主要为了解决从今年1月左右Archlinux安装出现 Couldn't determine full name for SGPYEUDC_1.TTF
以及 org.gnome.settings-daemon.plugins.xsettings
等问题。
前期准备
安装小企鹅输入法 fcitx
sudo pacman -S fcitx fcitx-configtool fcitx-im
配置好 ~/.xprofile
文件
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"
然后注销后重新登录,或者重启后重新登录。
安装搜狗输入法
编写代码
创建一个目录命名 fcitx-sogoupinyin
mkdir ~/fcitx-sogoupinyin
首先搞一个名字叫 PKGBUILD
的文件放到刚才创建的目录里,内容如下
# Maintainer: Bian Jiaping <ssbianjp [AT] gmail.com>
# Contributor: Jove Yu <yushijun110 [AT] gmail.com>
# Contributor: csslayer <wengxt [AT] gmail.com>
# Contributor: Felix Yan <felixonmars [AT] gmail.com>
pkgname=fcitx-sogoupinyin
pkgver=2.3.1.0112
_time=1571302197
pkgrel=1
pkgdesc="Sogou Pinyin for Linux"
arch=("x86_64")
url="https://pinyin.sogou.com/linux/"
license=("custom")
depends=("fcitx" "opencc" "libidn11" "lsb-release" "xorg-xprop" "qtwebkit")
source=("http://cdn2.ime.sogou.com/dl/index/${_time}/sogoupinyin_${pkgver}_amd64.deb")
sha256sums=("4e15aad4785b30f35a8d891de878abe8892ffaea1882f570fec74fd821d0c448")
package(){
cd ${srcdir}
tar -xJvf data.tar.xz -C "${pkgdir}"
mv "$pkgdir"/usr/lib/*-linux-gnu/fcitx "$pkgdir"/usr/lib/
rmdir "$pkgdir"/usr/lib/*-linux-gnu
# 也可以直接把字体删掉,自己酌情处理
# rm -r "$pkgdir"/usr/share/fonts
# Avoid warning "No such key "Gtk/IMModule" in schema "org.gnome.settings-daemon.plugins.xsettings""
sed -i "s#Gtk/IMModule=fcitx#overrides={'Gtk/IMModule':<'fcitx'>}#" "$pkgdir"/usr/share/glib-2.0/schemas/50_sogoupinyin.gschema.override
rm -r "$pkgdir"/usr/share/keyrings
rm -r "$pkgdir"/etc/X11
}
编译打包
makepkg -f
消除异常
方案一:去除pacman后置检查
安装前把hook移出去:
mv /usr/share/libalpm/hooks/xorg-mkfontscale.hook /tmp
安装后把hook弄回来:
mv /tmp/xorg-mkfontscale.hook /usr/share/libalpm/hooks/
方案二:删除字体
上面的 PKGBUILD
里面有两段注释,把#号去掉即可
安装自编译包
下面包名自己核对一下,这里直接贴我自己的了。
sudo pacman -U fcitx-sogoupinyin-2.3.1.0112-1-x86_64.pkg.tar.xz
安装完配置
安装完了记得注销或者重启重新登录,打开 fcitx-configtool
添加sogou pinyin。
切记!!! 搜狗输入法不要放在第一个,一定要在English下面,不然可能出现候选字乱码。玄学问题,我也不知道为啥。
原理分析
gnome问题
这个应该是gnome升级导致不兼容,或者说原来AUR的作者写的就有问题,总之改改就好了。
SGPYEUDC_1问题
这个是搜狗输入法自己弄了一些生僻字库,以前版本的archlinux是不会出现啥问题的。
新版本的archlinux(大概是2020.1或者2020.3开始),官方弄了一个叫alpm-hook
的东西,安装了fonts的相关包之后,里面带了一个xorg-mkfontscale.hook
,里面是在做mkfontscale
和mkfontdir
操作,搜狗这字体又不是啥标准规范的字体,就报错啦,不过没啥影响。安装前可以把hook配置移出去,安装完了再弄回来,或者直接把搜狗的生僻字库删掉就好了。
我们打开看看到底是啥?
下面是配置文件:
[shine@archlinux hooks]$ cat xorg-mkfontscale.hook
[Trigger]
Type = Path
Operation = Install
Operation = Upgrade
Operation = Remove
Target = usr/share/fonts/*/
Target = !usr/share/fonts/encodings/*
[Action]
Description = Updating X fontdir indices...
When = PostTransaction
Exec = /usr/share/libalpm/scripts/xorg-mkfontscale
NeedsTargets
看看实际执行脚本:
[shine@archlinux scripts]$ cat xorg-mkfontscale
#!/bin/bash
sort -r | while read -r d; do
[[ -d $d ]] || continue
mkfontscale "$d"
mkfontdir "$d"
find "$d"fonts.{scale,dir} -maxdepth 0 -size -3c -delete
rmdir --ignore-fail-on-non-empty "$d"
done