Home About Contact
Windows , Wnn , WSL

WSL2 で Wnn8 を使う

以前に NUC に FreeBSD 12.2 をインストールして それを Wnn8 サーバにした というエントリーを書いた。今回これを Windows 10 WSL2 に移行したので、その備忘録です。 Wnn8 は WSL2(Ubuntu 20.04 LTS) 上で動きます。 インストールしただけでは、jserver, dpkeyserv が自動起動しないので、そこを手当てする必要がありました。 クライアントは emacs で使う tamago-tsunagi です。 X11用のクライアントは使っていません。

Wnn8自体のインストール

アップデートを取得したり、 製品版 CD-ROM を所定の場所にマウントするなどの手当ては必要ですが、 Wnn8本体のインストール手順は通常通りです。

事前準備として sudo apt install debhelper して debhelper をインストールしておきます。 環境変数LANGを適切に設定して Install スクリプトを実行でももちろんよいのですが、 UTF8 端末で作業するので、inst.utf8 スクリプトを直接使い sudo ./inst.utf8 で Wnn8 本体のインストールを実行します。

途中、ディストリビューション情報を読み取れない、と言われるので、Debian GNU/Linux 用 を選択してインストールを進めます。 パッケージは、 Wnn8LE/Wnn8 ユーティリティ/Wnn8 IIIMF を外して残り全部をインストール選択します。

インストールするパッケージを選択してください。
  Wnn8 サーバパッケージ をインストールしますか? (y/n) : y
  Wnn8 LEパッケージ をインストールしますか? (y/n) : n
  Wnn8 ユーティリティパッケージ をインストールしますか? (y/n) : n
  Wnn8 基本辞書パッケージ をインストールしますか? (y/n) : y
  Wnn8 オプション辞書パッケージ をインストールしますか? (y/n) : y
  Wnn8 IIIMFパッケージ をインストールしますか? (y/n) : n
  dpkey8 ライセンスサーバパッケージ をインストールしますか? (y/n) : y

インストールを行うパッケージは
 - Wnn8 サーバパッケージ
 - Wnn8 基本辞書パッケージ
 - Wnn8 オプション辞書パッケージ
 - dpkey8 ライセンスサーバパッケージ

jserver, dpkeyserv が自動的に起動しない

2022-09-24 追記: Windows11 22H2 の WSL 0.67.6 で systemd に対応したので、この手順は不要になりました。

インストール後、 ps ax | grep jserver などとすればわかりますが、起動していません。 OS自体の再起動をしてもやはり起動していません。

WSLは systemd がうごかないとか、そのあたりに問題があるのでしょうか。原因は良くわかりません。 しかし、以下のように手動で起動はできます。

sudo /usr/sbin/jserver
sudo /usr/sbin/dpkeyserv

これをWindows起動のたびに WSL のターミナルで初回のみ行う必要があり、とても煩雑です。 ネットを調べてみると systemd を起動させるとか、Windows のスタートアップで起動させるバッチファイルを書くなどの対処方法があったのですが、 ここでは ~/.bashrc に仕込をする方式で解決しました。 つまり、~/.bashrc の最後に jserver が起動していなかったら jserver と dpkeyserv を起動する、というスクリプトを入れます。

自動起動設定

では順番に設定していきます。

Wnn8サーバの起動/停止スクリプトをつくります。

/etc/init.d/wnn8 :

#
# wnn8 start and stop
#
case "$1" in

'start')
    # Start Wnn8 jserver and dpkeyserv:
    /usr/sbin/jserver > /dev/null 2>&1 &
    /usr/sbin/dpkeyserv > /dev/null 2>&1 &
    ;;
'stop')
    # Stop Wnn8 jserver and dpkeyserv:
    /usr/bin/killall jserver
    /usr/bin/killall dpkeyserv
    ;;
esac

オーナーとグループを root に変更、そして実行権を付与:

sudo chown root.root /etc/init.d/wnn8
sudo chmod 755 /etc/init.d/wnn8

この状態で起動/停止できるか確かめます。

sudo service wnn8 start
sudo service wnn8 stop

px ax | grep jserver などとして起動や停止がうまくいっているか確認しておきます。 問題なければ、~/.bashrc に起動用スクリプトを仕込みます。

jservercount=`ps ax| grep jserver |wc -l`
if [ $jservercount = 1 ]; then
  sudo /usr/sbin/service wnn8 start
  echo "Wnn8 start"
fi

あとは、WSLを何度か起動してみて、初回のみ パスワード入力と Wnn8 start が表示されれば成功です。

echo は起動の確認用でうまくいくことが確認できたら削除しましょう。

パスワードなしにする

初回のみとは言え、パスワードを入れるのが面倒なので、これを省く設定をします。

sudo visudo するか sudo vi /etc/sudoers で直接編集して以下を追加します。

foo    ALL=NOPASSWD:   /usr/sbin/service

foo はユーザ名なので、お使いの環境に応じて書きかえ必要です。 記述をする位置も、ファイル内のどこでもよいわけではなく、注意が必要のようです。 以下の記述の直後に設定したところうまく作動しました。

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
foo    ALL=NOPASSWD:   /usr/sbin/service

emacs と tamago-tsunagi を用意

emacs は sudo apt install emacs-nox でインストール完了。 tamago-tsunagi は 以前のエントリー を参照。 ~/.emacs.d/init.el は現在このようになっています。

(menu-bar-mode 0)

(add-to-list 'load-path "/usr/local/share/emacs/site-lisp/egg")
(load-file "/usr/local/share/emacs/site-lisp/egg/leim-list.el")
(setq default-input-method "japanese-egg-wnn")
(setq wnn-jserver "127.0.0.1")

(setq make-backup-files nil)

まとめ

本日 Windows 11 がリリースされたところですが、 Wnn8 が WSL で普通に使えるならば、開発のメインマシンを Ubuntu Desktop から Windows 11 に移行してもいいかも。 macOS での開発についても いままでターミナルと GUI の連携がよいので重宝してきましたが、 Linux系のツールは homebrew などで入れる必要がある、make/tar/sed などのツールがLinuxと微妙に作動が違うなど、不満もありました。 Windows の WSL ならば 本物の Ubuntu が使えるので、macOS より使い勝手がよい。 Windows 11 では WSLG として Linux GUI もネイティブにサポートされるようなので、実験としてしばらくは Windows 11 を使っていこうと思います。