■日本語入力
さあ、色はめちゃめちゃだがカラーのXウインドウがトラックパッドで使えるようになった。もちろん3ボタンマウスもエミュレートできている。すばらしい。いささか殺風景ではあるが、見た目だけはMacOSの様な感じになってきている。(システム6くらいかな…)しかし、見た目だけではしょうがない。まずは日本語の読み書きをできるようにしたい。これは結構たいへんそうだ。UNIXや、Linux上では日本語が扱えるらしいが、NetBSDのXは標準で日本語が扱えるようにはなっていない。いくつかのソフトウエアが必要になる。
最低限、これだけはいる。しかもNetBSDで使えるものを吟味しなくてはいけないのだ。まず、かな漢字変換サーバというのがよくわからない… 説明によれば、かな漢字変換サーバは、クライアント(この場合入力メソッド)から受け取った文字情報をいくつかの辞書をもとに漢字カナまじりにして返す役割をする。クライアントはキーボードから入力された文字列をひらがなで表示すると同時に変換サーバに渡し、得られた結果を表示して確定されたらアプリケーションに渡す。とまあ、こんな仕組みらしいが、能書きはともかく日本語が入力できれば私としては問題無しだ。情報を集めて、NetBSDで使えそうなソフトウエアをそろえた。いちばん確かなのは公式ページで用意されているPackageをインストールすることだ。この中に漢字変換サーバのcannaがあった。それから、入力メソッドにはkinput2。ターミナルはKTerm。これで日本語が入力できるはず。
例によってpkg_addするだけの簡単インストールだ。すべてをインストールしたところで、簡単な設定をする。漢字変換サーバはシステム起動時に起ち上がっていてくれることが望ましいらしいので、起動スクリプトをいれた。/usr/pkg/etc/rc.d/cannaというのがあるので、それを/etc/rc.d/以下にrc.cannaとしてコピー。/etc/rc.confに
canna=YES
と一行付け加える。
再起動後にps auxすると、cannaserverが起動している。うまくいった。次にXの起動ファイル/usr/X11R6/lib/X11/xinit/xinitrc にあるexec xterm~とあるところを、exec kterm~と変更してX起動と同時にKTermが起ち上がる設定にした。startx。もちろん起動には問題無いが、ウインドウがなぜかデカイ!どうもフォントのサイズの設定が違うらしいのだが、とりあえず右マウスボタンをウインドウ上で押して(option+cont+3)開いたメニューからsmallを選ぶとフォントが少し小さく表示された。
いちいち起動するたびにウインドウを小さく設定し直すのはめんどうなので、KTermの初期設定のフォントらしき部分の数字を少しずつ小さく設定しておいた。どうやら、英語フォントと日本語フォントでは見た目上2倍くらいの大きさの差になるようだ。これで次に起動すると普通の大きさにまとまるだろう。
さて、問題の日本語入力、Macならコマンド+スペースでことえりが起動するが、これを動作させるきっかけがわからない…一応説明にはCtrl+spaceで起動するようなことを書いてあるが、まったく起動しない。ほかにもいろいろ試すが反応なし。試しにps auxをしてみると、やはり入力メソッドが起動していなかった。あはは… とにかくターミナル上でkinput2 &と入力。もう一度Ctrl+spaceをすると、今度は左下に小さなウインドウとともに「あ」と表示された。試しにターミナルウインドウ上で日本語を入力して見る。
ほんじつはせいてんなり
もちろん変換はスペースキーだろう。ほれ!(パコッ)… すると別のウインドウで「かな漢字サーバと通信できません。」と来た。??そ、そうか… 入力メソッドだけではダメなのか。kinput2の説明を読む。すると、起動時にオプションとして、クライアント名、たとえばWnnとかsj3とかcannaとかを加えなくてはいけない。説明書は読みましょう。
いったんkinput2をkillして、再びkinput2 -canna &と叩き込む。
Ctrl+spaceで起動。かなを入力。
ほんじつはせいてんなり
再びスペース。ほれ!(パコッ)
「本日は晴天なり」
よし!うまくいった。う~ん、Macで言うところのインライン変換だ。2度目に開く選択ウインドウは横長だ。矢印キーで候補を選択できる。リターンを叩いて確定。ところが、どうしたことか、ターミナルに渡した瞬間に日本語の表示が消えた。?!文字化けするならわかるが、空白の行ができてカーソルが文字分だけ移動した感じになる。
もっともターミナル上で日本語を入力しても仕方がないので、とりあえず日本語が扱えるテキストエディタを探すことにした。例によってpackageのなかから探す。
重たいのから軽いのまでいろいろあるなかから、マルチリンガル対応のNgというエディタを使ってみることにした。実を言うと最初に日本語入力では定番のMuleをパッケージで導入したのだが、どうにも重い上に、パワーブックの小さな画面には最初に開くウインドウが入りきらないので面倒だから削除した。それに引き替え、Ngは軽い。ファイル量でも比較にならないほどだ。しかも新しいウインドウを開かずにXのターミナル上で動作するため画面からはみ出すことはない。標準でcannaに対応しているのであっさり日本語入力を受け付けた。しかし日本語を打っていて気がついた。パワーブックのキーボードの配列と、ターミナルでの配列が違っているので記号などを入力するときに間違ってしまう。特にコロンとクオートとアスタリスクの位置の違いはよく使うだけに深刻だ。とにかくキーボード配列を変える方法をさがそう。
Xを立ちあげるまえの状態では配列をかえるのは簡単だった。/etc/wscons.confの中に一行、encoding jpと付け足して、/etc/rc.confにwscons=YESと書き加えるだけだ。これで再起動後にJIS配列で入力できる。
しかし、Xを起動するとこの設定が無視されて、ASCII配列に戻されてしまう。これをどうにか変更する方法を探していたら、ようやく見つかった。
まず、Xの起動ファイルのディレクトリ /usr/X11R6/lib/X11/xinit/ 以下に、.Xmodmapというテキストファイルをつくる。ここにすべてのキー配列を記述していくのだが、キーの数だけ書き込むのも面倒なので、ウェブから拾ったMacのJIS拡張キーボード用のファイルをそのまま使わせてもらった。
パワーブックは数字キーがないため、デリートキーを使うために少し内容を編集した。シフト+デリートでバックスペースとなるように、keycode 59 = BackSpaceというところを、
keycode 59 = Delete BackSpace
と、修正した。こうしないとデリートをたたいても単にバックスペースの機能になって、デリートそのものが使えなくなってしまうのだ。バックスペースを入力するにはシフトキーを同時に押せばいい。おかげで、Xが起動する度にこのマップが読み込まれ、少々起動に時間がかかるようになったが、違和感無くキーボードが打てるようになった。→元のXmodmapはこれ。
トラブル1:ようやく日本語を入力できる環境は整ったが、実はパッケージでインストールしたcannaにはバグがある。これは私のマシン上だけでのことかもしれないが、日本語入力し、文節の区切りを移動させるとその瞬間にサーバが落ちてしまうというものだ。たとえば、「ここではきものをぬいでください」と入力して変換したときに「ここで履き物を脱いでください」となったのをCtrl+→で文節を移動して「ここでは着物を脱いでください」と確定したような場合だ。
どうにかできないものかと設定を変えたりしてみたが全く効果は無い。ウェブで情報を当たってみると、やはりユーザーグループの方でもこのバグは確認できていたらしく、バージョンアップにて修正できることがわかった。しかし、この場合、ソースコードからのコンパイルをしなくてはならない。しかし、文節移動でクラッシュでは使いものにならないので、パッケージ版のよりも新しいCanna36p4バージョンのソースを入手してコンパイルすることにした。
まずはパッケージでインストールしたCannaを
# pkg_delete Canna×××
(バージョン番号など)
で、アンインストールする。
それから入手しておいたソースを展開してコンパイルだ。これはソースに同梱の説明書をよく読んで。
結果的にはこれが成功。文節移動でのクラッシュは見事に無くなった。
トラブル2:さあ、使おうか。と思った矢先にまた問題がでた。ngで日本語入力する方法は2通りある。まずは内蔵入力メソッドを通してcannaと通信する方法。もうひとつは、別にkinput2を立ち上げて使う方法。べつにどちらでもいいのだが、私としては、他のソフトウエアとの使い勝手を同じにしたいのと、ユーザ辞書への登録や、ファンクションキーでの文字種の変更などができる便利さもあって、kinput2を立ち上げて使いたいのだ。ところがこれをやるとどういうわけか入力以外のキーを受け付けなくなってしまう。例えば、
「本日は晴天なり」と確定した後で、晴天ではなく曇天に変えたくなった場合、普通そのまま←キーでカーソルを移動するが、これが受け付けない。一行書き終えて改行しようとしても受け付けない。つまり、入力する以外の操作は一切できないのだ。もちろんいちいちkinput2を閉じた状態にすればできることはできるが、これでは面倒だ。これもどうしたらいいかわからないまま数日が過ぎたが、ちょっとした間違いを侵していただけだった。
kinput2はXの仮想ターミナル上で動作する。つまりKinput2では無くKTermの設定を間違えていたのだ。KTerm側に入力メソッドを使う事をあらかじめ知らせておかなくてはならなかったのだ。そうしないとkinput2が動作している状態では全ての操作をkinput2側に渡してしまうらしい。それを解決するために、/usr/X11R6/lib/X11/xinit/以下にある.Xresourceファイルに一行、
Kterm*openIm: true
と、書き加えるだけ。これでKtermはインプットメソッドが起動していてもキー入力を受け付けてくれる。これはKTerm上で2ボタンクリックをしてOpen Input Methodを選択したのと同じなのだが、これに気づかず数日を無駄にした。