Debian 12 (x86)にATOK X for Linuxをインストールする
大昔にジャストシステムから発売されたATOK X for LinuxをDebian 12にインストールします。
この手順でインストールしたATOK Xは極めて不安定かつ、低速で、 変換ウィンドウやメニューすら表示されない有様ですが、 ある程度の動作確認は取れた為、現在の知識で出来る最善を記録する目的で記事にします。
トライアンドエラーを繰り返しまくった為、 もしかしたら必要の無い手順が入っているかもしれない。
また、DebianのIIIMFをインストールすれば改善するかもしれないが、 今回は付属のHTTとXIMで動かす。
環境及び検証内容
下記の環境をセットアップしています。
基本的にはDebianのインストーラで最小構成 + System Utilityをインストールした後、
xinitとopenboxをインストールした形です。
- Debian 12.9 i386
openbox 3.6.1-10xinit 1.4.0-1- 日本語設定
LANG=ja_JP.UTF-8XKBMODEL=pc105XKBLAYOUT=jpfonts-noto-cjk
下記のソフトウェアにて日本語入力を検証しました。
vim-gtk3 2:9.0.1378-2+deb12u2(成功)xterm 379-1(成功)kwrite(失敗, 反応せず)kate(失敗, 反応せず)
既知の問題
現状、下記の問題が起きており、解決方法は不明です。
- IMEのオンオフ切り替えが極めて遅い
- gvim等はつられてInsertモードへの切り替えなども遅くなる
- 変換の切り替えが遅くなる
- 候補の二つ目くらいまでは軽量に動くが、それ以降を呼ぼうとするとかなり遅くなる
- 変換候補ウィンドウやATOKパレットなどが表示されない
- 入力文字種表示のみが出てくる状態
- X全体がフリーズして操作を受け付けなくなる場合がある
- X全体ではなくアプリケーション単位でhtt (XIM)を読ませると影響を小さく出来る
AtokPaletteAux,SystemLineAux,LookupAuxが継続的にセグフォするsegfault at 35 ip ... sp ... error 4 in libglib-1.2.so.0.0.10[...]らしい- 読み込ませる
libglibを書き直したら直りそうだけど、さすがに知識が足りなさすぎる
公式tgzパッケージの展開
適当なディレクトリに、CD内のatokx-1.0-1.i386.tgzとiiimf.tgzをコピーし、
tar xf filename.tgzで展開する。
その後、cp -R ./{etc,usr,var} /でシステムにインストールする。
init.d/functionsのインストール
CentOSのinitscriptsのソースパッケージに含まれている、rc.d/init.d/functionsを/etc/rc.d/init.d/functionsに保存する。
今回は、initscripts-9.03.31-2.el6.centos.src.rpmから展開した。
(Wayback Machineのリンク)
consoletypeのビルド
Gentooプロジェクトのgentoo-functionsから、consoletype.cをもらってくる。
コンパイルはただgcc consoletype.cすればよい。
先のinitscriptsにあるconsoletype.cをビルドしても良さそうであるが、こちらは未検証。
コンパイルしたファイルは、/sbin/consoletypeに設置する。
libxtのインストール
普通にaptで入る。
一応libc6やlibx11も明示的に入れておくが、
多分最初から入っていると思う。
apt install libc6 libx11-6 libxt-dev
atokx及びIIimサービスのSystemdへの登録と実行
本来はinit.dファイルをSystemd向けに書き直すべきであろうが、
めんどくさいので、そのままSystemdから呼び出す形にする。
まず、/usr/lib/systemd/system/atokx.serviceは下記のようになる。
IIimの後に起動するようにしているが、特に要らない気もする。
[Unit]
Description=ATOK X Server
After=IIim.service
[Service]
Type=forking
ExecStart=/etc/rc.d/init.d/atokx start
ExecStop=/etc/rc.d/init.d/atokx stop
[Install]
WantedBy=default.target
/usr/lib/systemd/system/IIim.serviceは下記の通り。
こちらはsimpleで直接実行した方がエラー時の復旧的にもよいと思う。
[Unit]
Description=IIim
[Service]
Type=forking
ExecStart=/etc/rc.d/init.d/IIim start
ExecStop=/etc/rc.d/init.d/IIim stop
[Install]
WantedBy=default.target
2つとも設置できたら、下記のコマンドで起動してしまう。
systemctl daemon-reload
systemctl enable --now atokx IIim
xrdbの配置
aptでx11-xserver-utilsをインストールした後、
下記のコマンドで/usr/X11R6/binの中にxrdbのシンボリックリンクを置く。
mkdir -p /usr/X11R6/bin
ln -s /usr/bin/xrdb /usr/X11R6/bin/xrdb
GTK1.2のインストール
aptにはもう存在しないため、
GNOMEプロジェクトからglib-1.2.10.tar.gzとgtk+-1.2.10.tar.gzをダウンロードしてくる。
glibのインストール
ダウンロードしてきたglibのパッケージを展開し、
gstrfuncs.cを修正する。
おそらくこの修正は間違ったアプローチであるが、 現状これしか解決策が思い浮かばないので、 そのまま編集してしまう。
下記にpatchファイルを貼る。
適当にファイルに保存し、
patch < saved-patch-file.patchすれば適用されるはず。
--- gstrfuncs.c 2025-09-08 20:32:11.237763156 +0900
+++ gstrfuncs.c.patched 2025-09-08 16:31:52.089892394 +0900
@@ -867,8 +867,8 @@
/* beware of positional parameters
*/
case '$':
- g_warning (G_GNUC_PRETTY_FUNCTION
- "(): unable to handle positional parameters (%%n$)");
+ g_warning (G_GNUC_PRETTY_FUNCTION);
+ /* "(): unable to handle positional parameters (%%n$)"); */
len += 1024; /* try adding some safety padding */
break;
@@ -1034,8 +1034,8 @@
/* n . dddddddddddddddddddddddd E +- eeee */
conv_len += 1 + 1 + MAX (24, spec.precision) + 1 + 1 + 4;
if (spec.mod_extra_long)
- g_warning (G_GNUC_PRETTY_FUNCTION
- "(): unable to handle long double, collecting double only");
+ g_warning (G_GNUC_PRETTY_FUNCTION);
+ /* "(): unable to handle long double, collecting double only"); */
#ifdef HAVE_LONG_DOUBLE
#error need to implement special handling for long double
#endif
@@ -1077,8 +1077,8 @@
conv_done = TRUE;
if (spec.mod_long)
{
- g_warning (G_GNUC_PRETTY_FUNCTION
- "(): unable to handle wide char strings");
+ g_warning (G_GNUC_PRETTY_FUNCTION);
+ /* "(): unable to handle wide char strings"); */
len += 1024; /* try adding some safety padding */
}
break;
@@ -1108,9 +1108,9 @@
conv_len += format - spec_start;
break;
default:
- g_warning (G_GNUC_PRETTY_FUNCTION
- "(): unable to handle `%c' while parsing format",
- c);
+ g_warning (G_GNUC_PRETTY_FUNCTION);
+ /* "(): unable to handle `%c' while parsing format",
+ c); */
break;
}
conv_done |= conv_len > 0;
パッチの適用が終わったら、Configureとmake、make installを行う。
今回はインストール先を変更したいため、prefixを設定する。
また、コンパイルエラーをなくすために、いくつかのむちゃくちゃなオプションも指定する。
CFLAGS='-fcommon -D__const__=__volatile__' ./configure --prefix=/usr/local/gtk-1.2
make
make install
もしシステム全体にインストールしたい場合は、
prefixを明示的に/にする。
設定したprefixはgtk+のインストールでも同じ値を設定する。
gtk+のインストール
こちらも展開し、下記のコマンドでconfigureとmake、make installを行う。 パッチの適用は特に必要無い。
LD_LIBRARY_PATH=/usr/local/gtk-1.2/lib:$LD_LIBRARY_PATH GLIB_CONFIG=/usr/local/gtk-1.2/bin/glib-config CFLAGS='-fcommon' ./configure --prefix=/usr/local/gtk-1.2
make
make install
もし、先ほどのセクションでシステム全体にglibをインストールした場合は、configureコマンドを下記の要に変更する。
CFLAGS='-fcommon' ./configure --prefix=/
EUC-JPのロケール生成
/etc/locale.genのja_JP.EUC-JPの行をコメントを外し、
locale-genコマンドを実行して適用する。
システム全体のロケールを変更する必要は、 Fefora Core 1がUTF-8であることを考えるとなさそう。
libXi.soのインストール
aptでlibxi-devをインストールする。
Fedora Core 1向けのインストール手順を踏襲する為の手順のため、 もしかしたら飛ばせるかもしれない。
飛ばす場合は、atokx_clientスクリプトのLD_PRELOADも設定しないように。
atokx_clientスクリプトの編集
/usr/lib/im/locale/ja/atokserver/atokx_clientを編集する。
/usr/lib/im/httx -if atok12 -lc_basiclocale ja_JP -xim htt_xbe &
と書いてある行を、下記のように変更する。
LD_LIBRARY_PATHはGTK1.2をシステム全体に入れた場合は要らない。
LD_PRELOAD=/usr/lib/i386-linux-gnu/libXi.so LD_LIBRARY_PATH=/usr/local/gtk-1.2/lib:$LD_LIBRARY_PATH LANG=ja_JP.eucJP /usr/lib/im/httx -if atok12 -lc_basiclocale ja_JP -xim htt_xbe &
自動起動スクリプトを書く
httxがそれなりの頻度で落ちるため、
自動で再起動するスクリプトを用意する。
本資料では、これを~/.htt_helper.shに置く。
chmod +xを忘れないように。
#!/bin/bash
while true; do
htt_proc=`ps x | grep "/usr/lib/im/httx" | wc -l`
if [ $htt_proc -lt 2 ]; then
logger -is -p user.info -t htt_helper "httx might crashed or not booted. Restarting."
. /usr/lib/im/locale/ja/atokserver/atokx_client
fi
done
xinitrcを書く
~/.xinitrcに下記の内容を記述する。
上記の自動再起動スクリプトを使わない場合は、~/.htt_helper.shの行をコメントアウトし、
1行上にある純正のローダを呼び出す行のコメントを外す。
#!/bin/bash
export XMODIFIERS=@im=htt
export XIM="htt"
export XIM_PROGRAM=/bin/true
export GTK_IM_MODULE=xim
export QT_IM_MODULE=xim
#. /usr/lib/im/locale/ja/atokserver/atokx_client
~/.htt_helper.sh &
exec /etc/X11/xinit/xinitrc