skk
でGoogle日本語入力の辞書を使うには
Google IME SKK サーバー 作った - hitode909の日記とか使わなきゃいけないと早合点していた。
Google IME SKK サーバーについてはruby 1.9.3でないと上手く起動しなかったり、python製の google-ime-skk-py · PyPIも動かなかったりで、ほぼ諦めていた。
しかし 2020年版。SKKでGoogle日本語入力の辞書を使う - sasasin’s blogにあるとおり wachikun/yaskkserv: Yet Another SKK serverなるものがあって、それでもGoogle日本語入力の辞書を利用することが可能だ。
既に wachikun/yaskkserv2: Yet Another SKK serverというRust製のyaskkservがあるのに、今更だが、こちらのインストールと設定をまとめておく。
追記 2021-05-03
入れてみた。
Rust製のSKKサーバーyaskkserv2をインストールして今度こそ快適に使う
追記ここまで
yaskkserv作成、インストール
Ubuntuならなんと!?sudo apt install yaskkserv
でインストールできちゃう1のだけど、コンパイルしてインストールしてみた。
$ git clone https://github.com/wachikun/yaskkserv.git
$ sudo apt install ccache libssl-dev gnutls-bin
$ cd yaskkserv
yaskkserv$ ./configure --enable-google-suggest
pkg-config (found)
GNU Make (make)
compiler g++ (9.3.0)
iconv.h (argument "char *" found)
SSL OpenSSL
SSL OpenSSL RAND_poll() (found)
*** Warning : SD_LISTEN_FDS_START and sd_listen_fds are not found
MSG_NOSIGNAL (found)
RESOLV_RETRANS_RETRY (found)
timer_create() (found)
pthread (found)
c++11 supported
ccache (found)
************************************
** enable google japanese input ! **
** enable google suggest ! **
************************************
基本gitに書いてあるままだが、デフォルトではgoogle suggestが無効なので./configure --enable-google-suggest
とオプションを付ける必要がある。
また、自環境でそのまま./configure
したときは
*** Warning : GnuTLS not found(or disable)
*** Warning : OpenSSL not found(or disable)
が出たのでsudo apt install ccache libssl-dev gnutls-bin
している。
*** Warning : SD_LISTEN_FDS_START and sd_listen_fds are not found
については単純にアプリをインストールしたり、環境変数を定義すれば解消される話でもなかったようなので、無視した。
yaskkserv$ make
yaskkserv$ sudo make install_hairy
mkdir -p /usr/local/bin
install /home/arimasou16/git/yaskkserv/var/bsd_cygwin_linux_gcc/release/yaskkserv_make_dictionary/yaskkserv_make_dictionary /usr/local/bin/yaskkserv_make_dictionary
mkdir -p /usr/local/sbin
install /home/arimasou16/git/yaskkserv/var/bsd_cygwin_linux_gcc/release/yaskkserv_hairy/yaskkserv_hairy /usr/local/sbin/yaskkserv
yaskkserv_simple
だとgoogle suggestとかオプションが使えなそうなので、yaskkserv_simple
をyaskkserv
という名前でインストールするためmake install_hairy
を実行した。yaskkserv_simple
、yaskkserv_normal
、yaskkserv_hairy
と使い分けるならmake install_all
。
専用の辞書を作成
yaskkserv_make_dictionary /usr/share/skk/SKK-JISYO.L /home/arimasou16/.config/fcitx/skk/SKK-JISYO.L.yaskkserv
systemdを使ってユーザーサービス登録(結果fcitxが起動しなくなる)
systemd の socket activation を利用する
examples ディレクトリにある unit ファイルをインストールすることで、systemd の socket activation を利用して起動することができる。
良く分からんかったが、 サーバー起動時に非rootユーザーでsystemdを使ってサービスを立ち上げる - Qiitaということらしい。なるほど、完全に理解した。
yaskkserv/examplesにあるservice、socketファイルを$HOME
以下の適当な場所にコピーして ExecStartを自分の環境、用途に合わせて書き換える。
yaskkserv.service
[Unit]
Description=Yet Another SKK server
After=yaskkserv.socket
Requires=yaskkserv.socket
[Service]
ExecStart=yaskkserv --google-japanese-input=notfound-suggest-input --google-suggest /home/arimasou16/.config/fcitx/skk/SKK-JISYO.L.yaskkserv
[Install]
WantedBy=multi-user.target
User=nobody
は削除。あるとyaskkserv.service: Failed to determine supplementary groups: Operation not permitted
と言ったエラーが出る。
If you want to start the service as a user service then the User/Group is not needed ユーザーサービスとしてサービスを開始する場合は、ユーザー/グループは不要
とのこと。またファイルパスは~/
といった指定はできない。dictionary file "~/.config/fcitx/skk/SKK-JISYO.L.yaskkserv" (index = 0) not found
とファイルが見付からないとエラーになる。
このファイルを使って
$ systemctl --user enable /home/arimasou16/Nextcloud/Public_Ubuntu/skk/yaskkserv.service
$ systemctl --user enable /home/arimasou16/Nextcloud/Public_Ubuntu/skk/yaskkserv.socket
とやれば
Created symlink /home/arimasou16/.config/systemd/user/multi-user.target.wants/yaskkserv.service → /home/arimasou16/Nextcloud/Public_Ubuntu/skk/yaskkserv.service.
Created symlink /home/arimasou16/.config/systemd/user/yaskkserv.service → /home/arimasou16/Nextcloud/Public_Ubuntu/skk/yaskkserv.service.
と勝手に/home/arimasou16/.config/systemd/user
フォルダ作成やリンクを張ってくれる。
登録することでログイン時に起動するようになったのだけど…IM(Input Method)がおかしくなる。IMの切り替えが出来ない。キーボードのアイコンすら表示されない。
systemdを使ってシステムサービス登録(結果、変換時に固まる)
今度はユーザーではなくシステムとしてサービス登録してみる。さっきと違うのは置く場所、ユーザーの指定がいるようになったぐらいか。
参考にしたのは、これ↓
Systemdを使ってさくっと自作コマンドをサービス化してみる - Qiita
yaskkserv.service
[Unit]
Description=Yet Another SKK server
After=yaskkserv.socket
Requires=yaskkserv.socket
[Service]
User=arimasou16
ExecStart=yaskkserv --google-japanese-input=notfound-suggest-input --google-suggest /home/arimasou16/.config/fcitx/skk/SKK-JISYO.L.yaskkserv
[Install]
WantedBy=multi-user.target
今度はUser=arimasou16
を追加する。ちゃんとした実行ユーザーでないとfile owner must be root or same euid
とエラーになる。
$ sudo cp /home/arimasou16/yaskkserv.* /etc/systemd/system/
$ sudo systemctl list-unit-files --type=service | grep yaskkserv
yaskkserv.service disabled enabled
$ sudo systemctl enable yaskkserv
$ sudo systemctl start yaskkserv
成功するのだけど、変換時に固まる。
arimasou16@Aerobookplus:~$ sudo systemctl status yaskkserv
● yaskkserv.service - Yet Another SKK server
Loaded: loaded (/etc/systemd/system/yaskkserv.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2021-04-10 18:24:50 JST; 1s ago
TriggeredBy: ● yaskkserv.socket
Main PID: 3140 (yaskkserv)
Tasks: 1 (limit: 9325)
Memory: 752.0K
CGroup: /system.slice/yaskkserv.service
└─3140 /usr/local/sbin/yaskkserv --google-japanese-input=notfound-suggest-input --google-suggest /home/arimasou16/.config/fcitx/skk/SKK-JISYO.L.yaskkserv
4月 10 18:24:50 Aerobookplus systemd[1]: Started Yet Another SKK server.
4月 10 18:24:50 Aerobookplus yaskkserv_hairy[3140]: google japanese input (protocol=https)
4月 10 18:24:50 Aerobookplus yaskkserv_hairy[3140]: google suggest (protocol=https)
ふうむ、普通にコマンド打つときは問題ないのだけど、どうもsystemd
経由だと上手く行かない。--no-daemonize
を付けても駄目。私の設定、やり方がおかしいのだろう。もしくは*** Warning : SD_LISTEN_FDS_START and sd_listen_fds are not found
がやはり影響しているのか…
skkservをアプリケーション自動起動に登録
しょうがないのでアプリケーション自動起動に
名称 | コマンド | システムトレイを待つ |
---|---|---|
Yet Another SKK server | yaskkserv –google-japanese-input=notfound-suggest-input –google-suggest /home/arimasou16/.config/fcitx/skk/SKK-JISYO.L.yaskkserv |
と登録する。
もしくは*~/.config/autostart/
配下に アプリ.desktop を作成する。結果として同じである。ちなみにシステムとしてのアプリケーション自動起動の設定ディレクトリは/etc/xdg/autostart
のようだ。
~/.config/autostart/Yet Another SKK server.desktop
[Desktop Entry]
Exec=yaskkserv --google-japanese-input=notfound-suggest-input --google-suggest /home/arimasou16/.config/fcitx/skk/SKK-JISYO.L.yaskkserv
Name=Yet Another SKK server
Type=Application
Version=1.0
これで行なった場合、
$ lsof -i:1178
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
yaskkserv 1182 arimasou16 5u IPv4 36107 0t0 TCP *:skkserv (LISTEN)
と起動される。
fcitx-skkへのSKKサーバー登録
順番が前後したけれども、fcitx-skkへのSKKサーバー登録のやりかたとしては、まずfcitx-skk
の辞書マネージャーを使う。しかし、明らかに壊れている。一応は動いてるらしくて、一番上のボタンが追加となっている。
形式 | ホスト | ポート |
---|---|---|
SKKサーバー | localhost | 1178 |
と入力して、保存すれば設定される。が、再度開くと、見えない。
~/.config/fcitx/skk/dictionary_list から確認にできる。もしくは下になるようにこのファイルを編集してしまえば良い。
host=localhost,port=1178,type=server
file=$FCITX_CONFIG_DIR/skk/user.dict,mode=readwrite,type=file
file=/usr/share/skk/SKK-JISYO.L,mode=readonly,type=file
その他、このファイルの細かい設定については SKKな話 (fcitx-skk) – Omong Kosong Lagiが詳しい。
vimへのSKKサーバー登録
eskk.vimでの使用は簡単で、以下を追記するだけ。typeとか余計なものを付けると動かない。
let g:eskk#server = {
\ 'host': 'localhost',
\ 'port': 1178,
\}
fcitx-skkで変換できない
さて、このようにちゃんと?設定しているのに、nvim
で試すとちゃんと変換されるのに、fcitx-skk
からは変換できない。
しかも良く分からないのは、GUIから再起動すると固まってしまう。
しかし、fcitx-remote -r
なら、問題なくできる。そして、その後はちゃんとGoogle日本語入力による変換が働く。
実行のタイミングによるものか?
sleep 10;fcitx-remote -r
をアプケーション自動起動としても、駄目。うーん、毎回手動でこれをするのは嫌なんだが…
追記 2021-05-03
~/.profile に追記すればちゃんと有効化された
追記ここまで
-
この記事書いてるときにあれこれ確認していて知った ↩︎