随分前には ThinkPad X230 + Ubuntu + VirtualBox + Vine Linux + Wnn7 の組合わせで、運用していたこともあったが Wnn7 のためだけに VirtualBox をバックグラウンドで起動しておくのが負担になっていつしか使わなくなってしまっていた。
しかし、M1 chip 搭載の Mac が登場したことで、バッテリー効率が飛躍的に良くなったらしい。 それならば M1 MacBook Air などで、Wnn7 を常用する環境つくることできるのでは? と思いリサーチを始めた。
もちろん、今のところ M1 chip で 動く仮想環境はない。 しかし、Parallels は対応表明しているし、Docker もいずれは動くようになるはず。 そうなれば、いつの日にかは、FreeBSD が動くようになるに違いない。
すると、なんと FreeBSD における Wnn 7 というすばらしいガイドページを発見。 しかも、Wnn7 としては 結構最近の情報です。 その他多数のネット情報をみながら、一日がかりで、Macbook Air 2020 Intel (Catalina) で Wnn7 + emacs 26.3 (nox) 環境を構築できたので、備忘録として残します。 この環境を使いたい、という需要がどれくらいあるのかとは思いますが、 個人的には Wnn7 + emacs はとても集中できる執筆環境なので、おすすめです。
事細かに書いているととても長くなるので、ポイントだけ書いていきます。 それでも相当長いの覚悟が必要です。
FreeBSD はなるべく新しいものを使いたいのですが、Wnn7 のインストーラが使う pkg_add など古い pkg コマンドに対応できるバージョンとなると この辺りになるそうです。iso イメージは FreeBSD-10.4-RELEASE-amd64-disc1.iso を使います。
VirtualBox で仮想マシンをつくる。
仮想マシンを起動して、FreeBSD 10.4 のインストールを普通に行う。
インストールが済んだら、マシンを停止。仮想マシンにセットしていた インストールディスク(FreeBSD-10.4-RELEASE-amd64-disc1.iso)を外してから、再度起動します。その後 root でログインして以下の設定をします。
ネットワークが作動しているか確認します
ifconfig
するなど状況確認ping www.google.co.jp
などして インターネット接続確認ifconfig_em1="inet 192.168.56.4 netmask 255.255.255.0″
defaultrouter="192.168.56.1″
sudo できるようにする
foo ALL=(ALL) ALL
を追記sudo を入れるには
cd /usr/ports/security/sudo; make install
してもよい。 こちらから入れれば、インターネットのない環境でもインストールできるのかと思ったが、そうでもなかった。
sudo できるようになったら、host mac のターミナルを起動して ssh foo@192.168.56.4
で接続できるか確認する。
host mac ターミナルから VirtualBox 上の FreeBSD に ssh できるようになったら、 scp などを使って Wnn7 のインストールファイル一式と wnn7egg のパッチ (wnn7-elisp-el-1.02-1.patch.gz) を転送しておきます。
Wnn7 のインストーラーを作動させるために必要な古い pkg コマンドが必要なので、それを使えるようにします。
$ ssh foo@192.168.56.4
// 以下は、FreeBSD上 での作業
$ cd /usr/src/usr.sbin/pkg_install
$ sudo make
$ sudo make install
これで pkg_add, pkg_delete, pkg_info などのコマンドが使えるようになりました。
それでは Wnn7 をインストールしましょう。Wnn7 のインストーラの入ったパスへ移動して、普通にインストールします。
$ cd /path/to/wnn7/cdrom
$ sudo ./Install
Full Install か Custom Install かの選択で Custom Install を選び、 Wnn7 XWindows Client package のみ n で他は全部 y でインストール。 (別に XWindows Client 系入れても害はないとは思いますが、使わないので除外し、それ以外は全部インストールする。)
インストールの最後に 以下のエラーが出ます。
[read_access_file] Cannot access ""
これは オフィシャルサイト に説明があるので、それにしたがって修正しましょう。
$ hostname
wnn7
$ sudo vi /etc/hosts
127.0.0.1 のある行の最後に wnn7
(ホストネーム) を追記するだけです。
その後、wnn7 サーバの起動処理をします。
$ cd /usr/local/etc/rc.d/
$ sudo ./dpkey7.sh start
$ sudo ./wnn7.sh start
dpkey7.sh はライセンスサーバの起動でこれは start させる必要は本当はない(なぜならすでに起動しているから)のですが、 念のため起動処理しておきます。すでに起動していれば、already running とか言われるだけで無害です。 次に、肝心の wnn7.sh をスタートさせて、先ほどのエラーが出ないで、正常起動することを確認します。
host mac 側の emacs を使うのであれば、FreeBSD 上に emacs を入れる必要はないです。 もちろんそのためには host mac 側に emacs がインストールされていることが前提です。 ここでは、FreeBSD に emacs を入れてそれを使って wnn7egg にパッチを当てたものをコンパイルする手順で進めます。
実のところ FreeBSD で emacs を入れるには、 cd /usr/ports/editors/emacs && sudo make install
するだけです。
emacs 25.2 が入ります。
インストール途中で emacs のオプションパッケージ選択画面になりますが、
今回の目的を達成したいだけならば、 全部チェックを外し ましょう。
そうしないと依存パッケージのインストールが続きとても時間がかかります。
先に転送済みの パッチファイル wnn7-elisp-el-1.02-1.patch.gz は事前に解凍しておきましょう。
gzip -d wnn7-elisp-el-1.02-1.patch.gz
次は、wnn7egg パッチをあてて 対象となる .el フィアルをコンパイルしなおします。
最初に対象なる .el ファイルのあるディレクトリをバックアップしておきましょう。
$ cd /usr/local/lib/wnn7/elisp
$ sudo tar cf ~/emacs20.tar ./emacs20
パッチは /usr/local/lib で当てることが前提になっているらしい、そこへ移動して patch します。
$ cd /usr/local/lib
$ sudo patch < /path/to/patch/wnn7-elisp-el-1.02-1.patch
そして、emacs を使って .el ファイルをコンパイルするのですが、その前に、 /root/.emacs.d/init.el を以下のように編集して、この wnn7egg へパスを通しておきます。
(add-to-list 'load-path "/usr/local/lib/wnn7/elisp/emacs20")
これでコンパイル準備できたので、root でログインしなおして該当ディレクトリまで移動 emacs を起動します。
# cd /usr/local/lib/wnn7/elisp/emacs20
# emacs
あとは M-x byte-compile-file
して対象 .el ファイルをそれぞれコンパイルします。
警告は出ますが、作動にはとりあえず問題ないようです。全部コンパイルできたら emacs を終了。
これで準備は整ったので、emacs を起動して作動を確かめます。 今度は root ではなく、普通のユーザ(ここでは foo で)テストします。
foo ユーザの ~/.emacs.d/init.el を設定しておきます。
(add-to-list 'load-path "/usr/local/lib/wnn7/elisp/emacs20")
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(setq enable-double-n-syntax t)
(global-set-key "\C-\\" 'toggle-input-method)
(load "wnn7egg-leim")
(set-input-method "japanese-egg-wnn7")
(set-language-info "Japanese" 'input-method "japanese-egg-wnn7")
(define-key wnn7-henkan-mode-map " " 'wnn7-henkan-select-kouho-dai)
設定を保存したら emacs を起動して wnn7 で変換できるか試します。 長い道のりでした。
なお、Wnn7egg は、こちらから入手可能です。 各ファイルの説明などもあります。一通り目を通してと良いと思います。
解決策はこれです。
/usr/local/lib/wnn7/elisp/emacs20/eggrc-wnn7 を編集
以下の2行をコメントアウトするだけです。
; (wnn7-add-notrans-dict (concat wnn-usr-dic-dir "/katakana") 15 t)
; (wnn7-add-bmodify-dict (concat wnn-usr-dic-dir "/bunsetsu") 15 t)
良く理解していません。 日本語入力ではなく、そのまま文字を入力するとこのエラーが出て入力できなくなるのです。
ここに解決方法があったので、それでこの環境では回避できています。
~/.emacs.d/init.el の最後に以下を追記。
(define-obsolete-variable-alias
'last-command-char
'last-command-event
"at least 19.34")
host mac がスリープから復帰したときに起りやすい、とか。原因はわかりません。 対策は、最新のVirtualBox にして、FreeBSDのゲストマシンの設定で、サウンドを disabled にする、です。 その他 USB とか不要な設定はすべて外しておきましょう。 とりあえずのところ、これでこの問題は抑止できているようです。
~/.emacs.d/init.el の設定で、予測変換関連のものがある。
(egg-use-input-predict)
(setq egg-predict-realtime nil)
(setq egg-predict-mode "inline")
;(setq egg-predict-mode "window")
これらを有効にすると、意図通り作動しない。調査中。
host mac への emacs のインストールはこちら を参照してください。 たぶん、homebrew とかで入れた emacs でも問題ないとは思います。試していませんが。
host mac の emacs で使うには、以下の2つの作業が必要です。
~/.emacs.d/init.el は、load-path を host mac 側に合わせるのと、 wnn7-server-name の指定を追加して IPアドレスを VirtualBox 上にインストールした FreeBSD を指すの2点の変更です。
(add-to-list 'load-path "/path/to/emacs20")
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(setq enable-double-n-syntax t)
(setq wnn7-server-name "192.168.56.4")
(global-set-key "\C-\\" 'toggle-input-method)
(load "wnn7egg-leim")
(set-input-method "japanese-egg-wnn7")
(set-language-info "Japanese" 'input-method "japanese-egg-wnn7")
(define-key wnn7-henkan-mode-map " " 'wnn7-henkan-select-kouho-dai)
これで host mac 側で Wnn7 日本語入力できるようになるはずです。 なお、host mac 側の emacs のバージョンは Gnu Emacs 26.3 です。
FreeBSD 側の emacs のバージョンと host mac のそれとでバージョンが違うと気持悪いかもしれないので、 host mac 側で再度コンパイル( byte-compile-file )すれば良いと思います。
そもそも emacs は host mac 側でしか使わない場合 FreeBSD 側で emacs を入れる必要はなく、 host mac 側に入れた emacs で、パッチ適用済みの Wnn7egg をコンパイルして使えばよいだけです。
以上です。 2001年にリリースされた Wnn7 がいまだに使えるのはうれしいですね。 オープンソースさまさまです。🙏
実運用では、VirtualBox上の FreeBSD は メモリ割り当て 1G くらいで足りますので、16G ある Macbook ではあまり問題ないのではないかと思います。 バッテリー持続時間への悪影響は気になりますが、VirtualBox で Headless 運用している状態では、そんなに急激にバッテリー減るという感じはないです。 M1 chip 搭載の MacBook Air でこの環境が構築できる日がはやく来るといいですね。