| ATOK X 格闘日記 |
|
えー、僕の愛用の WM は WindowMaker なんですが、前か ら気になってたんですけど、ATOK X が起動してる状態で、Mozilla をウィ ンドウ二枚開いた状態にして、Mozilla のウィンドウをアイコン化したり戻 したりすると WindowMaker が落ちます。WindowMaker を最新版(0.80)に上 げても、ATOK X のアップデートモジュールを適用してもダメ。
ATOK X, Mozilla, WindowMaker のどれ一つ欠けても再現できない現象な ので、どれが悪いやらわけわからんので弱ってたのですが、とりあえず gdb で WindowMaker が落ちたあたりのソースを見てちょっといじったら解決し ました。これがそのパッチ。 単に NULL ポインタ避けてるだけですが。
なんかこの日記ずっと放置してたんですが、アクセスログを見ると毎日 一人くらいは見てるらしいので、去年の秋に書きそびれたことを遡って書い ておきました。
今は Emacs で ATOK X を使おうとして IIIMECF とか入れてみたりして ますが、これまたカナ入力ができなくて困ってます。IME on/off が妙に遅 いので実際には使わないかも。。。
ATOK X for Linux で英語キーボードからカナ入力できない問題、ジャス トシステムの友人にヒント教えてクレーって頼んどいたのだが、夕方返事が。 ヒントを頼りに遂にカナキー配列の変更(NeXT変則JISカナ配列に)に成功。
x.org に公開されてるsdk2-dev10.0.tar.gz を取ってきて、src/client/xiiimp.so/iiimp/KeyMap.c の配列初期化式をう まいこと書き換えて[NeXTカナ配列用パッ チ]、xiiimp.so.2 だけ make して /usr/lib/im/xiiimp.so.2 と置き換 えれば万事OKの模様。
なお、カナロックを入力するには適当なキーがキーシンボル Hiragana_Katakana を生成するように設定しないといけない。ここ とか参照。 ちなみにカナロック中に IME を off してもカナ入力にはならないので、自 動カナロックと同じ効果(最初の一回は手動だが)が得られて安心。
実は私には変なクセがありまして、日本語入力はカナ入力す る人なんです。じゃあ愛用のキーボードは日本語 106 キーボードなのかと いうとそうではなくて、英数入力は ASCII 配列じゃないとダメ、というやっ かいな体質なので英語キーボードを使っています[1]。
今まで英語キーボードによる仮名入力は emacs では elisp で設定して、 kinput2 では ccdef で設定してどうにかしのいできましたが、ATOK ではど うしたらよいのか色々調べてみましたが、、、玉砕しました。
デフォルトでは「ろ」が入力できないとか、「ゃ」「ゅ」などの位置が ずれるとか問題があります。XKB の設定ファイル(/var/X11R6/lib/xkb/ の 下にあるやつ)を色々いじればどうにかなるかと思って、実際かなりいいと ころまでいったのですが。。。詳しくはまたいずれ。XKB の設定を試してみ たい人は atokx_client 内の以下の部分コメントアウトするのが吉のようです。
export HTT_GENERATES_KANAKEY=t
[1]英語キーボードだと普通のカナ配列ではキーが足りなくなるので、 NeXTstep 日本語版が採用していた変則カナ配列を使っています。
サーバーが立ち上がっただけではまだ ATOK は使えません。Linux 上で の IME の扱いは Windows などに比べると泥臭い部分 が多々ありますが、とりあえず kterm と Netscape と gnome 系アプ リと 一太郎 Ark で使 えるようにすることを目標に頑張ってみます。emacs は IME の扱いが随分 違うので後回しにします(っていうか無理かもしれない。。。)
まず CD-ROM の readme.txt の「ATOK Xのクライアントを起動する」と いう部分を見てみます。どうも Slackware 以外の多くのディストリビュー ションではIME サポートのために色々小細工してらっしゃるようで、しかも そのやりかたはバラバラなのです。Slackware は当然そのへんは全くなんに もやってないのでそのまま素直に実行できるような方法は書かれていません。
とにかくユーザーの$HOME/.xinitrc で起動するよう に設定する、という一番簡単なやりかたでやってみましょう。説明を ざっと眺めると、とにかく /usr/lib/im/locale/ja/atokserver/atokx_clientを起動してやれ ばよさそうです。後々ユーザーの都合で atokx_client の内容をいじるかも しれないので$HOME/.atokx_clientにでもコピーしておきましょう。
$cp /usr/lib/im/locale/ja/atokserver/atokx_client ~/.atokx_client
atokx_client には環境変数の設定があるので、X の起動シェル内で実行 されるようにします。atokx_client はそのままシェルスクリプトとして起 動するのではなくて、.xinitrc の最初のほうでsource するように、以下の 一行を追加します。
. $HOME/.atokx_client
kterm 上の vi で ATOK X を使って入力している。 |
これで xinit するたびに ATOK が立ち上がるようになりました。はやる 気持ちを抑えられずさっそく kterm で日本語入力を試み ます。IME の on/off はデフォルトでは Ctrl + スペースなのです が。。。あれ? ATOK パレットが出てきません。。。色々試すと Shift + スペースを押した後にCtrl + スペースを押すと出てきました。でもそのま まだと英数入力のままです。さらに色々試してみて ATOK パレットの「あ」 のボタンを一度押してやると無事入力できました。しかし色々入力している うちにうっかり Shift + スペースを押すと「セグメンテー ション違反」で kterm が落ちてしまいました。うーん。。。
そこでジャストシステムの サポートページを見てみると、 こんな記述がありました。どうも kterm の起動に-xim オプション を付けないといけないみたいです。実際 -xim オプション付きで起動 してみると。問題なく IME の起動と入力ができるようになりました。が、 Shift + スペースで kterm が落ちる問題は残りました(が、後述するように IME on/off キーを Shift + スペースにしてしまえば回避できます)。
さて、他のアプリを見てみます。とりあえずgnome 系のアプリでは問題なさそうです。私は gnome デスクトップ環境は使っ ていない(gmc はたまに使います)のですけど。
おもしろくないので(笑)次はNetscape で使ってみま す。ここでは Netscape 4.7 [LinuxJapan-ja]-19990915 ( LinuxJapan の付録 CD に収録された Slackware7 の日本語パッケージに入っているやつ) を対象にします。とりあえずフォーム入力ですが、なかなか辛い結果になりました。
まず、Netscape での日本語入力時の動作は使用しているWindow Manager によって違います。そして一番マトモに動く場合でも、完全で はありませんでした。表にまとめると以下の通りです。
WM | 動作 |
---|---|
enlightment 0.15.5, mwm 0.89,
fvwm95 2.0.43b, twm |
入力できるが、確定後 IME が勝手に off になる。 |
kwm | 入力できるが、確定しても文字列が挿入されない。 |
Window Maker 0.60.0 | 入力開始後フォーカスがどこかに飛んでしまって未確定文字列の入力
ができない。 Preferences で 'automatically focus new windows' のチェックを外しても効果なし。 |
どれも Slackware7 に付属しているバージョンです。私が愛用している Window Maker ではダメでした。これは今後なんとかしましょう。。。
最後に一太郎 Ark ですが、これはすんなり動き ました。さすがですね。でも候補ウィンドウがウィンドウの下に 出てきてしまうのが残念。ちなみに使用している Java は Sun の JDK 1.2.2 (java version "1.2.2" Classic VM (build 1.2.2_006, green threads, nojit)) です。
買ってしまいました ATOK X for Linux。基本的にサポート対象はRedHat 系オンリーのようなんですが。。。今時 Slackware7 を使ってる私はどうなっ てしまうのでしょうか? それでは、ホップステップ玉砕!! ((c)鳥肌実)
以下root で作業です。まずは 赤くてかっこいい CD-ROMを /cdrom にマウント。/cdrom/readme.txt には「tgz 形式でインストールする」という章が! Slackware 用の tgz パッ ケージの事か? と思ったらそういうわけではありませんでした。。。ただの tar.gz です。ここは一つ readme.txt の指示に素直に従ってみましょう。
いきなり tar で展開せよとのことなんですが、どこで? と思ったら、 tar xvzfP ... と、P オプションをつけて展開せよとのことなの で絶対パスで展開されます。つまりどこでもいい。
展開すると、/etc/rc.d/ /usr/lib/ とか /var/local/ とかにファイル ができます。よく見ると /usr/lib/im の下に一杯ファイルを作ってますが、 ここって、Mewの IM 用の設定ファイ ルが入る所なんですけど、大丈夫かな?
続いてサーバーの設定。ATOK X は Wnn などと 同じくサーバークライアント型の日本語入力システムなので、起動時にサー バーが立ち上がるようにしておきます。readme.txt によるとちゃんと設定 スクリプトが用意してあるとか。ん? ./server_setting っ て何??
RedHat 系用のインストールスクリプト /cdrom/install_atokx を覗いて 見ると、どうやら /usr/lib/locale/ja/atokserver/server_setting のことみたい。 で、実行してみると、なんか様子がおかしいのです。
# /usr/lib/locale/ja/atokserver/server_setting *** ATOK Xのサーバーを起動しています。 /etc/rc.d/init.d/atokx: /etc/rc.d/init.d/functions: そのようなファイルやディレクトリはありません /etc/rc.d/init.d/IIim: /etc/rc.d/init.d/functions: そのようなファイルやディレク
うぁー。。。見知らぬスクリプトをうかつに起動するもんじゃありませ んね。ひょっとしてなんかマズイことになってる? スクリプトを良く見る とserver_setting は redhat 系(っていうか SYSV 系) の rc.d を想定 しているみたい。slackware だと何も設定されてません。とりあえず 何かが壊されたわけじゃないようなので一安心。
ATOK X サーバが起動しないのは RedHat にはあるけど Slackware には ない rc.d/init.d/functions というスクリプト用ライブラリを参照してい るせいです。うーん。
しょうがない、RedHat から盗んできちゃえ! ということで、rc.d/init.d/functions を調達してきましょう。とりあ えずここ ftp://ring.asahi-net.or.jp/pub/linux/RedHat/redhat/redhat-6.2/i386/RedHat/RPMS/ から、これかな〜? って思って取ってきた initscripts-5.00-1.i386.rpm を、Slackware7 付属の rpm2tgz で tgz に変換。カレントディレクトリにできた initscripts-5.00-1.i386.tgz を tar tvfz してみると、、、
... -rwxr-xr-x root/root 7349 2000-01-21 14:55 etc/rc.d/init.d/functions ...
アタリでした。これをとりあえず /tmp とかで展開して中身を確かめま す。functions スクリプトの中身は結構ややこしいことになってました。こ れ、本当に slackware で動くのかなぁ。ぱっと見やばそうな所はなかった ので、とりあえず /etc/rc.d/init.d にコピーして(再起動はせずに) atokx を起動してみます(いいかげん)。起動方法はさっきの server_setting スク リプトに書いてあって、こんな感じ。
/etc/rc.d/init.d/atokx start /etc/rc.d/init.d/IIim start
まず atokx ですが。。。
# /etc/rc.d/init.d/atokx start Starting ATOK X server:nice: initlog: そのようなファイルやディレクトリはありません /etc/rc.d/init.d/atokx: initlog: command not found [FAILED] touch: /var/lock/subsys/atokx: そのようなファイルやディレクトリはありません
うーん。。。initlog って何? Slackware にはないよ? って思ったら先 ほど取ってきた initscripts-5.00-1 の中に入ってました。man も一緒に (ラッキー☆)。どうやらこれは -c オプションで指定したコマンドを実行し てエラー出力とかを syslog に送ってくれるそうです。思いきってこの initlog もインストールしてしまいましょう。 initscripts-5.00-1.i386.tgz を展開した場所で、
# cp sbin/initlog /sbin/ # cp etc/initlog.conf /etc # cp usr/man/man1/initlog.1.gz /usr/man/man1/
大丈夫かなぁ。。。もう一カ所 /var/lock/subsys/atokx がない って言われるのは、slackware の /var/lock の下には subsys ディレ クトリがないせいです。あっても邪魔にならないでしょうから作っておきま しょう。
あらためて、atokx を起動してみます。
# /etc/rc.d/init.d/atokx start Starting ATOK X server:[ OK ]
ヤフ〜ッ!! 緑色の OK が眩しいぜ! /var/log/messages にも atokx: atokmngdaemon startup succeeded とか出てます。
この調子で /etc/rc.d/init.d/IIim start も起動。何も出てこないけど ちゃんと起動はしてるみたい。
起動ができたら終了もやってみましょう。
# /etc/rc.d/init.d/IIim stop # /etc/rc.d/init.d/atkx stop
/var/log/messages に IIim: htt shutdown succeeded とatokx: atokmngdaemon shutdown succeeded なんて出ているので無事終了できた御 様子。
マシン起動・終了時の設定も勢いでやってしま いましょう。Slackware の rc.d は BSD スタイルのスクリプトを使ってい ますが、その中で SYSV スタイルの起動スクリプトも呼び出すようになって います。atokx の起動スクリプトはこの仕組みで呼び出してもらいましょう。 /etc/rc.d/rc.sysvinit によると、/etc/rc.d/rc3.d にスクリプトを置けばよいようです。
# cd /etc/rc.d # mkdir rc3.d # cd rc3.d # ln -s ../init.d/atokx /etc/rc.d/rc3.d/K12atokx # ln -s ../init.d/IIim /etc/rc.d/rc3.d/K11IIim # ln -s ../init.d/atokx /etc/rc.d/rc3.d/S91atokx # ln -s ../init.d/IIim /etc/rc.d/rc3.d/S92IIim
これは server_setting スクリプトを真似しました。ここまでやって一 度リブートしてみます。どうやらうまく起動したようです。ログインして ps してみるとこんな感じ。
$ ps auxc ... root 116 0.0 0.0 1268 0 ? SW 01:06 0:00 atokmngdaemon root 120 0.0 0.0 1032 0 ? SW 01:06 0:00 htt root 121 0.0 0.7 6636 496 ? S 01:06 0:00 htt_server root 124 0.0 0.7 6636 496 ? S 01:06 0:00 htt_server root 125 0.0 0.7 6636 496 ? S 01:06 0:00 htt_server root 126 0.0 0.7 6636 496 ? S 01:06 0:00 htt_server ...
ここまででサーバーの設定はおしまい。ここか ら先が楽しいわけですが、とりあえず今日はここまで。そんなわけでま だ Wnn6 でこれを書いています。。。