Vine Linux 5.0におけるtgifの話

別にも書いたように、 tgifは古めのアプリケーションではあるが、 今でも私の手元にはその形式データが残っている。 ところが、VineLinux5.0ではいろいろと不具合があるようで、 文字が化けたり日本語が使えなかったりする。 そんな風だと自分が困るので調べてみることにした。

問題点の調査

いろいろと調べてみた結果、 問題は以下のような構造になっていることがわかった。

  1. 日本語入力の問題
  2. フォントの問題
    1. 英字フォントの問題
    2. 日本語フォントの問題

日本語入力の問題

tgifの内部エンコーディングは、 EUC-JP (もしくはそれ系)であることを前提として プログラムが組まれており、これを変更することは 大変な労力を要する。その一方で、 Vine 5.0からはutf-8を基本として システムが構成されるようになっている

環境変数LANGをEUC-JPのものにしてtgifを起動した場合、 tgifは日本語入力時にEUC-JPをシステムに要求するが、 システムはutf-8しか対応していないためエラーが出る。 環境変数をデフォルトのままtgifを起動した場合、 tgifは意図せずutf-8の入力をシステムに要求してしまうため、 その後実際に日本語文字が入力されたとき 文字の解釈を誤り、見えない/化けた文字となってしまう。

そこで、非常に汚い対応であるが、 tgifはutf-8の環境で起動させ、 文字が入力された直後にtgifの内部で強制的にEUC-JPに変換すればよいと考える。

英字フォントの問題

Vine 5.0のXでは、Times-RomanやHelvetica, Courier等のビットマップフォントのスケーリングが無いようである。 そのため、複数のサイズの英字の文字列が扱えなくなっている。

解決策としては、urwのType1フォントがTimes-RomanやHelvetica等の 代替フォントとして利用できるようなので、これをXのフォントパスに加え、 その代替フォントを利用するようにapp-defaults/Tgifで指定すればよい。

日本語フォントの問題

これはよくわからない。

ただ、これはtgif側だけの問題ではなく、 Vine5.0のXの側というかフォント側にも問題があるようである。

解決策としては、app-defaults/Tgifにおける メニューやダイアログのフォントセットの適切な設定、 Xのフォントのencodingsディレクトリにおける encodings.dirファイルの作成、 一見存在するように見えて、実はjisx0208.1983では利用できない (Xサーバのほうにfaceがどうとかいうエラーが出る) TrueTypeフォントの回避で何とかなるようである。

tgifを利用可能とする手順

複数存在する不具合の原因を解決するため、 tgifパッケージ以外についての作業も必要となる。 以下にその手順を記す。

(a) urw-fontsのための作業

普通すでにインストールされていると思うが、 urw-fontsがインストールされていなければ、 「apt-get install urw-fonts」 などとして、まずインストールする。

次にXからurw-fontsを使えるようにするために、

cd /etc/X11/fontpath.d
ln -s /usr/share/fonts/default/Type1 .

として、当該フォントの存在するディレクトリに対しリンクを張る。

(b) encodings.dirファイルの作成

多分これはそもそもxorg-X11-fonts-miscパッケージの スクリプトで行う作業だと思うのだけど、 無いものは仕方ないので手で行うことにする。

(xorg-X11-fonts-miscパッケージが入っていなければ 先にインストールしておくこと)

以下のコマンドで、encodings.dirファイルが生成される。

cd /usr/share/X11/fonts/encodings
mkfontdir -n -r -e . -e large

(c) fonts.dir等の生成

これは、TrueType-ipafont-minchoパッケージの スクリプトで行っている作業なのだけど、 Requireするパッケージの中にmktcapdirが入っていないため、 インストールする順番により、fonts.dir等が生成されていない時がある。

まず、「ls /usr/share/fonts/TrueType-ipafont」として、 もし、fonts.dirが存在しなければ、以下のコマンドで作成しておく。

mktcapdir /usr/share/fonts/TrueType-ipafont /usr/share/fonts/TrueType-ipafont/*.ttfconf

(d) 変更したtgifパッケージの作成

ベースとするtgifのソースパッケージであるtgif-4.1.45-1vl5.src.rpmは VineのFTPサイトのVinePlus/5/pool/に存在するのでダウンロードする。

rpm -ivh tgif-4.1.45-1vl5.src.rpm

などとして自分のrpmディレクトリにインストールした後は、 こちらで作成した utf8入力パッチファイル(汚い)Vine5.0専用app-defaults/Tgifファイル (いい加減なフォント設定) の二つを取得してから、

mv tgif-utf8dirtyhack.patch Tgif-vine50.ad ~/rpm/SOURCES/

などとして、rpmのSOURCESディレクトリに移動させる。 さらに、 こちらで変更したSPECファイル も取ってきた後、

mv tgif.spec ~/rpm/SPEC/

などとして、rpmのSPECディクトリのspecファイルを上書きしてしまう。

後は、

rpm -bb ~/rpm/SPEC/tgif.spec

としてバイナリパッケージの生成を行えばよい。

(書き忘れていたけど開発環境が入っていることは前提)

(e) 変更したtgifパッケージのインストール

先に生成したバイナリのtgifパッケージをインストールすれば、 多分動くと思う。

rpm -ivh ~/rpm/RPMS/i386/tgif-4.1.45-1vl5tpu1.i386.rpm

パッケージが足りなければapt-getなりその他のツールなりを つかってそのパッケージをインストールすること。

「(d)」の作業が面倒な人のために バイナリパッケージ とその元となる ソースパッケージ も置いておくけれど、 「(a)〜(c)」の作業(もしくはチェック)は必要である。 (こっちはちょい古い。下のやつの方が新しい。)

動作確認

フォントパスやらの変更をXに反映させるために、 一旦ログアウトしてもう一度ログインしてから tgifを動かしてみるとよい。

私の所では何となく動いている気がする。


[追加]tgif-QPL-4.2.2用

ある時VineSeedにtgif-QPL-4.2.2のパッケージがあることに気がついた。

手元のVine 5.1に入れて試してみたが、あまりうまく動かなかった。

手元で発生した問題は大まかに以下の通りである。

この辺を直したものを以下に記載する。 先の章の(a)-(c)の作業を行うインストールスクリプトとかを書いてみたので、 うまくいけばインストールするだけで他の作業はいらないかも。

取り合えず、こちらのVine5.1では動いている。


(2009.9.8作成)

(2009.9.9追加)

(2009.9.21ルーラが見難いので修正)

(2009.11.18 Helveticaフォントの設定を間違っていたので修正)

(2010.4.10 tgif-4.2.2用を追加)

(2011.8.19 ここにあるパッチは64ビット版では使えないことが判明。 こっちなら動くと思う)