(home)

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

以前,このページではCygwinで動作するXについて,日本語に関連した次のよ うな問題を取り上げていました。

これらのうち,キーボードの問題など,Cygwinのパッケージやその他のネット 上のバイナリで解決しているものもありますが,不十分なものもあります。ま た,最近のCygwinのバイナリの問題として,

などの問題もあります。

ということで,いくつかバイナリを作りました。これらを導入すると, スクリーンショット のような環境が使えるようになります。

目次

更新情報

インストール

Cygwin

当然ですが,まず,Cygwinをインストールする必要があります。 真ゼロ円でできるXサーバ[Windows XP編]Cygwin/XFree86最新事情と日本語化 のPage 1などを参照してください。

なお,パッケージを選ぶ際は,デフォルトの他にXを全て選び,さらに Devel/gccも選んでください。これはXのコマンドの幾つかがcppに依存するた めです。

また,画像変換のため,tgifを使う場合は,Graphics/netpbmを選んでください。 後述のidrawを使う場合は,Graphics/ImageMagickをここで選ぶか,非Cygwin版 のImageMagickをダウンロードしてインストールしてください。最新版は ImageMagickにあります。

追加ファイル

ダウンロード

次に追加するファイルをダウンロードします。適当なディレクトリ(ここでは workとします)を作り,次の場所にあるファイルをダウンロードしてください。 対象となるCygwin/Xは,現時点(Feb 27 2005)で最新のものを前提としていま す。

もしwgetをインストールしているなら,次のようにすればよいです。

$ mkdir work
$ cd work
$ wget -A tgz,sum,sh -r -l0 -nd http://www.eaflux.com/cygwin/x-jp-supplement/binaries/

展開・設定

まず,各バイナリを展開します。

$ tar Cxzf / Xbin-corrected.tgz
$ tar Cxzf / kterm.tgz
$ tar Cxzf / canna.tgz
$ tar Cxzf / imeproxy.tgz
$ tar Cxzf / kinput2.tgz
$ tar Cxzf / xfig.tgz      # xfigを使う場合
$ tar Cxzf / tgif.tgz      # tgifを使う場合
$ tar Cxzf / idraw.tgz     # idrawを使う場合

canna.tgzは/usr/local/canna以下,imeproxy.tgzは/usr/sbinおよび/etc以下, それ以外のものは/etc/X11や/usr/X11R6以下に展開されます。 Xbin-corrected.tgzの内容はCygwinのXのパッケージが更新されると上書きされ ます。その場合は改めて展開しなおしてください。

なお,imeproxyを使わず,cannaのみを使う場合は,imeproxy.tgzは展開しな くてもかまいません。kinput2が依存するため,canna.tgzは常に展開してくだ さい。

注:上記の展開や過去のcygwinのパッケージの影響で, /usr/X11/lib/X11/app-defaultsの状態がおかしくなる場合があります。そこで, 展開をした後,次のようにしてください(問題がなければ何もしないスクリプト です)。

$ sh fixappdefaults.sh

次に設定を行います。次のようにstartup.tgzを展開し,install.shを実行し ます。古いファイルはバックアップされます。

$ tar xzf startup.tgz
$ cd startup
$ sh install.sh
replace /home/maru/.Xresources (y/n)? y
moving last /home/maru/.Xresources to /home/maru/.Xresources.20050227-090237
replace /home/maru/.canna (y/n)? y
moving last /home/maru/.canna to /home/maru/.canna.20050227-090237
replace /home/maru/.fvwm2rc (y/n)? y
moving last /home/maru/.fvwm2rc to /home/maru/.fvwm2rc.20050227-090237
replace /home/maru/.termcap (y/n)? y
moving last /home/maru/.termcap to /home/maru/.termcap.20050227-090237
replace /home/maru/.xinitrc (y/n)? y
moving last /home/maru/.xinitrc to /home/maru/.xinitrc.20050227-090237
replace /home/maru/.xserverrc (y/n)? y
moving last /home/maru/.xserverrc to /home/maru/.xserverrc.20050227-090237
replace /home/maru/.ttfonts (y/n)? y
moving last /home/maru/.ttfonts to /home/maru/.ttfonts.20050227-090237

もし,全てにyで答えるなら,

$ yes | sh install.sh

とすればよいです。

実行

適切に設定が行なわれていれば,後は/usr/X11R6/binにパスを通してstartxと するだけです。/usr/X11R6/binの他,idrawで画像の読み込みを行なう場合は ImageMagickのconvert.exeやidentify.exeがある場所にパスを通してください。 なお,startxから色々なメッセージが出力されるので,以下のよう に.bashrc/.tcshrcなどでエイリアスを作っておくと便利です。

.bashrc
alias xin='(cd; startx > .startx.log 2>&1) &'
.tcshrc
alias xin '(cd; startx >& .startx.log) &'

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

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

ところで,最近のXWin.exeは,OSの種類を見て自動的にキーボードの種類を切 り替えます。従って,以前のようにxmodmapによる明示的な設定を行なう必要 はありません。私は窓使いの憂鬱や 最近は猫まねきを愛用し ていますが,問題なく動作します。

ただし,Windows日本語版を使っていながら,USキーボードを使っていたりす ると,この判定が仇になります。その場合は,startup.tgzの_xinitrc内にあ るsetxkbmapのコメントアウト(#のこと)を外してください。

setxkbmap us

これで,キーボードがUSキーボードになります。

各ファイルの詳細

(ソース,パッチはもう少し整理してから公開します)

kterm.tgz
kterm-6.2.0にCygwin関係の修正 (Cygwinのページを参照) とUTF8のテキストのペーストについて修正を加えてコンパイルしたものです。
canna.tgz
Canna 3.7p3 (Cannaを参照) をコンパイルしたものです。
imeproxy.tgz
IME Proxy (IME Proxyを参照) をAlt-Tabの切り替えでウインドウが出ないように修正し,また,IME用ウイ ンドウの表示/アクティベートのロジックを修正したものです(オリジナルや 以前にここに置いたものでは,私が持っているWindows 2000ではうまく動き ませんでした)。修正内容は (winimm.c.patch)を参照してください。
kinput2.tgz
kinput2-v3.1をCannaのみを使うようにコンパイルしたものです。 Index of /canna37patches にあるワイドキャラクタ用APIのパッチも適用してあります。
tgif.tgz
tgif-4.1.44 (Tgif WWW Hypertext Home Pageを参照) をコンパイルしたものです。Project Vineによる修正や,その他の細かい修正 を加えてあります。
idraw.tgz
iv310jに様々な修正を加えたものです。元々はLinuxで動作させるために個 人的に保守してきたバージョンなので, Yasu's Linux Tips にあるものとは異なります。現在の版はfixeucfontaux で取り上げている修正を取り込んでいます。また,ImageMagickを利用して, ほぼ任意の画像を読み込めるようになっています。
xfig.tgz
xfig/transfig-3.2.4をコンパイルしたものです。cygwinにもxfigは含まれ ていますが,Xaw3Dにリンクされていて,日本語の入力ができません。 このバイナリは Xbin-corrected.tgzに含まれるラ イブラリとリンクしてあるので,日本語入力が可能です。
startup.tgz
次に示すスタートアップスクリプトなどが含まれています。
_ttfonts/{fonts.{alias,scale,dir},encodings.dir}
~/.ttfontsというTrueTypeフォントのディレクトリのためのファイルです。
_Xresources
.Xresourcesとしてホームディレクトリに置きます。内容はXIM関連や kterm,idraw,tgifなど日本語関係のリソースです。
_canna
.cannaとしてホームディレクトリに置きます。`Ctrl-\'で変換のON/OFFを 切り替えるようになっています。もちろん,別の設定にすることも可能で す。
_fvwm2rc
.fvwm2rcとしてホームディレクトリにおきます。ウインドウマネージャ fvwm2用の設定ファイルです。`Ctrl-Tab'でウインドウの切り替えができ るようにしてあります。
_termcap
.termcapとしてホームディレクトリに置きます。kterm用のエントリが含 まれています。
_xinitrc

.xinitrcとしてホームディレクトリに置きます。Xを立ち上げるためのス クリプトです。次のような処理をします。

  1. canna2imm32 (またはcannaserver)を起動
  2. TrueTypeフォントのディレクトリをフォントパスに追加
  3. .Xresourcesを読み込み
  4. kinput2を起動
  5. fvwm2を起動
  6. ktermを起動

そして,ktermでexitすると,canna2imm32 (またはcannaserver)を終了し ます。他のプロセスはXと共に終了します。

_xserverrc
.xserverrcとしてホームディレクトリに置きます。サーバのオプションを 指定するファイルです。
install.sh
上記のファイル・ディレクトリのためのインストーラです。
Xbin-corrected.tgz
/usr/X11R6/binの下の各種バイナリのcvsヘッドに対する修正版です。それ ぞれ,修正点は次の通りです。
cygX11-6.dll
sけいしさんが cygwin+Xの日本語環境を整える で公開しているwchar_tが2バイトでも動作するようにするパッチを適用し ています。
cygXaw-[678].dll
cygwin.cfのXawI18nDefinesの定義 を-DUSE_XWCHAR_STRING -DUSE_XMBTOWCとしてコンパイルしたものです。
md5.sum
上記のファイルのMD5チェックサムです。

各種情報

Cygwinに関する情報は沢山ありますが,丁寧に勉強したい方には, Cygwin+Cygwin JE をお勧めします。このCygwin JE (Cygwin用の各種日本語用パッケージ)は setup.exeでインストールできる形で,著者の1人である佐藤さんによって提供 されています (ProjectHeavyMoonを参照, ただ,このページで提供しているファイルをインストールする場合は,重複す るパッケージを避けるように気をつけてください)。

最近は更新されていないようですが,早田さんの Using Cygwin. にも,各種の情報がよくまとまっています。

作者

中丸 幸治