GTKのインプリメソッドが有効になっていないことに気づき(GDMのころは問題なかった)、「.xinitrc」に以下の環境変数を追加して対応した。
export XMODIFIERS="@im=ibus"
export QT_IM_MODULE='ibus'
export GTK_IM_MODULE='ibus'
このままだと、EmacsにたいしてもiBusが有効になってしまうので、「alias emacs="XMODIFIERS=@im=none emacs"」を定義していてふと気づく。あれ、aliasの定義が有効になっていない?
「.shrc」(.profileから読み込んでいる)の中にはうっかりミスを防ぐため、
alias rm='rm -i'
alias mv='mv -i'
set -o noclobber
というのが定義してあるのだが、それが有効になってなかった。そういえば、rmでほんとうに削除するかどうか、聞かれなかったな。どういうことだ。Terminalで確認すると、たしかにaliasが定義されていない。というか、空だ。
どうやらDisplay ManagerをSLiMにかえてかららしい。
バグか、とも思ったが、試しにxdmにかえても同じだった。つまり仕様。たしか、「.profile」(つまり「.shrc」)はログインのときだけ取り込まれるんだっけか(不確か)。なので「sh -> sh -> sh」と立ち上げても「.profile」は取り込まれなかった。
「login」すれば、取り込まれる。
だからSLiMを使わずにコンソール画面からログインして(このとき、取り込まれている)「startx」すれば、aliasは定義された状態になる。そういう運用にすれば、問題ないわけだが……。
いろいろやってみた結果、「sh -> bash -> sh」はだめだが、「sh -> bash –login -> sh」なら取り込まれることがわかった。たぶんloginして最初のshが「.profile」を取り込むのだ。
なるほど。
ならこうすれば、いい、と気づいた。「/usr/local/etc/slim.conf」の中身を次のように変更した。
login_cmd exec /bin/sh - ~/.xinitrc %session
↓
login_cmd exec /usr/local/bin/bash -login ~/.xinitrc %session
ビンゴ。
これで正しい対応かどうかはわからないが、aliasが定義された状態になった。
これ自体はよかったのだが、最初のもくろみ——EmacsではiBusを無効にするというのは達成できなかった。Terminalからの「emacs」は無効になるのだが(aliasが定義されているのだからこれは想定通り)。ところがMATEのメニューからだとうまくいっていない。
そこでEmacsを起動するメニューランチャのプロパティに定義されているコマンドを「emacs %F」から「env XMODIFIERS="@im=none" emacs %F」へ変更した。