xprofileとxinitrcとの違い
2014-06-14 追記
実体験に基づき追記。本文中に示したstartxでDEを利用する流れだが、どうにも異なるようだ。というのも、startxでDEを立ち上げた場合にxprofileの記述が反映されないことがあった。この場合、xprofile - ArchWikiに従ってxinitrcへ
[ -f /etc/xprofile ] && source /etc/xprofile [ -f ~/.xprofile ] && source ~/.xprofile
と追記すればよい。追記する場所は"exec startkde"などのDEを立ち上げる記述の前にする。こういう事情があるので、startxすればxinitrcを読んだあとでxprofileを読みに行く、というわけではないらしい。
おことわり
この記事の内容について、私はあまり自信を持てない。おそらくこうであろうとは思うのだが、明確な根拠を示せない。仮に正確な知識をお持ちの方がこの記事をご覧になり、訂正の必要があると判断された場合、ぜひとも訂正箇所をお教え願いたい。
本文
uimを普通に使う時に、設定ファイルへ追記する
export GTK_IM_MODULE='uim' export QT_IM_MODULE='uim' uim-xim & export XMODIFIERS='@im=uim'
という記述を、どのファイルへ加えればいいのか設定のたびに悩んでいた。Uim を使って日本語を入力 - ArchWikiに従えば、
~/.xprofile、~/.xinitrc、~/.xsession などに設定
とのことなのだが、この設定ファイル達の違いがわからない。 また、指示通りに記述してもuim-ximが立ち上がってくれなかったり、あるいはmultilibなソフトウェアで日本語が入力できなかったりという事があった。/etc/profileへ追記すればいい感じに動いてくれるということが判明してからは前述の記述を/etc/profileへ追記していたが、なんだか気持ちが悪い。
なので、xprofileとxinitrcについて少々学んでみることにした*1。
xprofileについては、xprofile - ArchWikiによると、ウィンドウマネージャ(以下WM)の起動前に実行したいコマンドを記述しておくものである。KDMとかGDMとか、名の知られたディスプレイマネージャ(以下DM)であれば、その実行時にユーザディレクトリ下の .xprofile を参照し、コマンドを実行する。WMとDMは独立して実行されるが、Xを使用するという意味ではDMのほうが先んじているので、DMがxprofileを参照することで、WMの起動に先んじて所望のコマンドを実行できる。
xinitrcは、同様にxinitrc - ArchWikiによれば、startxやxinitなどの、デスクトップ環境(以下DE)を立ち上げる際に使用するコマンドが参照するものである。
どちらもあまり変わらないような気がするが、このstartxやxinitといったコマンドが関わるかそうでないかが重要なところだ。SystemdなどでDMを有効にし、電源投入後に自動的に起動するように設定している場合、
$ ps aux | grep "startx\|xinit"
とかやれば、startxやxinitが実行されていない事がわかる。つまり、DMを使用する場合、DEを立ち上げる上でstartxは実行されず、よってxinitrcは参照されない。従ってDEを利用する際、startxなどを使用して立ち上げるときはxinitrcに、そうでない場合はxprofileに設定を記述すれば、期待した動作を得ることが出来る、という訳なようだ。加えて、startxでDEを利用する場合でも、
- startx
- ~/.xinitrcを見る
- DEが立ち上がる
- WMが立ち上がろうとする
- ~/.xprofileを見る
- WMが立ち上がる
- 見慣れた光景を得る
という流れのようなので、xinitrcではなくxprofileに設定を記述しても良い。
結論
迷ったらxinitrcに書けばよい。
ああ、つっかえていたものがとれたようでスッキリした。
参考
- xprofile - ArchWiki
- xinitrc - ArchWiki
- What's difference between .xinitrc & .bashrc & .xprofile / Applications & Desktop Environments / Arch Linux Forums
3番目のサイトではxprofileがいらない子扱いされている。
*1:xsessionについては、xprofileとxinitrcとを調べて解答を得た結果満足してしまったので調べていない。