top page > PC unix > here

FreeBSD における Wnn 7


概要

FreeBSD/i386 7, 8 系や FreeBSD/amd64 8, 9, 10 系に Wnn 7 を導入する方法を提示します.

検討した環境は次のようなものです.

  1. OS は FreeBSD/i386 7.2, 8.2, 8.3, 8.4 および FreeBSD/amd64 8.4, 9.3, 10.3 です.
  2. xemacs の version は 21.4 です.
  3. mule の version は,2.3 です.
  4. emacs の version は 24.3, 24.4, 24.5 です.

目次

1. 概況
2. 最新の環境への導入
2.1 Wnn 7 の導入と更新
2.2 FreeBSD/i386 7.2 における設定
2.3 FreeBSD/i386 8.2 における設定
3. emacs 21 以降への対応
4. FreeBSD/amd64 への対応
5. Wnn 7 と pkgng
6. 諸設定
6.1 xemacs, emacs
6.2 mule
7. 辞書のメンテナンス

1. 概況

Wnn 7 は 2005 年に FreeBSD 4.10 用のものが出て以来,更新されておりません. これを比較的新しい FreeBSD において使おうとすると,様々な問題が生じます. すなわち,

  1. Wnn7 が使っている library がない.
  2. emacs は 20 にしか対応していない. (xemacs は 21 に対応しているので問題ない.)
  3. FreeBSD/i386 には対応しているが,FreeBSD/amd64 には対応していない.

これらの問題は,各々次のように対処すれば解決可能です. (解決できない組み合わせもあります.)

  1. misc/compat?x を利用する.
  2. emacs 21 以上に対応させる patch を利用する.
  3. emacs は,FreeBSD/amd64 に対応させる patch を利用する. (xemacs にはこの patch がありません.)

ちなみに,うちでは日本語を多用する PC にて,辞書も移設しつつ Wnn 7 を使い続けております. それ以外の PC では FreeWnn を使っております.

Wnn 8 は,少なくとも発表当初は FreeBSD で使えなかったので購入しないで待っていたら,「旧バージョンユーザ優待販売」の権利を失効してしまいました. 最新の FreeBSD + (x)emacs で使える Wnn があれば購入する意思はあるのですが.

→ 2013.11.21 に Ver1.01 が出て「FreeBSD 対応/最新OS対応/64bit 対応」になりました. 機能の制限がありつつも Wnn 7 の wnn7egg と同様の使い方もできるようです. 時間に余裕ができたら挑戦してみます.

2. 最新の環境への導入

これを書いた時点では「最新」でしたが,今となっては少々古いです. より新しい環境の話は続く節にて述べます.

2.1  Wnn 7 の導入と更新

(1) CD-ROM から旧版を導入します.
  CD-ROM を mount して,次のようにします.

# sh ./Install

インストール方法は「(1)フルインストール」を選択します.

(2) 最新版に更新します.
  オムロンソフトウェア から最新版を download し,対応する旧版を pkg_delete し,最新版を pkg_add します.
  FreeBSD 4.10 用の最新版は以下のものです.[1]

dpkey7-1.01_3.tgz                  2002.12.12
ja-wnn7-utils-1.01_2.tgz           2002.12.12
ja-wnn7-elisp-1.02_1.tgz           2002. 6. 4
ja-wnn7-server-fb4-1.01_3.tgz      2004. 9.17
ja-wnn7-xclients-fb4-1.03_3.tgz    2004. 3. 2
ja-wnn7-maindic-1.01_2.tgz         2002. 2.10
ja-wnn7-optiondic-1.01_2.tgz       2002. 2.10

旧版を pkg_delete する前に,稼働中の dpkeyjserver を停止します.

# cd /usr/local/etc/rc.d
# ./dpkey7.sh stop
# ./wnn7.sh stop

# pkg_delete -f dpkey7-*
# pkg_delete -f ja-wnn7-*

最新版を pkg_add したら,OS を reboot するかまたは次のようにします.

# cd /usr/local/etc/rc.d
# ./dpkey7.sh start
# ./wnn7.sh start

(3) 諸設定を行ないます.
  ユーザー辞書のための directory の owner/group を変更します.

# cd /usr/local/lib/wnn7
# chown bin dic; chgrp bin dic

/etc/services に以下の内容が書き加えられているか確認します. (無ければエディターで書き込みます.)

wnn7            22273/tcp  #Wnn7 (Japanese input)

.cshrc 等にて環境変数 JSERVER を設定します. (以下の例はネットワークを使わない場合.)

setenv JSERVER localhost

[1] FreeBSD 5.2 用の最新版も出ております. (elisp と辞書は 4.10 用のものと共通です.)

dpkey7-fb5-1.01_1.tbz              2004. 4.23
ja-wnn7-server-fb5-1.01_2.tbz      2004. 4.23
ja-wnn7-utils-fb5-1.01_1.tbz       2004. 4.23
ja-wnn7-xclients-fb5-1.03_2.tbz    2004. 4.23

2.2  FreeBSD/i386 7.2 における設定

Wnn 7 は FreeBSD 4.10 にて libc.so.4, libcrypt.so.2, libm.so.2 を使います. FreeBSD 7.2 ではもうこれらはないので misc/compat4x を導入する必要がありますが,そうすると security に関して警告が出ます. (この当時は気付きませんでしたが,これは次節に示す方法で解決するように思えます.)

それゆえ,compat4x は導入せずに次のようにしました.

# cd /usr/lib
# ln -s /lib/libc.so.7 libc.so.4
# ln -s /lib/libcrypt.so.4 libcrypt.so.2
# ln -s /lib/libm.so.5 libm.so.2

library の互換性が不安ですが,これで 4 年近く使ってエラーは一度も出ませんでした.

2.3  FreeBSD/i386 8.2 における設定

以下に記したことは,FreeBSD/i386 8.3, 8.4 においても同様です.

上記のようにすると,libc.so.7 に関連してエラーが出て dpkeyserve が動きません. 素直に compat4x を導入します. ただし,これには libcrypt.so.2 が含まれていないので,次のようにします.[2]

# cd /usr/local/lib/compat/
# ln -s /lib/libcrypt.so.5 libcrypt.so.2

compat4x を使うために,/etc/rc.conf に以下の内容を加えます.

compat4x_enable="YES"

[2] こちらも library の互換性が不安ですが,エラーは一度も出ませんでした.

一方,FreeBSD 5.2 用の Wnn 7 を使うならば compat5x を導入します. これには libcrypt.so.2 は含まれていますが,libm.so.2 がありませんので,次のようにします.

# cd /usr/local/lib/compat/
# ln -s libm.so.3 libm.so.2

compat5x を使うために,/etc/rc.conf に以下の内容を加えます.

compat5x_enable="YES"

(注) FreeBSD/amd64 の場合は,/usr/local/lib/compat//usr/local/lib32/compat/ に読み換えて下さい.

3. emacs 21 以降への対応

Wnn 7 は emacs 20 にしか対応しておらず,それ以降の emacs で用いると正常に動作しない機能があります. この問題には次のように対処します.

(1) 以下の URL から patch を取得します.

% fetch http://www.jpl.org/ftp/pub/elisp/wnn7-elisp-el-1.02-1.patch.gz
% gzip -d elisp/wnn7-elisp-el-1.02-1.patch.gz

解凍しなくても patch をあてることはできますが,中身は読みましょう.

(2) backup をとります.

# cd /usr/local/lib/wnn7/elisp
# cp -pR emacs20 emacs20.orig

(3) patch をあてます.

# cd /usr/local/lib
# patch <  (patch のあるところ)/wnn7-elisp-el-1.02-1.patch

(4) 修正されたソースを byte compile します. (FreeBSD/amd64 に対応させる場合には,この作業は 4 節の修正が終わってから.)

# cd /usr/local/lib/wnn7/elisp/emacs20
# rm *.orig         ← backup は取ってあるので消してかまいません.
# emacs &
M-x byte-compile-file

以下のソースを compile します.一括はできないようなので一つずつです.
wnn7egg-cnv.el
wnn7egg-com.el
wnn7egg-jsymbol.el
wnn7egg-rpc.el
wnn7egg.el
wnn7egg-edep.el    ← これは FreeBSD/amd64 に対応させる場合のみ.

4. FreeBSD/amd64 への対応

Wnn 7 は i386 用に作成されているので,amd64 の環境では正常に動作しません.

emacs に対しては,以下の URL に patch (wnn7-egg-backend-timeout.patch) が配布されております. これを活用して,正常に動作するようになりました.

http://yanmoo.blogspot.jp/2011/07/64bitemacswnn7eggbackend-timeout.html

一方,xemacs に対しては,これに相当する patch は公開されておりません. xemacs を起動した後の最初の漢字の変換が始まるのに少々時間がかかることを除けば動作に問題はないようなので,切実ではないのかもしれません.

xemacs の Menu を [View][メッセージログ表示] と選んで Wnn7 の log を見ると,最後は次のようになっております.

Loading /usr/local/lib/wnn7/elisp/xemacs21/eggrc-wnn7...done    ← この後,なかなか漢字変換ができない.
backend timeout    ← 本来,これは出ない.これが出たころに変換ができるようになる.

emacs 用の patch を参考に見よう見まねで直してみましたが,この問題とは関係ないようで,改善されません.
(どちらも "backend timeout" ですが,症状が大きく異なるのです.)

この環境では FreeBSD 5.2 用の Wnn 7 + compat5x の方を用いました. compat5x には i386 用,amd64 用のものがありますが,後者で大丈夫です. ports/packages を利用するなら前者を導入することはできないので,選択の余地はありません.
(「i386 用のものを使うべし」という情報があったので,明記しました. 今後何か問題が生じて,やはりそれが正解であったということになる可能性もあります. その場合には配布ファイルを自分で展開して cp することになります.)

なお,amd64 で Wnn7 を使う場合には,lib32 を導入しておく必要があります. そのためには,OS の install の際に Distribution を設定する画面にて lib32 を選択します.

それを忘れた場合でも,OS の install 後に導入することができます.

FreeBSD 8 系以前ならば sysinstall を使えばできるはずです. (私はその経験がないし,今この環境がないので確認も試行もできないので断言できません.)

FreeBSD 9 系以降ならば,次のようにします. (これは自身で実践済みです.)

# mount /dev/???? /mnt    ← CD-ROM や USB memory を mount します.
# cd /mnt/usr/freebsd-dist
# tar xzpf lib32.txz -C /

5. Wnn 7 と pkgng

2014.9.1 から,新 package system (pkgng) への移行が半ば強制されています. しかし,Wnn 7 はこれを使って

# pkg add ja-wnn7-server-1.00_1.tgz

のように導入しようとするとエラーになります. 要は,pkgng に対応していないということです.

幸い,FreeBSD 9.3 にはお馴染の旧 package system (pkg_add, pkg_delete, pkg_info 等) が残っており,ちゃんと動作します. Wnn 7 に添付された shell script である Install もこれらを使っており,問題なく動作します.

なお,pkg2ng を使ってこれらの package データベースを pkgng のそれに変換しようかどうか迷ったのですが,しないことにしました. (別の環境で試したのですが,変換自体はできました.)

今後,FreeBSD が新旧 package system を共存させて提供するのかどうかわかりません. もし「旧」が廃止されたら,手作業でファイルを解凍して mkdir して cp して... ということになってしまいます.

少なくとも当面はそうならずに済みます. FreeBSD 10 系からは旧 package system は default では導入されませんが,裏口的な方法で導入することは可能であり,新旧の package system を共存させて使うこともできました. FreeBSD/amd64 10.3 での例を 旧 package system に示します.

6. 諸設定

私は Wnn 7 を xemacs, mule, emacs を通じてしか使っておりません. xwnnmo 等に関しては,別の設定法が用意されています.

6.1  xemacs, emacs

変換に関する種々の制御は,各々以下のファイルに記述されています.

/usr/local/lib/wnn7/elisp/xemacs21/eggrc-wnn7
/usr/local/lib/wnn7/elisp/emacs20/eggrc-wnn7

(1) 計算機資源の節約
  以下のようにして,逆変換をやめます.

;  (wnn7-set-reverse t)
;  (wnn7-set-fuzokugo "system/kougo.fzk")
;  (wnn7-add-dict "system/kihonR.dic" "" 1 nil nil)
;  (wnn7-add-dict "system/telR.dic" "" 1 nil nil)
;  (wnn7-add-dict "system/zipR.dic" "" 1 nil nil)
;  (wnn7-add-dict "system/tankanR.dic" "" 1 nil nil)
;  (wnn7-add-dict "system/tankan2R.dic" "" 1 nil nil)
;  (wnn7-add-dict "option/jinmeiR.dic" "" 1 nil nil)
;  (wnn7-add-dict "option/chimeiR.dic" "" 1 nil nil)
;  (wnn7-add-dict "option/addressR.dic" "" 1 nil nil)

また以下のように comment out することにより,使用する辞書を絞ることができます.

;  (wnn7-add-dict "option/amusement.dic"
;                 (concat wnn-usr-dic-dir "/amusement.h") 1 nil t)

(2) 入力予測のバグの暫定対策
  入力予測により「りゅ」が「りゅう」に,「しゅ」が「しゅう」にされてしまいます. (例えば「しゅかん」を変換すると候補に「週間」などが現われます.)

 (wnn7-set-boin-kabusoku nil)   ← t から変更する.

として入力予測をやめれば解決します. (またはこれを ~/.eggrc-wnn7 に記述しても可です.)

6.2  mule

変換に関する種々の制御は,以下のファイルに記述されています.

/usr/local/share/mule/19.34/lisp/eggrc-wnn

このファイルには wnn, wnn6, wnn7 の記述が混在しているので要注意です.

(1) 計算機資源の節約
  やり方は xemacs と同様です. ただし,mule では使用する辞書が最初からかなり絞られています. comment out されているだけなので,使うことを選択する場合でも対応は容易です.

(2) 入力予測のバグの暫定対策.
  mule では,入力予測のバグに対応することはできません.

7. 辞書のメンテナンス

以下は Wnn 7 を FreeBSD 4.10, 5.3 用のものに更新した場合の話です. CD-ROM から導入した旧版のままの場合は katakanamuhenkan に読み換えて下さい.

(1) ユーザー辞書への登録法
  登録したい単語をマウスでドラッグし,次いで次のようにします.

M-x wnn7-toroku-region

質問に答えていけば,その単語はユーザー辞書 ud に登録されます.

(2) 辞書のメンテナンス
  自動的な学習機能は役に立つのですが,使い込む過程でミスまで学習してしまい,変な癖がついてしまいます. 定期的に「掃除」した方が良いでしょう. (ユーザー辞書 ud は自動的に学習結果を反映しないので,掃除というより確認が目的です.)

#!/bin/csh -f
cp /usr/local/lib/wnn7/dic/usr/username/bunsetsu bunsetsu.dic
cp /usr/local/lib/wnn7/dic/usr/username/katakana katakana.dic
cp /usr/local/lib/wnn7/dic/usr/username/ud ud.dic
#
/usr/local/bin/wnndtoa bunsetsu.dic > bunsetsu.u
/usr/local/bin/wnndtoa katakana.dic > katakana.u
/usr/local/bin/wnndtoa ud.dic       > ud.u

こうして得られた bunsetsu.u, katakana.u, ud.u をエディターで編集し,ミスの部分をその行ごと消します.

次に,修正したファイルを辞書用のファイルに変換します.

#!/bin/csh -f
/usr/local/bin/wnnatod bunsetsu < bunsetsu.u
/usr/local/bin/wnnatod katakana < katakana.u
/usr/local/bin/wnnatod ud       < ud.u

最後に辞書用のファイルを cp します. この作業は su で行ないます. (cp に option -p を付けてはいけません.)

#!/bin/csh -f
cp bunsetsu /usr/local/lib/wnn7/dic/usr/username/
cp katakana /usr/local/lib/wnn7/dic/usr/username/
cp ud       /usr/local/lib/wnn7/dic/usr/username/

使ってみてトラブルがあったならば,拡張子 .dic を付けて保存しておいた元の辞書用のファイルを (拡張子をなくした名前で) cp して元の状態に戻します.

FreeWnn (あるいは Wnn4) ですが,以前は辞書が市販されていたらしいです. 残念ながら,今ではもう見当たりません. FreeWnn でも辞書を強化すれば結構使えると思うのですが.