今さら .xinitrc, .xsession, .xprofile

今さらだけど、.xinitrc, .xsession, .xprofileの役割を整理しておこう。

自分の環境ではなんとなく問題なさそうに動いていたから、今まであまり気にしていなかったけど、たまにハマるのでこの機会によく理解しておこうかと。

xprofile vs xsession vs xinitrc

(上のリンク先の回答の受け売りとDebian Manualから)

どのプログラムが使うのか説明
.xinitrcxinit (と startx)。
ルートのXプログラム(Gnome, KDEなど)
startxなどで、ユーザーが手動でXをスタートさせる時に読み込む。
.xsessiondisplay managerイマドキのdisplay managerは起動するwindow managerを選べるので、.xsessionを参照したり、しなかったりする。
.xprofile(display mangerを介して)X セッションにログインした時の設定。
.profileと同様だけど、Xセッション特有のものだけ。
.xsessionrcXセッションの起動プロセスで読まれる。

どのデスクトップでも共通。

( ArchWikiの環境変数のページ にはGNOME Waylandはxprofileを読み込まないとある。)

Debian的な Xセッションの設定は

Debianのマニュアル( 7.5.3. Customizing the X session (new method) )を読む限りでは、.xsessionrcに書くほうが良さそう。 というのも、どのdesktopでも読まれるのは.xsessionrcだから。(ちなみに.xprofileはdisplay managerの起動プロセスで読まれるとある。)

.xprofileでも良さそうだけど、この辺りの違いがよく分からない。

またDebian Wiki Xsession に.xsessionrcに環境変数などを設定するように書いてある。

7.5.3. Customizing the X session (new method) によれば、設定ファイルにはexecexitを書いてはいけない。

DebianのXセッションの起動の流れ

現在のDebianの場合、Xセッションは以下の流れで動くらしい:

  • ユーザーが.xsessionrcファイルを持っている場合は、それを読む
  • 特定のdisplay mangerが選ばれている場合は、それを起動する
  • そうでない場合、もしもユーザーが.xsessionか.Xsessionファイルを持っている場合、それを起動する
  • そうでない場合、/usr/bin/x-session-mangerがあれば、それを起動する
  • そうでない場合、/usr/bin/x-window-mangerがあれば、それを起動する
  • そうでない場合、/usr/bin/x-terminal-emulatorがあれば、それを起動する
Xsession