付録 A. .xinitrc / .xsessionの設定

Verin の貢献による。

xinit の位置づけ

ウィンドウマネージャは mozillagimpxterm などと同じように、単に X11 のアプリケーションの一つにすぎません。 X11 に馴染みのない多くの人は、 X11 がウィンドウマネージャを実行し、 ウィンドウマネージャがプログラムを実行していると思いこんでしまっているようですが、 それは正しくありません。 適切に設定されていればすべてのアプリケーションを X11 で実行し、ウィンドウマネージャを kill して他のウィンドウマネージャを起動できます。

X11 が本当に動かしているのは .xinitrc あるいは .xsession スクリプトであり、他のプログラムはそれらから実行されています。 X11 が起動するとこれらのスクリプトの内どちらかが実行され、 スクリプトが終了すると X11 は終了します。 重要なので繰り返させて下さい: .xinitrc が終了すると X も終了します。 ウィンドウマネージャの終了時ではありません。

スクリプトレイアウト

さてまず何について知っているかはっきりさせましょう。 シェルではコマンドを入力すると、それが完了し終了するまで何もできません。 .xinitrc または .xsession スクリプトについてもちょうど同じことが言えます。 起動して実行していく間、(ほとんどの X11 アプリケーションでそうであるように) あるプログラムが実行に長時間かかるようであれば、それが終了するまで [スクリプトは] 一時停止します。

理想をいえばスクリプトが停止するのは一箇所に留めるべきです。 そして普通停止するのは一番最後にしたいと思うでしょう。 だからこの停止場所にくるまでに X11 で動かしたいプログラムがあるなら、 バックグラウンドで動かす (& を行の終りにおく)べきです。 例えば他のものに加えて xclock を動かしたいなら、停止場所の前に次の行をおきます:

    xclock &

さて次は exec です。 これについては、 沢山のソースでスクリプトにウィンドウマネージャを追加するための方法として推奨しています。 しかし本当のことをいうと、スクリプトの最後にウィンドウマネージャを書けば exec なしでもちょうどそこでうまくとまるので、 必ずしも必須というわけではありません。

ではなぜ exec するのでしょう? 沢山のウィンドウマネージャをスクリプトに書いておいてその中の一つを使うとしましょう。 exec を選択したものの前に置き、一番上にもってきます。 なぜならそれが exec の意味するものだからです。

自身をこのプログラムで置き換える、すなわちそれを起動し、 終了時には即座に自身を終了させる。

exec wmaker 行を exec enlightenment 行の前に置けば、 wmaker が終了するとスクリプトは決して次の行に進みません。

必須ではないといった意味はわかりますか? ウィンドウマネージャ群の行をコメントアウトするだけで、 ちょうど同じように動作するからです。

その他の方法

代替手段としては、ウィンドウマネージャを最初に起動し、プロセス ID を環境変数に保持しておくこともできます:

        wmaker & wmpid=$!

バックグラウンドで実行 (&) し、プロセス ID ($!) を変数 (wmpid) に保持します。 それから停止場所で wait できます:

    wait $wmpid

あるいは、 ただバックグラウンドに送ることで gkrellm のようないつも使いたいプログラムを停止させることもできます。 しかし気をつけなければならないのは、それを終了させると X11 セッションも終了してしまうということです。

私はドックアプリケーションやツールを起動する前に、 ウィンドウマネージャを起動しておくのが好みなので、 wait を使っています。 また他のものの前に DPMS、スクリーンセーバー、フォントパス (私はシステム全体用にフォントをインストールしません) などの X11 サーバ設定を変更する方を好むからでもあります。 そしてすべてが済むと、主にディスプレイマネージャを動かしているために、 フォントパスを掃除しておきたい (いつもフォントパスを再初期化するのはいいことではありません) のです。

例 A.1. .xinitrc

    # turn off screen blanking and turn on energy star features
    # (スクリーンを暗くする機能をオフにし、energy star 機能をオンに)
    xset s off
    xset dpms 600 60 60

    # add my optional fonts to the font path
    # (フォントパスにオプションのフォントを追加)
    xset +fp "$X_FONTPATH"
    xset fp rehash

    # export the current environment, in case it needs to be debugged
    # (環境設定をデバッグ用に出力)
    env > ~/.xenv

    # window manager
    # (ウィンドウマネージャ)
    fluxbox & wmpid=$!

    bbrun &
    wmCalClock &
    wmxmms &

    # HANG POINT - wait for window manager to exit
    # (停止点 - ウィンドウマネージャの終了を待つ)
    wait $wmpid

    # restore the x fontpath
    # (X フォントパスを復活)
    xset fp default