2014年12月6日土曜日

SLiM、MATE、iBus、.profileの取り込み

 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」へ変更した。