xinit
~/.xinitrc
ファイルは xinit
や startx
によって読み込まれるシェルスクリプトです。主として、X サーバーが起動した時にデスクトップ環境やウィンドウマネージャなどのプログラムを起動するのに使われます (デーモンの起動や環境変数のセットなど)。xinit
と startx
プログラムは X Window System を起動させ、X を直接 /etc/init
から起動できないシステムや複数のウィンドウシステムを使っている環境で、一番最初のクライアントプログラムとして動作します。
~/.xinitrc
の主要な仕事の一つは、/usr/bin/startx
や /usr/bin/xinit
プログラムが実行されたときに X Window System のためにどのクライアントを呼び出すか指定することです。様々な追加の記述やコマンドが存在しており、それらを ~/.xinitrc
に追加して、その後のシステムのカスタマイズも行えます。
ほとんどの DM は xinit の前に同じようなファイルである xprofile も読み込みます。
目次
インストール
xorg-xinit をインストールしてください。
設定
xinit と startx はオプションでクライアントプログラムの引数を取ります。#Override xinitrc を参照してください。もし、引数を与えなければ、クライアントプロラムを起動するシェルスクリプトとして、~/.xinitrc
を探します。
xinitrc
.xinitrc
がユーザーのホームディレクトリに配置されている場合、startx や xinit で実行されます。存在しない場合、startx は /etc/X11/xinit/xinitrc
を実行します。このファイルではデフォルトで Twm と Xterm、xorg-xclock を起動するようになっています (xinit にはファイルの実行以外のデフォルトの挙動があります、詳しくは man 1 xinit
を見て下さい)。したがって、他のウィンドウマネージャやデスクトップ環境を使う場合、まずデフォルトの xinitrc
のコピーを作成してください:
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
スクラッチでファイルを作成するのではなく、コピーを作成することで、/etc/X11/xinit/xinitrc.d
のシェルスクリプトの読み込みなど、オリジナルファイルに書かれているデフォルトの挙動を維持することができます。ただしこのディレクトリに含まれていても .sh
拡張子が付いていないスクリプトは読み込まれません: FS#41471。そのため、/etc/X11/xinit/xinitrc.d/?*.sh
は /etc/X11/xinit/xinitrc.d/?*
で置き換えて下さい [1]。
必要なコマンドを追加して、そのコマンドと衝突するような行を削除/コメントアウトしてください。exec
以降の行は無視されるので注意しましょう。例:
~/.xinitrc
... if [ -d /etc/X11/xinit/xinitrc.d ] ; then for f in /etc/X11/xinit/xinitrc.d/?* ; do [ -x "$f" ] && . "$f" done unset f fi # twm & # xclock -geometry 50x50-1+1 & # xterm -geometry 80x50+494+51 & # xterm -geometry 80x20+494-0 & # exec xterm -geometry 80x66+0+0 -name login xscreensaver & xsetroot -cursor_name left_ptr & exec openbox-session
スクリーンセーバーや壁紙アプリケーションといった、実行時間が長いプログラムをウィンドウマネージャよりも前に起動する場合、&
記号を付けてバックグラウンドで実行するべきです。ウィンドウマネージャが起動するまで、それぞれのプログラムが終了するまでスクリプトが停止してしまいます。xrdb など、競合状態が発生するためにフォークしてはならないプログラムもあるので注意しましょう。コマンドの前に exec
をつけているとスクリプトのプロセスがウィンドウマネージャのプロセスで置き換わり、プロセスがバックグラウンドにフォークされても X が終了しなくなります。
Xorg を通常ユーザーで実行するには、次を実行:
$ startx
または:
$ xinit -- :1 -nolisten tcp vt$XDG_VTNR
これで選択したウィンドウマネージャが起動します。
X を終了するには、ウィンドウマネージャの終了機能を実行してください。ウィンドウマネージャに終了機能がない場合、以下を実行:
$ pkill -15 Xorg
xserverrc
The xserverrc
file is a shell script responsible for starting up the X server. Both startx and xinit execute ~/.xserverrc
if it exists, startx will use /etc/X11/xinit/xserverrc
otherwise.
In order to maintain an authenticated session with logind
and to prevent bypassing the screen locker by switching terminals, Xorg has to be started on the same virtual terminal where the login occurred [3]. Therefore it is recommended to specify vt$XDG_VTNR
in the ~/.xserverrc
file:
~/.xserverrc
#!/bin/sh exec /usr/bin/Xorg -nolisten tcp "$@" vt$XDG_VTNR
See Xserver(1) for a list of all command line options.
Alternatively, if you wish to have the X display on a separate console from the one where the server is invoked, you can do so by using the X server wrapper provided by /usr/lib/systemd/systemd-multi-seat-x
. For convenience, xinit and startx can be set up to use this wrapper by modifying your ~/.xserverrc
.
使用方法
Xorg を通常のユーザーとして実行するには、次のように実行します。
$ startx
または、#xserverrc が設定されている場合は:
$ xinit -- :1
これでお好みのウィンドウマネージャー(またはデスクトップ環境)が正しく起動するはずです。
X を終了するには、ウィンドウマネージャーの exit 関数を実行してください(exit 関数があれば)。そのような機能がない場合は次のように実行します。
$ pkill -15 Xorg
signal(7) も参照してください。
ヒントとテクニック
コマンドラインから xinitrc を上書きする
~/.xinitrc
は既に記述しているが、他の WM/DE を試してみたい場合、ウィンドウマネージャのパスを加えて startx
を実行することができます:
$ startx /full/path/to/window-manager
フルパスが必要なので注意してください。
ウィンドウマネージャに引数を指定する場合、startx のパラメータとしてクォートで囲う必要があります:
$ startx "/full/path/to/window-manager --key value"
また、--
の後にカスタムオプションを指定して (デフォルトの X サーバーオプションが入っている) /etc/X11/xinit/xserverrc
を上書きすることもできます。例:
$ startx /usr/bin/enlightenment -- -nolisten tcp -br +bs -dpi 96 vt$XDG_VTNR
または:
$ xinit /usr/bin/enlightenment -- -nolisten tcp -br +bs -dpi 96 vt$XDG_VTNR
man startx
を参照してください。
ログイン時に X を自動起動
Bash の場合、~/.bash_profile
の最後に以下を追加してください。ファイルが存在しない場合、/etc/skel/.bash_profile
からスケルトンをコピーしてください。Zsh の場合、~/.zlogin
(または ~/.zprofile
) に追加してください。
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx
Fish#ログイン時に X を起動や Systemd/ユーザー#ディスプレイマネージャを使わずに Xorg に自動ログインも参照。
仮想端末に自動ログイン
上記の方法は仮想端末に自動ログインと組み合わせることができます。その場合、自動ログインする systemd サービスに適切な依存関係を設定して、~/.xinitrc
が読み込まれて pulseaudio が起動する前に dbus が起動するようにさせる必要があります (参照: BBS#155416)。
DE/WM の選択
様々な DE/WM を頻繁に切り替えて使っている場合、ディスプレイマネージャを使うか、以下のコードを .xinitrc
に追加することを推奨します。引数を使って起動したいデスクトップ環境やウィンドウマネージャをロードします:
~/.xinitrc
... # Here Xfce is kept as default session=${1:-xfce} case $session in awesome ) exec awesome;; bspwm ) exec bspwm;; catwm ) exec catwm;; cinnamon ) exec cinnamon-session;; dwm ) exec dwm;; enlightenment ) exec enlightenment_start;; ede ) exec startede;; fluxbox ) exec startfluxbox;; gnome ) exec gnome-session;; gnome-classic ) exec gnome-session --session=gnome-classic;; i3|i3wm ) exec i3;; icewm ) exec icewm-session;; jwm ) exec jwm;; kde ) exec startkde;; mate ) exec mate-session;; monster|monsterwm ) exec monsterwm;; notion ) exec notion;; openbox ) exec openbox-session;; unity ) exec unity;; xfce|xfce4 ) exec startxfce4;; xmonad ) exec xmonad;; # No known session, try to run it as command *) exec $1;; esac
/etc/X11/xinit/xserverrc
ファイルをホームディレクトリにコピーしてください:
$ cp /etc/X11/xinit/xserverrc ~/.xserverrc
その後、引数を指定して特定の DE/WM を起動することができます:
$ xinit $ xinit gnome $ xinit kde $ xinit wmaker
または:
$ startx $ startx ~/.xinitrc gnome $ startx ~/.xinitrc kde $ startx ~/.xinitrc wmaker
ウィンドウマネージャを使わずにアプリケーションを起動
ウィンドウマネージャを使わずに特定のアプリケーションだけを起動することも可能です。フルスクリーンモードで何か一つのアプリケーションを表示したいときに有用です。例:
~/.xinitrc
... exec chromium
この方法を使うときはアプリケーションのウィンドウの配置を、アプリケーションの設定ファイルで設定しておく必要があります。
ディスプレイマネージャ#ウィンドウマネージャを使わずにアプリケーションを起動も見て下さい。
startx 使用時の出力のリダイレクト
詳細は、Xorg#Session log redirection を参照してください。