Let's note CF-SV8RDCVSを入手したのでOpenBSD/amd64 7.9を入れました。まだOSを入れただけに近い状態です。日本語環境を設定するため、環境変数「LANG=ja_JP.UTF-8」を設定し、日本語フォントにはnoto、日本語変換はfcitx-anthyを入れました。ちなみにログインシェルはパッケージからインストールしたtcshです。OpenBSDにはxenodmというディスプレイマネージャがあります。何も設定していなければfvwmが動きますが、「~/.xsession」を用意して、cwmが動くようにしておきました。
日本語変換としてfcitx-anthyを入れましたので、「~/.xsession」で環境変数も定義しておきます。動作確認のために、パッケージからFirefoxとLibreOfficeを入れ、日本語変換できるか確認しました。
setenv GTK_IM_MODULE fcitx
setenv QT_IM_MODULE fcitx
setenv XMODIFIERS @im=fcitx
日本語変換を確認するため、xtermからFirefoxを起動します。Ctrl-SPACEを押すと、日本語変換できました。ところがLibreOfficeでは、日本語変換できません。いろいろと調べていると、xterm上でprintenvしたら、環境変数「GTK_IM_MODULE」が定義されていないことが判明しました。しかし「QT_IM_MODULE」と「XMODIFIERS」は、ちゃんと定義されています。
以前であれば、Google検索で情報を収集していましたが、最近は、Geminiに相談して解決を模索することが多くなりました。余談となりますが、Geminiは、というか生成AIは何でもそうかと思いますが、豊富な情報量をもとに回答しますが、その回答がGeminiの妄想(ハルシネーションとも言う)であることも少なくありません。はっきりと「それは、こうだ」とか「何々が原因だ」とか断言しますが、証拠の提示を求めると、「間違っておりました」と白旗をあげることも多々あります。Geminiの回答を鵜呑みにしないで、自分でも裏付けをとらないと間違った方向に進んでしまいます。
閑話休題。環境変数「GTK_IM_MODULE」が消える過程を調べるため、試行錯誤しました。多くの可能性を考えたり、Geminiに相談を繰り返したりしましたが、次のように調査を進めました。
- コマンドラインから「ps -e -ww -ax -o pid,ppid,user,args」を実行してみました。するとcwmやxtermのプロセスでは環境変数「GTK_IM_MODULE」を保持しているにもかかわらず、その子プロセスとなるtcshには環境変数「GTK_IM_MODULE」がありませんでした。
- コマンドラインから「strings /usr/X11R6/bin/xterm | grep GTK」すると、文字列「GTK_」が見つかりました。
- OpenBSD版xtermのソース「main.c」を確認すると関数「xtermTrimEnv(void)」を発見しました。ここに「TRIM(1, GTK_),」という記述が含まれています。
つまりxtermは文字列「GTK_」で始まる環境変数を子プロセスに引き継がないようにロジックが組まれていたのです。ファイル「~/.xsession」で定義したはずの環境変数「GTK_IM_MODULE」が消えていたのは、バグではなく、仕様でした。
この問題が発生するのは、OpenBSDだけなのか、他OSも同様なのか、調べてみました。網羅的な調査はできませんが、OpenBSDだけの事象と思われます。
- NetBSDにおけるxtermのソース「main.c」を確認しました。ファイルの最初に「/* $XTermId: main.c,v 1.930 2024/12/01 19:57:13 tom Exp $ */」とあります。この中に関数「xtermTrimEnv(void)」は存在しますが、「GTK_」に関する記述は存在しませんでした。
- GitHubにあるxtermのソース「main.c」を確認しました。ファイルの最初に「/* $XTermId: main.c,v 1.946 2026/08/14 23:15:48 tom Exp $ */」とあります。この中に関数「xtermTrimEnv(void)」は存在しますが、「GTK_」に関する記述は存在しませんでした。
- OpenBSDにおけるxtermのソース「main.c」の最初には「/* $XTermId: main.c,v 1.944 2026/04/07 19:22:45 tom Exp $ */」とあります。OpenBSDのCVSwebで確認すると、「TRIM(1, GTK_)」が入ったのは、2025年11月1日のrevision 1.67でした。
OpenBSDに限らず、FreeBSDやNetBSD、もしくはUbuntuなどでも、日本語変換を入れたら、GTK用やQt用の環境変数を設定することが「お約束」になっています。その手順を踏んだだけだと思っていたのに、OpenBSDのxtermでは環境変数「GTK_IM_MODULE」が設定されない「仕様」になっているという落とし穴があるとは、青天の霹靂でした。