xinitrc (日本語) - ArchWiki

# xinitrc (日本語)

関連記事

- ディスプレイマネージャ
- ログイン時に X を起動
- Xorg
- xprofile

`~/.xinitrc` ファイルは `xinit` や `startx` によって読み込まれるシェルスクリプトです。主として、X サーバーが起動した時にデスクトップ環境やウィンドウマネージャなどのプログラムを起動するのに使われます (デーモンの起動や環境変数のセットなど)。`xinit` と `startx` プログラムは X Window System を起動させ、X を直接 `/etc/init` から起動できないシステムや複数のウィンドウシステムを使っている環境で、一番最初のクライアントプログラムとして動作します。

`~/.xinitrc` の主要な仕事の一つは、`/usr/bin/startx` や `/usr/bin/xinit` プログラムが実行されたときに X Window System のためにどのクライアントを呼び出すか指定することです。様々な追加の記述やコマンドが存在しており、それらを `~/.xinitrc` に追加して、その後のシステムのカスタマイズも行えます。

## 初めに

新しくユーザーを作ったときのデフォルトと同じファイル・ディレクトリが `/etc/skel/` に入っています (skel という名前は skeleton (スケルトン) からきています。これらのファイルはユーザーの home ディレクトリのための基本骨格となるからです)。xorg-xinit パッケージは骨組みの `.xinitrc` ファイルで `/etc/skel` を初期設定します。

Note: `~/.xinitrc` はいわゆる'ドット' (.) ファイルと呼ばれるものです。*nix ファイルシステムでは名前の最初にドット (.) が付けられたファイルは'隠匿されて'普通の `ls` コマンドでは表示されません。`ls -A` を実行することでドットファイルを見ることができます。'rc' は Run Commands を示していて、単純に設定ファイルだということを表しています。プログラムの動作 (run) の方法をコントロールしているので、"Run Control" の意味だと言われることもあります（歴史的には間違っています）。

サンプルファイル `/etc/skel/.xinitrc` をあなたの home ディレクトリにコピーします:

    $ cp /etc/skel/.xinitrc ~

そして `~/.xinitrc` を編集し、あなたが使っている DE/WM に合わせて行をアンコメントします。例えば、基本的な X の設定（マウス、キーボード、解像度）をテストするために xterm を使いたい場合:

    #!/bin/sh
    #
    # ~/.xinitrc
    #
    # Executed by startx (run your window manager from here)

    if [ -d /etc/X11/xinit/xinitrc.d ]; then
      for f in /etc/X11/xinit/xinitrc.d/*; do
        [ -x "$f" ] && . "$f"
      done
      unset f
    fi

    # exec gnome-session
    # exec startkde
    # exec startxfce4
    # exec wmaker
    # exec icewm
    # exec blackbox
    # exec fluxbox
    # exec openbox-session
    # ...or the Window Manager of your choice
    exec xterm

Note: アンコメントされた `exec` 行が複数ある場合、アンコメントされた行の中で最初の行だけが実行されます。

`~/.xinitrc` を正しく設定したら、X を起動してください。X を起動するには:

    $ startx

あなたが選んだ DE/WM が起動するはずです。自由にキーボードやマウスやレイアウトをテストしてください。

### セッションの維持

logind セッションを維持するために、X はいつでもログインしたのと同じ tty で実行される必要があります。これはデフォルトの `/etc/X11/xinit/xserverrc` によって管理されています。関連する問題については General troubleshooting#Session permissions も見て下さい。

Note: 過去、古いセッションを壊す代わりに新しいセッションをスタートするために `ck-launch-session` が使われていました。`logind` にはこのようなことをするものがないので、任意の tty で X を実行するためにディスプレイマネージャが必要です。

## ファイル例

以下はスタートアッププログラムをいくつか含んだ `~/.xinitrc` の例です:

    ~/.xinitrc

    #!/bin/sh

    if [ -d /etc/X11/xinit/xinitrc.d ]; then
      for f in /etc/X11/xinit/xinitrc.d/*; do
        [ -x "$f" ] && . "$f"
      done
      unset f
    fi

    xrdb -merge ~/.Xresources         # update x resources db

    xscreensaver -no-splash &         # starts screensaver daemon
    xsetroot -cursor_name left_ptr &  # sets the cursor icon
    sh ~/.fehbg &                     # sets the background image

    exec openbox-session              # starts the window manager

`exec` の前に書かれていることは現在のプロセスを置き換えるものとして推奨されます、スクリプトの実行が停止したりプロセスがバックグラウンドにフォークされても X が終了しなくなります。

## ファイル設定

ディスプレイマネージャを使わない場合、X セッションの生殺与奪は `~/.xinitrc` 次第であることを心に留めて下さい。これはスクリプトが一度終了すればあなたが（ウィンドウマネージャを含む）プログラムをまだ実行していようと X が終了することを意味しています。従ってウィンドウマネージャの終了と X の終了が同時に起こる必要があるということが重要です。そのために、スクリプトの最後のプログラムとしてウィンドウマネージャを起動しましょう。

上の例では `cairo-compmgr`, `xscreensaver`, `xsetroot`, `sh` などのプログラムがバックグラウンドで実行されている (`&` が後ろに付けられている) ことに注意してください。そうしないと、`openbox-session` を実行する前に、スクリプトがそれぞれのプログラムやデーモンを待つことになります。また、`openbox-session` はバックグラウンドにしていないことも注意してください。これで openbox が動いている間はスクリプトが終了しないようになっています。

以下のセクションでは複数の WM や DE を使う場合の `~/.xinitrc` の設定方法を説明しています。

### コマンドライン

既に `~/.xinitrc` が動作しているが、他の WM/DE を試してみたい場合、ウィンドウマネージャへのパスを指定した `xinit` を実行することで WM/DE を起動できます:

    xinit /full/path/to/window-manager

フルパスが必要です。任意で、X サーバーに `--` の後でオプションを渡すこともできます - 例:

    xinit /usr/bin/enlightenment -- -br +bs -dpi 96

以下の `~/.xinitrc` の例では引数によって特定のウィンドウマネージャを起動する方法を示しています:

    ~/.xinitrc

    #!/bin/sh
    #
    # ~/.xinitrc
    #
    # Executed by startx (run your window manager from here)

    if [ -d /etc/X11/xinit/xinitrc.d ]; then
      for f in /etc/X11/xinit/xinitrc.d/*; do
        [ -x "$f" ] && . "$f"
      done
      unset f
    fi

    if [[ $1 == "fluxbox" ]]
    then
      exec startfluxbox
    elif [[ $1 == "spectrwm" ]]
    then
      exec spectrwm
    else
      echo "Choose a window manager"
    fi

このサンプルを使えば `xinit fluxbox` や `xinit spectrwm` というコマンドで fluxbox や spectrwm が起動できます。

### スタートアップ

Start X at Login (日本語) を見て下さい。

Categories:

- Desktop environments (日本語)
- X Server (日本語)