(home)

Cygwin + XFree + 日本語アプリケーション

最近,XFreeがCygwinでかなり安定して動作するようになりましたが,残念な がら日本語に関連した以下のような問題があります.

ということで,これらを解決するため,幾つかのアプリケーションにいろいろ 修正を加えてコンパイルしました.これで スクリーンショットのような環境が使えるよう になります.

目次

更新情報

バイナリ

当然ですが,まず,Cygwinをインストールする必要があります. 真ゼロ円でできるXサーバ[Windows XP編]Cygwin/XFree86最新事情と日本語化 を参照してください.この解説では Cygwin を使う。 の早田さんによる日本語インストーラを使っています.

なお,注意しなければならない点として,gccをインストールした方がよいと いうことがあります.これはXのコマンドの幾つかがcppに依存するためです. 余計なトラブルを避けるため,XFree86のパッケージもとりあえず全部インス トールする方がよいでしょう.特に,後述のstartup.tgzに含まれるファイル はウインドウマネージャとしてfvwm2を使っています.

また,改めて確認はしていませんが,/usr/X11R6/lib/X11/app-defaultsの状 態がおかしくなっていることがあります.最新のcygwinの場合,次のようにし て修正してください.

$ cd /usr/X11R6/lib/X11/
$ rm app-defaults.lnk;
$ mv app-defaults/* /etc/X11/app-defaults
$ rmdir app-defaults
$ ln -s /etc/X11/app-defaults .

2,3,4行目はそれぞれ

rm: cannot remove `app-defaults.lnk': No such file or directory
mv: cannot stat `app-defaults/*': No such file or directory
rmdir: `app-defaults': No such file or directory

などといわれるかもしれませんが,無視して構いません.

次にこのページのバイナリをインストールします.以下に置いてあるのは Cygwin-1.3.9以降 + XFree-4.2.0用のアーカイブです.これら(startup.tgzを 除く)を次のようにルートから展開します.

$ tar Cxzf / kterm.tgz
$ tar Cxzf / canna.tgz
$ tar Cxzf / kinput2.tgz
$ tar Cxzf / tgif.tgz      # tgifを使う場合
$ tar Cxzf / idraw.tgz     # idrawを使う場合
$ tar Cxzf / netpbm.tgz    # tgifでpng形式などの画像を取り込む場合
$ tar Cxzf / libX11.tgz

canna.tgzは/usr/local/canna以下,netpbm.tgzは/usr/local/netpbm以下に, それ以外のものは/etc/X11や/usr/X11R6以下に展開されます.

startup.tgz
以下のバイナリを動かすためのスタートアップスクリプトなどが含まれてい ます.詳細は設定を参照してください.
kterm.tgz
kterm-6.2.0にCygwin関係の修正パッチ (Cygwinのページを参照) をあててコンパイルしたものです.
canna.tgz
Canna35b2 + Canna35b2-unoff1.patch + Canna35b2-unoff2.patch + Canna35b2-hack1.patchにCygwin関係の修正を含んだものです (『かんな』の部屋Cygwin情報/アプリケーション関連 を参照).なお,このcannaserverはUNIXドメインのみで接続します.
kinput2.tgz
kinput2-v3をCannaのみを使うようにコンパイルしたものです.
tgif.tgz
tgif-4.1.41をTgif.tmpl-cgywinを使ってコンパイルしたものです.Project Vineのパッチやその他の細かい修正を適用し,最小限の日本語リソースを定 義してあります.私自身はtgif使いではないので定かではありませんが,問 題なく使えそうです.
idraw.tgz
iv310jに様々な修正を加えたものです.元々はLinuxで動作させるために個 人的に保守してきたバージョンなので, http://www.on.cs.keio.ac.jp/~yasu/ にあるものとは異なります.
libX11.tgz
sけいし・TAKABE版の修正パッチを適用したlibX11.dllです.これによって Xの日本語処理を使っているアプリケーション(XawやGTK+で書かれているも のなど)が問題なく動作するようになります.
netpbm.tgz
netpbm-9.23をコンパイルした ものです.tgifでpng形式の画像を取り込む場合などに必要になります.
md5.sum
上記のファイルのMD5チェックサムです.

設定

startup.tgzには以下のファイルが含まれています.これらのうち`_'で始まる ものは,通常,ユーザのホームディレクトリ($HOME)に配置します.ま た,_XresourcesでTrueTypeフォントを使う設定をしているので, /usr/X11R6/lib/X11/fonts/TTの設定をします.

$ tar xzf startup.tgz
$ cp startup/_Xmodmap-106 ~/.Xmodmap  # 日本語キーボードの場合
$ cp startup/_termcap ~/.termcap
$ cp startup/_canna ~/.canna
$ cp startup/_fvwm2rc ~/.fvwm2rc
$ cp startup/_Xresources ~/.Xresources
$ cp startup/_xinitrc ~/.xinitrc
$ mkdir /usr/X11R6/lib/X11/fonts/TT
$ cp startup/fonts.{dir,alias} /usr/X11R6/lib/X11/fonts/TT
$ cd /usr/X11R6/lib/X11/fonts/TT
$ ln -s `cygpath -u $WINDIR`/Fonts/{ms*.ttc,arial*.ttf,times*.ttf} .
_Xmodmap-101-on-106,_Xmodmap-106
日本語キーボードを使っている場合は,.Xmodmapとしてこれらのいずれかを $HOMEに置きます.わたしの使用している環境はPanasonic Let's Note CF-A77上のWindows 2000で,さらに 窓使いの憂鬱(余談ですがこれは すばらしいツールです)を使ってキーボードを101キーボードのマッピングに しています._Xmodmap-101-on-106はこのための.Xmodmapです.普通の日本 語キーボードなら_Xmodmap-106を使うことになるでしょう.ただし,キーボー ドの細かい差が影響するのかどうかは定かではないので,これらのファイル や`xmodmap -pke'の出力を土台にして修正を加えてください.xevを使って キーコードを調べれば,修正するのはそれほど難しくないでしょう.キーボー ドのマッピングについては,`真ゼロ円でできるXサーバ…'の [設定・運用編] も参照してください.
_Xresources
.Xresourcesとして$HOMEに置きます.内容はXIM関連やktermとtgifの日本語 関係のリソースです.
_canna
.cannaとして$HOMEに置きます.`Ctrl-\'で変換のON/OFFを切り替 えるようになっています.もちろん,別の設定にすることも可能です.
_fvwm2rc
.fvwm2rcとして$HOMEにおきます.ウインドウマネージャfvwm2用の設定ファ イルです.`Ctrl-Tab'でウインドウの切り替えができるようにしてあります.
_termcap
.termcapとして$HOMEに置きます.先のパッチを当てたkterm用のエントリが 含まれています.
_xinitrc

Xを立ち上げるためのスクリプトです.次のような処理をします.

  1. cannaserverの起動
  2. TrueTypeフォントのディレクトリをフォントパスに追加
  3. .Xmodmapや.Xresourcesの読み込み
  4. kinput2の起動
  5. twmの起動
  6. ktermの起動

そして,ktermでexitするとcannaserverを終了します.他のプロセスはXと 同時に終了します.

実行

適切に設定が行なわれていれば,後は/usr/X11R6/binにパスを通してstartxと するだけです.tgif経由でnetpbmを使う場合は, /usr/local/netpbm/bin/netpbmにもパスを通してください.なお,startxから 色々なメッセージが出力されるので,以下のように.bashrc/.tcshrcなどでエ イリアスを作っておくと便利です.

.bashrc
alias xin='(cd; startx -- -emulate3buttons 200 -rootless -clipboard > .startx.log 2>&1) &'
.tcshrc
alias xin '(cd; startx -- -emulate3buttons 200 -rootless -clipboard >& .startx.log) &'

この設定で,ktermなどとWindows側(例えばメモ帳)の間で日本語テキストを含 むコピー&ペーストが可能です. *1 また,動作は重くなりますが,上記のrootlessのところをmultiwindowとし て,.xinitrcの`fvwm2 &'となっているところを`#fvwm2 &'とすると,各ウイ ンドウをWindowsの通常のウインドウとして操作できるようになります.この 辺りの改善はペパーミント の松崎さんの 貢献が大きいようです.

kinput2による日本語入力のON/OFFは`Ctrl-\'で行なうようになっています (ktermでは元のShift-spaceも使えます).違う設定にしたい場合 は,.canna,.Xresourcesなどの設定を変更してください.

各種パッチ

以下は以前に公開されていたものです.XFree-4.2.0にも適用可能ですが,最 新の情報については,sけいしさんの cygwinでコンパイルを参照してくだ さい.

xf410_xim_fix.diff
TAKABEさんによるXIMの不具合に対するパッチです.
X410_ja2byte.diff
sけいしさんによる2バイトwchar_t対応のパッチです.

作者

中丸 幸治


*1May 02 2003 追記: どうも今は-clipboardがうまく動かないようで す.-clipboardを外して.xinitrc中の`#xwinclip &'となっているところを `xwinclip &'とすると,ある程度動作します.