俺用Ubuntu(9.10)でのskk関連まとめメモ

9.10でデフォルトとなったibusには今のところ安定したskkが使えない状況。以前はSCIMSKKを利用していたが、接頭語などの入力の機能がなかった。なので今回はuimを利用してみようと思う。

uimのインストール

素のリポジトリにあるuimはなにやらFirefoxがハングしたりするバグがあるらしい。しかし日本の開発者向けリポジトリにバグフィクスされたuimがあるとのことなのでskkと一緒にインストールする。

sudo add-apt-repository ppa:japanese-testers/ppa
sudo apt-get update
sudo apt-get install uim uim-skk uim-gtk2.20
sudo rm /etc/apt/sources.list.d/japanese-testers-ppa-karmic.list*
synapticでjapanese-testers-ppaの公開鍵を削除。

今回はuimだけ入れて他のアプリはアップデートさせたくなかったため登録しているリポジトリを削除しています。
今のところFirefoxがハングったりはせず普通に使えている。

uimの設定

uimでの設定は起動の仕方やキーアサインなどをちょこちょこっといじる。ローマ字入力をしやすく拡張するAZIKを有効にする。uim-skkを入れて初めて知ったんですけどね、AZIK。実際かなり便利です。慣れるまでに時間がかかりそうですけれど…。他にはskkサーバの設定せねばいけないがあとで設定することにする。

skk辞書

skkの辞書は複数使いたい。基本としてL辞書、人名辞典、地名辞典、あとは時事ワードの辞書としてはてなキーワード辞典を入れてみようと思う。他は必要に応じて入れる感じにしていこう。はてなキーワード辞典以外は公式でまとめられているのでそこからダウンロード。はてなキーワード辞典は

ここスクリプトをコピペして保存しておく。名前は「keywordlist_furigana2skkdic.rb」としておく。
wget http://d.hatena.ne.jp/images/keyword/keywordlist_furigana.csv
ruby keywordlist_furigana2skkdic.rb keywordlist_furigana.csv > tmp.skkdic
skkdic-expr2 -o keywordlist_furigana.skkdic tmp.skkdic

で生成する。
この時、後述するが、文字化けしていてもUTF-8に変換しない方がいいと思う。
skkdic-expr2は公式のメンテナンスツールとして提供されている。ここで一つ詰みかかったのが、このメンテナンスツール群をmakeする時に「〜が宣言していません」というコンパイルエラーをたくさん吐いたこと。Cのソースを追ってみると、データベース関連の必須なライブラリがインストールされていないために、構造体が宣言されている箇所がコンパイルされていなかったためというオチだった。と、いうことでここで必要な「libgdbm-dev」をインストールすることで無事makeすることができた。できればこういう必須なライブラリが無い時はconfigureを掛けた時にエラーを吐いて止まってくれれば大分助かるのだが…。まぁこれも漢のmakeビルドの醍醐味ということにしておこう。
skkの辞書はふりがな(見出し語)と変換後の文字があれば作れそうだ。必要なったら自分でもスクレイピングとかして作ってみたい。

skkサーバ

uimskkでは基本的に一つの辞書(個人辞書は除く)のみ参照できます。複数の辞書を使うにはskkサーバが必要です。
aptからインストールできるskkサーバはskksearchが主流っぽいのでskksearchをインストール。辞書のcdb変換に必要なskktoolsもインストールしておく。流れとしてはここを参照したら導入できる。ここでの注意点は辞書の文字コード。どうもuim-skk、skkseach共に辞書の文字コードとしてeuc-jpを使用しているようである。なのでUTF-8エンコードでしてcdb化したりするときちんと変換してくれないので注意である。インストールした時に一緒に付いてきた辞書の文字コードと合わせるのがベター、ベストな判断だと思う。文字コード

nkf -g ファイル

で調べられるよ。fileコマンドでも調べられるけどnkfの方が正確みたい。
skkサーバの設定が終わったら、uimskkサーバを使う設定をする。

もし変換に失敗していたら…

これまでの作業をして、無事導入でき、変換されたらバンバンザイ。でも今回まったくもって変換がうまくいかなかったので、その時調べたこと・調べ方をメモしておく。

  • uimとskksearchが通信できているか
netstat -atp | grep skk

でポートとプロセスの関係、接続状況を調べる。
うまく接続できていれば

tcp        0      0 *:skkserv               *:*                     LISTEN      -               
tcp        0      0 localhost:skkserv       localhost:53211         ESTABLISHED -               
tcp        0      0 localhost:53250         localhost:skkserv       ESTABLISHED 2121/gnome-terminal
tcp        0      0 localhost:43046         localhost:skkserv       ESTABLISHED 2568/firefox  

のように、入力しているアプリと接続していると思う。uimそのものと通信しているわけではないみたいだ、よくわからんが。また、Listen状態でもあるので正常にskkサーバが起動しているのも分かる。

  • 接続できていたら、skksearchが正常に応答するか
telnet localhost skkserv

でサーバと直に通信してみる。skkサーバはskkservというプロトコル(ここではポート名も一緒なので注意)で通信しているので

1a //最後にスペース

などの変換リクエストを送ってみて反応を見る。変換リクエストは最後にスペースを入れなければうまく検索しないようだ。また日本語(2バイト文字)を送信する場合は、文字コードに注意すること。

  • それでもうまく変換されない時は、辞書やuim自身の設定を疑ってみる。

今回はここで、辞書の文字コード問題を発見できた。

  • あとはググったり、manで調べる。ひたすらに。泥臭く。

参考

136 名前: 名無しさん@お腹いっぱい。 投稿日:02/08/25 22:41

    んじゃSKK

    % telnet localhost skkserv
    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    1ひろゆき
    1/周行/浩之/博幸/裕之/幸展/広之/洋之/宏行/寛之/弘之/博之/裕幸/裕行/宏幸/宏之/広行/博行/陽之/広幸/弘幸/弘行/弘征/祐之/裕由/浩幸/啓之/弘恭/洋征/
    ^]
    telnet> c
    Connection closed.

*俺補足:「Conection closed」するには「0」を送信してもできる。

Ubuntuのスティッキー・キー

あと今更ながらubuntuでSticky shiftっぽいことがデフォルトでできることを知る。がびーん。キーボードの設定からアクセシビリティのタブのスティッキー・キーで設定できる。これでshiftキーを押しっぱなしにしなくても一回押して他のキーを押せばshiftキーと一緒に押したことになる。これでskk使ってる時の親指酷使は和らぐ。しかしこの機能はAltキーやCtrlキーまでスティッキーなことになるので、下手すると重要なことを入力中に誤ってファンタスティックなことになるかもしれない。というかなった。現実は非情である。「Linux版の窓使いの憂鬱」をインストールすれば使えるらしいが、そこまでって感じ。IMかFEPレベルで対応してくれれば非常に助かるのになあ。

skk.vimとの併用

skk.vimとの併用はvi互換モードで誤魔化してしまうか思案中である。これはskk.vimではskkサーバが使えないぽっいからなんですが。skk.vimでのスティッキーシフト(めちゃくちゃ使いやすいです)、uimでの辞書の使い勝手、AZIKの便利さなどを天秤に掛けていけば、おいおい方針が決まるだろう。

まとめ

skkサーバでの変換がうまくいかなかったら、文字コードを疑え!