「Xinit」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
14行目: 14行目:
 
{{Related|Xorg}}
 
{{Related|Xorg}}
 
{{Related|xprofile}}
 
{{Related|xprofile}}
  +
{{Related|X resources}}
 
{{Related articles end}}
 
{{Related articles end}}
   
20行目: 21行目:
 
{{ic|~/.xinitrc}} の主要な仕事の一つは、{{ic|/usr/bin/startx}} や {{ic|/usr/bin/xinit}} プログラムが実行されたときに X Window System のためにどのクライアントを呼び出すか指定することです。様々な追加の記述やコマンドが存在しており、それらを {{ic|~/.xinitrc}} に追加して、その後のシステムのカスタマイズも行えます。
 
{{ic|~/.xinitrc}} の主要な仕事の一つは、{{ic|/usr/bin/startx}} や {{ic|/usr/bin/xinit}} プログラムが実行されたときに X Window System のためにどのクライアントを呼び出すか指定することです。様々な追加の記述やコマンドが存在しており、それらを {{ic|~/.xinitrc}} に追加して、その後のシステムのカスタマイズも行えます。
   
  +
ほとんどの DM は xinit の前に同じようなファイルである [[xprofile]] も読み込みます。
==初めに==
 
   
  +
== インストール ==
新しくユーザーを作ったときのデフォルトと同じファイル・ディレクトリが {{ic|/etc/skel/}} に入っています (''skel'' という名前は ''skeleton'' (スケルトン) からきています。これらのファイルはユーザーの home ディレクトリのための基本骨格となるからです)。{{Pkg|xorg-xinit}} パッケージは骨組みの {{ic|.xinitrc}} ファイルで {{ic|/etc/skel}} を初期設定します。
 
   
  +
{{Pkg|xorg-xinit}} を[[インストール]]してください。
{{Note|{{ic|~/.xinitrc}} はいわゆる'ドット' (.) ファイルと呼ばれるものです。*nix ファイルシステムでは名前の最初にドット (.) が付けられたファイルは'隠匿されて'普通の {{ic|ls}} コマンドでは表示されません。{{ic|ls -A}} を実行することでドットファイルを見ることができます。'rc' は ''Run Commands'' を示していて、単純に設定ファイルだということを表しています。プログラムの動作 (run) の方法をコントロールしているので、"Run Control" の意味だと言われることもあります(歴史的には間違っています)。}}
 
   
  +
== 設定 ==
サンプルファイル {{ic|/etc/skel/.xinitrc}} をあなたの home ディレクトリにコピーします:
 
$ cp /etc/skel/.xinitrc ~
 
   
  +
{{ic|.xinitrc}} がユーザーのホームディレクトリに配置されている場合、''startx'' や ''xinit'' で実行されます。存在しない場合、''startx'' は {{ic|/etc/X11/xinit/xinitrc}} を実行します。このファイルではデフォルトで [[Twm]] と [[Xterm]] を起動するようになっています (''xinit'' にはファイルの実行以外のデフォルトの挙動があります、詳しくは {{ic|man 1 xinit}} を見て下さい)。したがって、他のウィンドウマネージャやデスクトップ環境を使う場合、まずコピーを作成してください:
そして {{ic|~/.xinitrc}} を編集し、あなたが使っている DE/WM に合わせて行をアンコメントします。例えば、基本的な X の設定(マウス、キーボード、解像度)をテストするために [[xterm]] を使いたい場合:
 
   
  +
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
{{bc|
 
#!/bin/sh
 
#
 
# ~/.xinitrc
 
#
 
# Executed by startx (run your window manager from here)
 
   
  +
スクラッチでファイルを作成するのではなく、コピーを作成することで、{{ic|/etc/X11/xinit/xinitrc.d}} のシェルスクリプトの読み込みなど、オリジナルファイルに書かれているデフォルトの挙動を維持することができます。ただしこのディレクトリに含まれていても {{ic|.sh}} 拡張子が付いていないスクリプトは読み込まれません: {{Bug|41471}}。そのため、{{ic|/etc/X11/xinit/xinitrc.d/'''?*.sh'''}} は {{ic|/etc/X11/xinit/xinitrc.d/'''?*'''}} で置き換えて下さい [https://bbs.archlinux.org/viewtopic.php?pid=1514318#p1514318]。
if [ -d /etc/X11/xinit/xinitrc.d ]; then
 
  +
for f in /etc/X11/xinit/xinitrc.d/*; do
 
  +
必要なコマンドを追加して、そのコマンドと衝突するような行を削除/コメントアウトしてください。{{ic|exec}} 以降の行は無視されるので注意しましょう。例:
[ -x "$f" ] && . "$f"
 
  +
done
 
  +
{{hc|~/.xinitrc|
unset f
 
  +
...
  +
  +
if [ -d /etc/X11/xinit/xinitrc.d ] ; then
  +
for f in /etc/X11/xinit/xinitrc.d/'''?*''' ; do
  +
[ -x "$f" ] && . "$f"
  +
done
  +
unset f
 
fi
 
fi
   
  +
# twm &
# exec gnome-session
 
  +
# xclock -geometry 50x50-1+1 &
# exec startkde
 
  +
# xterm -geometry 80x50+494+51 &
# exec startxfce4
 
  +
# xterm -geometry 80x20+494-0 &
# exec wmaker
 
  +
# exec xterm -geometry 80x66+0+0 -name login
# exec icewm
 
  +
# exec blackbox
 
  +
xscreensaver '''&'''
# exec fluxbox
 
  +
xsetroot -cursor_name left_ptr '''&'''
# exec openbox-session
 
  +
'''exec''' openbox-session
# ...or the Window Manager of your choice
 
exec xterm
 
 
}}
 
}}
   
  +
{{Note|最低でも {{ic|.xinitrc}} ファイルには上記の例にある ''if'' ブロックを含めるようにしましょう。{{ic|/etc/X11/xinit/xinitrc.d/30-dbus.sh}} スクリプトが読み込まれます。これがないと [[D-Bus]] のセッションインスタンスが起動しません。}}
{{Note|アンコメントされた {{ic|exec}} 行が複数ある場合、アンコメントされた行の中で最初の行だけが実行されます。}}
 
  +
  +
スクリーンセーバーや壁紙アプリケーションといった、実行時間が長いプログラムをウィンドウマネージャよりも前に起動する場合、{{ic|&}} 記号を付けてバックグラウンドで実行するべきです。ウィンドウマネージャが起動するまで、それぞれのプログラムが終了するまでスクリプトが停止してしまいます。[[xrdb]] など、競合状態が発生するためにフォークしてはならないプログラムもあるので注意しましょう。コマンドの前に {{ic|exec}} をつけているとスクリプトのプロセスがウィンドウマネージャのプロセスで置き換わり、プロセスがバックグラウンドにフォークされても X が終了しなくなります。
  +
  +
Xorg を通常ユーザーで実行するには、次を実行:
   
{{ic|~/.xinitrc}} を正しく設定したら、X を起動してください。X を起動するには:
 
 
$ startx
 
$ startx
   
  +
または:
あなたが選んだ DE/WM が起動するはずです。自由にキーボードやマウスやレイアウトをテストしてください。
 
   
  +
$ xinit -- :1 -nolisten tcp vt$XDG_VTNR
===セッションの維持===
 
   
  +
これで選択したウィンドウマネージャが起動します。
logind セッションを維持するために、X はいつでもログインしたのと同じ tty で実行される必要があります。これはデフォルトの {{ic|/etc/X11/xinit/xserverrc}} によって管理されています。関連する問題については[[一般的なトラブルシューティング#セッションのパーミッション]]も見て下さい。
 
   
  +
{{Note|
{{Note|過去、古いセッションを壊す代わりに'''新しい'''セッションをスタートするために {{ic|ck-launch-session}} が使われていました。{{ic|logind}} にはこのようなことをするものがないので、任意の tty で X を実行するためにディスプレイマネージャが必要です。}}
 
  +
* 上記のコマンドはユーザーがログインしたのと同一の仮想端末上で [[Xorg]] を実行します [http://blog.falconindy.com/articles/back-to-basics-with-x-and-systemd.html]。これによって {{ic|logind}} によってセッションが認証されるので、ターミナルを切り替えることによって画面ロッカーを迂回されることを防ぎます。
  +
* [[一般的なトラブルシューティング#セッションのパーミッション|セッションのパーミッションを維持]]するには ''xinit'' のコマンドラインオプションとして {{ic|vt$XDG_VTNR}} を指定する必要があります。
  +
* 既に別の仮想アイテムにログインしている場合、''xinit'' は複数のセッションを扱えません。{{ic|-- :''session_no''}} を付け加えてセッションを指定するようにしてください。X が既に動作している場合、{{ic|:1}} 以上を指定します。}}
   
== ファイル例==
+
== Tips and tricks ==
以下はスタートアッププログラムをいくつか含んだ {{ic|~/.xinitrc}} の例です:
 
{{hc
 
|~/.xinitrc
 
|<nowiki>
 
#!/bin/sh
 
   
  +
=== コマンドラインから 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
 
   
  +
{{ic|~/.xinitrc}} は既に記述しているが、他の WM/DE を試してみたい場合、ウィンドウマネージャのパスを加えて {{ic|startx}} を実行することができます:
xrdb -merge ~/.Xresources # update x resources db
 
   
  +
$ startx /full/path/to/window-manager
xscreensaver -no-splash & # starts screensaver daemon
 
xsetroot -cursor_name left_ptr & # sets the cursor icon
 
sh ~/.fehbg & # sets the background image
 
   
  +
フルパスが必要なので注意してください。また、{{ic|--}} の後にカスタムオプションを指定して (デフォルトの X サーバーオプションが入っている) {{ic|/etc/X11/xinit/xserverrc}} を上書きすることもできます。例:
exec openbox-session # starts the window manager
 
</nowiki>}}
 
   
  +
$ startx /usr/bin/enlightenment -- -nolisten tcp -br +bs -dpi 96 vt$XDG_VTNR
{{ic|exec}} の前に書かれていることは現在のプロセスを置き換えるものとして推奨されます、スクリプトの実行が停止したりプロセスがバックグラウンドにフォークされても X が終了しなくなります。
 
   
  +
または:
== ファイル設定 ==
 
   
  +
$ xinit /usr/bin/enlightenment -- -nolisten tcp -br +bs -dpi 96 vt$XDG_VTNR
ディスプレイマネージャを使わない場合、X セッションの生殺与奪は {{ic|~/.xinitrc}} 次第であることを心に留めて下さい。これはスクリプトが一度終了すればあなたが(ウィンドウマネージャを含む)プログラムをまだ実行していようと X が終了することを意味しています。従ってウィンドウマネージャの終了と X の終了が同時に起こる必要があるということが重要です。そのために、スクリプトの最後のプログラムとしてウィンドウマネージャを起動しましょう。
 
   
  +
{{ic|man startx}} を参照してください。
上の例では {{ic|cairo-compmgr}}, {{ic|xscreensaver}}, {{ic|xsetroot}}, {{ic|sh}} などのプログラムがバックグラウンドで実行されている ({{ic|&}} が後ろに付けられている) ことに注意してください。そうしないと、{{ic|openbox-session}} を実行する前に、スクリプトがそれぞれのプログラムやデーモンを待つことになります。また、{{ic|openbox-session}} はバックグラウンドにしていないことも注意してください。これで openbox が動いている間はスクリプトが終了しないようになっています。
 
   
  +
=== DE/WM の選択 ===
以下のセクションでは複数の WM や DE を使う場合の {{ic|~/.xinitrc}} の設定方法を説明しています。
 
   
  +
様々な DE/WM を頻繁に切り替えて使っている場合、[[ディスプレイマネージャ]]を使うか、以下のコードを {{ic|.xinitrc}} に追加することを推奨します。引数を使って起動したいデスクトップ環境やウィンドウマネージャをロードします:
=== コマンドライン ===
 
   
  +
{{hc|~/.xinitrc|<nowiki>
既に {{ic|~/.xinitrc}} が動作しているが、他の WM/DE を試してみたい場合、ウィンドウマネージャへのパスを指定した {{ic|xinit}} を実行することで WM/DE を起動できます:
 
  +
...
   
  +
# Here Xfce is kept as default
xinit /full/path/to/window-manager
 
  +
session=${1:-xfce}
   
  +
case $session in
フルパスが'''必要'''です。任意で、X サーバーに {{ic|--}} の後でオプションを渡すこともできます - 例:
 
  +
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
  +
</nowiki>}}
   
  +
{{ic|/etc/X11/xinit/xserverrc}} ファイルをホームディレクトリにコピーしてください:
xinit /usr/bin/enlightenment -- -br +bs -dpi 96
 
   
  +
$ cp /etc/X11/xinit/xserverrc ~/.xserverrc
以下の {{ic|~/.xinitrc}} の例では引数によって特定のウィンドウマネージャを起動する方法を示しています:
 
   
  +
その後、引数を指定して特定の DE/WM を起動することができます:
{{hc
 
|~/.xinitrc
 
|<nowiki>
 
#!/bin/sh
 
#
 
# ~/.xinitrc
 
#
 
# Executed by startx (run your window manager from here)
 
   
  +
$ xinit
if [ -d /etc/X11/xinit/xinitrc.d ]; then
 
  +
$ xinit gnome
for f in /etc/X11/xinit/xinitrc.d/*; do
 
  +
$ xinit kde
[ -x "$f" ] && . "$f"
 
  +
$ xinit wmaker
done
 
unset f
 
fi
 
   
  +
または:
if [[ $1 == "fluxbox" ]]
 
  +
then
 
  +
$ startx
exec startfluxbox
 
  +
$ startx ~/.xinitrc gnome
elif [[ $1 == "spectrwm" ]]
 
  +
$ startx ~/.xinitrc kde
then
 
  +
$ startx ~/.xinitrc wmaker
exec spectrwm
 
  +
else
 
  +
=== ウィンドウマネージャを使わずにアプリケーションを起動 ===
echo "Choose a window manager"
 
  +
fi
 
  +
ウィンドウマネージャを使わずに特定のアプリケーションだけを起動することも可能です。フルスクリーンモードで何か一つのアプリケーションを表示したいときに有用です。例:
</nowiki>}}
 
  +
  +
{{hc|~/.xinitrc|
  +
...
  +
  +
exec chromium
  +
}}
   
  +
この方法を使うときはアプリケーションのウィンドウの配置を、アプリケーションの設定ファイルで設定しておく必要があります。
このサンプルを使えば {{ic|xinit fluxbox}} や {{ic|xinit spectrwm}} というコマンドで fluxbox や spectrwm が起動できます。
 
   
  +
{{Tip|この方法を使ってグラフィカルなゲームを起動することも可能です。特に、ウィンドウマネージャやデスクトップ環境、またはデスクトップアクセサリといったアプリケーションによるメモリと CPU の消費を抑えて、ゲームの実行パフォーマンスを底上げすることができます。}}
=== スタートアップ ===
 
   
  +
See also [[ディスプレイマネージャ#Starting applications without a window manager]].
[[ログイン時に X を起動]]を見て下さい。
 

2015年7月1日 (水) 21:38時点における版

関連記事

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

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

ほとんどの DM は xinit の前に同じようなファイルである xprofile も読み込みます。

インストール

xorg-xinitインストールしてください。

設定

.xinitrc がユーザーのホームディレクトリに配置されている場合、startxxinit で実行されます。存在しない場合、startx/etc/X11/xinit/xinitrc を実行します。このファイルではデフォルトで TwmXterm を起動するようになっています (xinit にはファイルの実行以外のデフォルトの挙動があります、詳しくは man 1 xinit を見て下さい)。したがって、他のウィンドウマネージャやデスクトップ環境を使う場合、まずコピーを作成してください:

$ 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
ノート: 最低でも .xinitrc ファイルには上記の例にある if ブロックを含めるようにしましょう。/etc/X11/xinit/xinitrc.d/30-dbus.sh スクリプトが読み込まれます。これがないと D-Bus のセッションインスタンスが起動しません。

スクリーンセーバーや壁紙アプリケーションといった、実行時間が長いプログラムをウィンドウマネージャよりも前に起動する場合、& 記号を付けてバックグラウンドで実行するべきです。ウィンドウマネージャが起動するまで、それぞれのプログラムが終了するまでスクリプトが停止してしまいます。xrdb など、競合状態が発生するためにフォークしてはならないプログラムもあるので注意しましょう。コマンドの前に exec をつけているとスクリプトのプロセスがウィンドウマネージャのプロセスで置き換わり、プロセスがバックグラウンドにフォークされても X が終了しなくなります。

Xorg を通常ユーザーで実行するには、次を実行:

$ startx

または:

$ xinit -- :1 -nolisten tcp vt$XDG_VTNR

これで選択したウィンドウマネージャが起動します。

ノート:
  • 上記のコマンドはユーザーがログインしたのと同一の仮想端末上で Xorg を実行します [2]。これによって logind によってセッションが認証されるので、ターミナルを切り替えることによって画面ロッカーを迂回されることを防ぎます。
  • セッションのパーミッションを維持するには xinit のコマンドラインオプションとして vt$XDG_VTNR を指定する必要があります。
  • 既に別の仮想アイテムにログインしている場合、xinit は複数のセッションを扱えません。-- :session_no を付け加えてセッションを指定するようにしてください。X が既に動作している場合、:1 以上を指定します。

Tips and tricks

コマンドラインから xinitrc を上書きする

~/.xinitrc は既に記述しているが、他の WM/DE を試してみたい場合、ウィンドウマネージャのパスを加えて startx を実行することができます:

$ startx /full/path/to/window-manager

フルパスが必要なので注意してください。また、-- の後にカスタムオプションを指定して (デフォルトの 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 を参照してください。

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

この方法を使うときはアプリケーションのウィンドウの配置を、アプリケーションの設定ファイルで設定しておく必要があります。

ヒント: この方法を使ってグラフィカルなゲームを起動することも可能です。特に、ウィンドウマネージャやデスクトップ環境、またはデスクトップアクセサリといったアプリケーションによるメモリと CPU の消費を抑えて、ゲームの実行パフォーマンスを底上げすることができます。

See also ディスプレイマネージャ#Starting applications without a window manager.