top page > PC unix > here

FreeBSD における Wnn 7


概要

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

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

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

私は Wnn 7 を emacs 系のエディターを通じてしか使っておりません. それゆえ,それ以外の使い方には言及しません.

(補足) Wnn 8 に関しても検討しております. emacs 27, 28, 29,30 との関係に関する記述はそちらにしかありません. Wnn 8 on FreeBSD をご参照下さい.


目次

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. 辞書のメンテナンス
8. マニュアル

1. 概況

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

  1. Wnn7 が使っている library がない場合がある.(たいていは version の違いによる.)
  2. emacs は 20 にしか対応していない. (xemacs は 21 に対応しているので問題ない.)
  3. FreeBSD/i386 には対応しているが,FreeBSD/amd64 には対応していない.
  4. 2014.9.1 に FreeBSD の package system が更新されたが,Wnn 7 の配布物はそれに対応していない.

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

  1. misc/compat4x または misc/compat5x を利用する.[2]
  2. emacs 21 以上に対応させる patch を利用する.
  3. emacs で使うためには,FreeBSD/amd64 に対応させる patch を利用する. (xemacs にはこの patch がありません.)
  4. 5 節 を参照.

[1] この 2005 年というのは,Wnn 8 が発売された年でもあります.

[2] 最近は,これらの install の際に security 関連の警告が出るので悩ましいです.

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

(2018.10.27) Wnn 8 を購入しました.なので三つの Wnn を併用しています.

2. 最新の環境への導入

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

2.1  Wnn 7 の導入と更新

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

# sh ./Install

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

(2) 最新版に更新します.
  FreeBSD アップデートパッケージ から最新版を 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 します.

# pkg_add dpkey7-1.01_3.tgz
etc.

(3) 諸設定を行ないます.

(3-1) /etc/services に以下の内容が書き加えられているか確認します. (無ければエディターで書き込みます.)
  最近気付いたのですが,これなしでも動いています. localhost でしか使っていないからかもしれません.

wnn7            22273/tcp  #Wnn7 (Japanese input)

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

setenv JSERVER localhost

(3-3) ライセンスパスワードファイルを移動します. (移動しなくても正常に動きます.)

# cd /etc/dpkey
# cp -p dpkeylist /usr/local/etc/dpkey
# cd /etc
# rm -r dpkey

(3-4) ユーザー辞書のための directory の owner/group を変更します.(必要ならば.)

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

(3-5) 旧版用の directory を削除します. (残しておいても動作には影響ありません. 気分の問題です.)

# cd /usr/lib
# rm -r wnn7
# cd /usr/share
# rm -r wnn7
# cd /usr/local/etc
# rm -r wnn7

ちなみに,新版においては,これらは /usr/local/lib/wnn7/ に置かれます.

(3-6) 新版の辞書の一部が /usr/local/lib/wnn7/ja_JP/jserverrc に反映されていないので,修正します.

--- jserverrc.orig      2018-09-26 22:42:00.409023000 +0900
+++ jserverrc   2018-09-26 22:42:59.053571000 +0900
@@ -37,2 +37,3 @@
 readfile option/amusement.dic
+readfile option/computer.dic

(4) OS を reboot するかまたは次のようにします.

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

[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 は amd64 用の compat5x には含まれていますが,i386 用のそれにはありませんので,次のようにします.

# 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 に対応させる場合のみ.

なお,wnn7egg でなく tamago-tsunagi を使えば,上記の修正も下記の amd64 対応も必要ありません. ただし,ports になっていないので,install は自分でやることになります.

以下の URL をご参照ください. (ここからの link は設定しておりません.)

https://ja.osdn.net/projects/tamago-tsunagi/

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 に対応していないということです.

Wnn 7 に添付された shell script である Install も旧 package system を使っているので,エラーになります.

新旧 package system が共存する環境に関しては package に書きました. FreeBSD の version に応じてかかる手間に差はありますが,基本的には何とかなります.

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

あるいは,ファイルを自分で解凍し,しかるべき permission でしかるべきところに置けば良いだけなのかもしれません.
その場合には,ライセンスパスワードは CD-ROM から cp すれば良いのかもしれませんが,試しておりません.

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 でも辞書を強化すれば結構使えると思うのですが.

8. マニュアル

CD-ROM の doc/ の下には html/, manual/ の二つの directory があり,各々に HTML および PDF 形式のマニュアルがあります. どちらも紙のマニュアルと同じ内容です. 「(1)フルインストール」を選択してもこれらはインストールされないので,必要ならば自分で HDD へ cp します.

HTML は,index.html からすべてを巡ることができます.

% firefox index.html

PDF は章ごとにファイルが分かれているので,少し不便です. xpdf ならば,以下のようにすべてのファイルを読み込んでしまえば楽です.

% xpdf *.pdf

紙,HTML, PDF 共に更新されておらず,最新のものとは違う箇所もあるので要注意です.