藤田です。 Date: Mon, Jul 25, 2005 at 10:47:18PM +0900 Subject: [vine-users:072512] Re: .bash_profile に stty を記述すると startx が止まる Message-Id: <20050725.224718.74756276.cyoichi@xxxxxxxxxxxxxxx> > 長南です。 > > 藤田さんのメールより [vine-users:072506] > > > > しかし、なぜ > > /etc/X11/xinit/xinitrc > > が > > #!/bin/bash -login > > で始まっているのでしょう。 > > /etc/X11/xinit/xinitrc をログインシェルとして起動しないと > (この表現はおかしいかもしれませんが、ご容赦ください)、 > /etc/profile そして /etc/profile.d/ime.sh が読み込まれず、 > /etc/X11/xinit/xinitrc.d/setime 中で実行される setime が > /usr/share/vine/vinelib にある関数ではなく、シェルスクリプトの > /usr/bin/setime になります(ランレベル 3 のログイン時に、当然ながら > 関数 setime を読み込んでいるのですが、関数 setime は export されて > いませんから)。その結果、変数 XMODIFIERS が、X の起動スクリプト中で > 設定されるものの、親プロセスに反映せず、X 上で kinput2 による > 日本語変換が出来なくなってしまいます。 > > というのが主な理由だろうと思っています。 おっしゃるとおり、kinput2 の日本語変換ができなくなったために -login が必要なんだとは思っていましたが、そういうからくりでしたか。 /usr/bin/setime で source /usr/share/vine/vinelib となっているので、直後の setime $@ で設定されるかと思っていましたが、 良く考えるとサブシェルですから、親プロセスに反映されないんですね。 ややこしい....。 > > # 他のいくつかの変数についても、同じことが言えますが、XMODIFIERS の > # 問題が一番はっきりしているので、例として上げました。 > > 私としては、/etc/X11/xinit/xinitrc.d/setime 中の「source /usr/share/ > vine/imelib」を「source /usr/share/vine/vinelib」に変更すれば、xinitrc > をログインシェルとして実行しなくてもすむのではないかと思うのですが、 > やはり何か副作用があるのかもしれません。 副作用を恐れず、上記のとおり変更してみました。 いまのところ問題無く使えています。といっても、わずか 10 分足らずですが。 どうも、/etc/profile や ~/.bash_profile はログインしたときに一度だけ 呼ばれるというイメージがあり、それにしたがって .bash_profile を作製 しており、xinitrc から -login オプションを付けて再度 .bash_profile を 読み込むのは不思議です。 それとも、-login オプションはいろいろなところで呼ばれることを想定して .bash_profile を作製するのが常識なんでしょうか。 なにはともあれ、長南さんのおっしゃるようにしてみると .bash_profile が最初のログイン時にしか読み込まれなくなったので、 .bash_profile の最後に stty stop undef を加えても止まらなくなりました。 .bash_profile が何度も読み込まれるのが気持ち悪いと思っていたので 上記の解決法はありがたかったです。 未だに stty を実行するとなぜ止まるのかは不明ですが。