Fedora 35 + fcitx5-mozc + emacs


はじめに

下記参考記事をもとに、Fedora 35 に fcitix5-mozc 環境をつくったが、emacsにおいて、mozc.el が mozc-serverと通信できない事象にぶつかったため、解決策を検討した。

原因

Fedora 35 の mozc パッケージと、 fcitx5-mozc それぞれで mozc_server/mozc_toolを別ディレクトリでインストールしていた。
mozc_emacs_helperはmozcのみインストールさて、mozcパッケージの「/usr/libexec/mozc/mozc_server」とは通信できるが、 fcitx5-mozc由来の「/usr/libexec/fcitx5-mozc/mozc_server」とは通信できない。

$ dnf repoquery -l fcitx5-mozc --installed
/usr/lib/.build-id
中略
/usr/libexec/fcitx5-mozc
/usr/libexec/fcitx5-mozc/mozc_server
/usr/libexec/fcitx5-mozc/mozc_tool
/usr/share/doc/fcitx5-mozc
/usr/share/doc/fcitx5-mozc/README.md
/usr/share/doc/fcitx5-mozc/credits_en.html
略
$ dnf repoquery -l mozc 
Last metadata expiration check: 2:49:01 ago on Thu 24 Mar 2022 11:05:25 AM JST.
/usr/bin/mozc_emacs_helper
/usr/lib/.build-id
/usr/lib/.build-id/20
中略
/usr/libexec/mozc
/usr/libexec/mozc/documents
/usr/libexec/mozc/documents/credits_en.html
/usr/libexec/mozc/mozc_server
/usr/libexec/mozc/mozc_tool
/usr/share/emacs/site-lisp/mozc
/usr/share/emacs/site-lisp/mozc/mozc.el
略

対処方針

  • mozcパッケージはインストールしない。(= mozc_server は fcitx5-mozc のみを利用)
  • fcitx-mozc 側で mozc_emacs_helper をビルドさせる
  • mozc の site-lisp は emacs から M-x package-install でインストールする (RPM経由で /usr/share/emacs/site-lispにインストールしない)

対処内容

具体的に実施したのは以下のコマンド。rpm 向けの開発コマンドのインストール、fcitx5-mozcのソースコードの入手と展開。あとは rpmbuild のフォルダに適宜ファイルを移す(コマンド省略)。

  • sudo dnf install rpmdevtools
  • dnf download --source fcitx5-mozc
  • rpmdev-extract fcitx5-mozc-2.17.2102.102.1-14.20211205git0ad3cf5.fc35.src.rpm

spec file への変更

スペックファイルに以下の変更を加える

$ cat fcitx5-mozc.spec.diff

--- fcitx5-mozc.spec.orign	2022-03-24 13:45:56.624815976 +0900
+++ fcitx5-mozc.spec	2022-03-24 13:34:42.035351882 +0900
@@ -115,7 +115,7 @@
 QTDIR=%{_prefix} \
 GYP_DEFINES="document_dir=%{_datadir}/licenses/%{name} use_libzinnia=1 use_libprotobuf=1 zinnia_model_file=%{_datadir}/zinnia/model/tomoe/handwriting-ja.model" \
 python3 build_mozc.py gyp --gypdir=%{_bindir} --server_dir=%{server_dir} --target_platform=Linux
-python3 build_mozc.py build -c Release server/server.gyp:mozc_server gui/gui.gyp:mozc_tool unix/fcitx5/fcitx5.gyp:fcitx5-mozc
+python3 build_mozc.py build -c Release server/server.gyp:mozc_server gui/gui.gyp:mozc_tool unix/fcitx5/fcitx5.gyp:fcitx5-mozc unix/emacs/emacs.gyp:mozc_emacs_helper
 popd
 
 %install
@@ -123,6 +123,8 @@
 export _bldtype=Release
 install -D -pm 755 "out_linux/${_bldtype}/mozc_server" "%{buildroot}%{server_dir}/mozc_server"
 install -D -pm 755 "out_linux/${_bldtype}/mozc_tool"   "%{buildroot}%{server_dir}/mozc_tool"
+# emacs-common-mozc
+install -D -pm 755 "out_linux/Release/mozc_emacs_helper" "%{buildroot}%{_bindir}/mozc_emacs_helper"
 # fix install dirs in script, don't use those hardcoded paths: 
 # ${PREFIX}/share/metainfo -> _metainfodir
 sed "s|\${PREFIX}/share/metainfo|%{buildroot}%{_metainfodir}|g" -i  ../scripts/install_fcitx5
@@ -145,6 +147,7 @@
 %{_datadir}/icons/hicolor/*/apps/*
 %{_libdir}/fcitx5/fcitx5-mozc.so
 %{_metainfodir}/org.fcitx.Fcitx5.Addon.Mozc.metainfo.xml
+%{_bindir}/mozc_emacs_helper
 
 %changelog
 * Sun Dec 05 2021 Qiyu Yan <yanqiyu@fedoraproject.org> 2.17.2102.102.1-14

結果

終始したspecファイルを利用して、コンパイルを実施する。
生成したRPMファイルをインストールし、emacs に描き設定を行った

(require 'mozc)  ; or (load-file "/path/to/mozc.el")
(setq default-input-method "japanese-mozc")

まとめ

fcitx5-mozc 側で /usr/bin/mozc_emacs_helper をコンパイルし、インストールを行った。
今後バージョンアップで書き換えられないようにdnfで更新されないよう、dnf.confに「excludepkgs=fcitx5-mozc 」を設定すべきであろう。

参考URL

Fedora 35リリース! 〜最新Gnome 41採用・・fcitx5-mozcの日本語入力環境を構築する!