「Xinit」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(文字列「Tips and tricks」を「ヒントとテクニック」に置換)
(他の1人の利用者による、間の5版が非表示)
8行目: 8行目:
 
[[fr:Startx]]
 
[[fr:Startx]]
 
[[it:Xinitrc]]
 
[[it:Xinitrc]]
[[zh-CN:Xinitrc]]
+
[[zh-hans:Xinitrc]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|ディスプレイマネージャ}}
 
{{Related|ディスプレイマネージャ}}
29行目: 29行目:
 
== 設定 ==
 
== 設定 ==
   
{{ic|.xinitrc}} がユーザーのホームディレクトリに配置されている場合、''startx'' や ''xinit'' で実行されます。存在しない場合、''startx'' は {{ic|/etc/X11/xinit/xinitrc}} を実行します。このファイルではデフォルトで [[Twm]] と [[Xterm]] を起動するようになっています (''xinit'' にはファイルの実行以外のデフォルトの挙動があります、詳しくは {{ic|man 1 xinit}} を見て下さい)。したがって、他のウィンドウマネージャやデスクトップ環境を使う場合、まずコピーを作成してください:
+
{{ic|.xinitrc}} がユーザーのホームディレクトリに配置されている場合、''startx'' や ''xinit'' で実行されます。存在しない場合、''startx'' は {{ic|/etc/X11/xinit/xinitrc}} を実行します。このファイルではデフォルトで [[Twm]] と [[Xterm]]、{{Pkg|xorg-xclock}} を起動するようになっています (''xinit'' にはファイルの実行以外のデフォルトの挙動があります、詳しくは {{ic|man 1 xinit}} を見て下さい)。したがって、他のウィンドウマネージャやデスクトップ環境を使う場合、まずデフォルトの {{ic|xinitrc}} のコピーを作成してください:
   
 
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
 
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
71行目: 71行目:
   
 
これで選択したウィンドウマネージャが起動します。
 
これで選択したウィンドウマネージャが起動します。
  +
  +
X を終了するには、ウィンドウマネージャの終了機能を実行してください。ウィンドウマネージャに終了機能がない場合、以下を実行:
  +
  +
$ pkill -15 Xorg
  +
  +
{{Note|''pkill'' は全ての X インスタンスを終了します。現在の VT のウィンドウマネージャを指定して終了させるには、以下を使用:
  +
  +
{{bc|<nowiki>
  +
WM_PID=$(xprop -id $(xprop -root _NET_SUPPORTING_WM_CHECK \
  +
| awk -F'#' '{ print $2 }') _NET_WM_PID \
  +
| awk -F' = ' '{ print $2 }')
  +
  +
kill -15 $WM_PID</nowiki>}}
  +
  +
{{ic|xprop}} プログラムは[[公式リポジトリ]]の {{Pkg|xorg-xprop}} パッケージに入っています。
  +
}}
   
 
{{Note|
 
{{Note|
 
* 上記のコマンドはユーザーがログインしたのと同一の仮想端末上で [[Xorg]] を実行します [http://blog.falconindy.com/articles/back-to-basics-with-x-and-systemd.html]。これによって {{ic|logind}} によってセッションが認証されるので、ターミナルを切り替えることによって画面ロッカーを迂回されることを防ぎます。
 
* 上記のコマンドはユーザーがログインしたのと同一の仮想端末上で [[Xorg]] を実行します [http://blog.falconindy.com/articles/back-to-basics-with-x-and-systemd.html]。これによって {{ic|logind}} によってセッションが認証されるので、ターミナルを切り替えることによって画面ロッカーを迂回されることを防ぎます。
 
* [[一般的なトラブルシューティング#セッションのパーミッション|セッションのパーミッションを維持]]するには ''xinit'' のコマンドラインオプションとして {{ic|vt$XDG_VTNR}} を指定する必要があります。
 
* [[一般的なトラブルシューティング#セッションのパーミッション|セッションのパーミッションを維持]]するには ''xinit'' のコマンドラインオプションとして {{ic|vt$XDG_VTNR}} を指定する必要があります。
* 既に別の仮想アイテムにログインしている場合、''xinit'' は複数のセッションを扱えません。{{ic|-- :''session_no''}} を付け加えてセッションを指定するようにしてください。X が既に動作している場合、{{ic|:1}} 以上を指定します。}}
+
* 既に別の仮想アイテムにログインしている場合、''xinit'' は複数のセッションを扱えません。{{ic|-- :''session_no''}} を付け加えてセッションを指定するようにしてください。X が既に動作している場合、{{ic|:1}} 以上を指定します。
  +
* デフォルトでは、コンソールデバイスのパーミッションのため、X ディスプレイはログインした tty と同一である必要があります。これはデフォルトの {{ic|/etc/X11/xinit/xserverrc}} で管理されています。詳細は[[一般的なトラブルシューティング#セッションのパーミッション]]を参照してください。
  +
* サーバーを実行している場所から別のコンソールの X ディスプレイを使いたい場合、{{ic|/usr/lib/systemd/systemd-multi-seat-x}} によって提供されている X サーバーラッパーを使うことができます。{{ic|~/.xserverrc}} を編集してラッパーを使うように ''startx'' を設定することが可能です。
  +
* {{ic|startx}} の代わりに {{ic|xinit}} を使う場合は、{{ic|-nolisten tcp}} を渡して、異なる tty で X を起動することでセッションが破壊されることがないようにしてください。
  +
* "SocketCreateListener() failed" というエラーメッセージで X が終了してしまう場合、{{ic|/tmp/.X11-unix}} 内のソケットファイルを削除する必要があります。root で Xorg を起動してしまった場合に発生します。
  +
}}
   
  +
== ログイン時に X を自動起動 ==
== Tips and tricks ==
 
  +
  +
{{Note|ログインセッションを維持するために、X はログインしたのと同じ tty で実行させる必要があります。}}
  +
  +
[[Bash]] の場合、{{ic|~/.bash_profile}} の最後に以下を追加してください。ファイルが存在しない場合、{{ic|/etc/skel/.bash_profile}} からスケルトンをコピーしてください。[[Zsh]] の場合、{{ic|~/.zlogin}} (または {{ic|~/.zprofile}}) に追加してください。
  +
  +
{{bc|1=<nowiki>
  +
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx
  +
</nowiki>}}
  +
  +
{{Note|
  +
* 複数の VT でグラフィカルログインを使いたい場合、{{ic|-eq 1}} を {{ic|-le 3}} (vt1 から vt3) などで置き換えられます。
  +
* logind セッションを維持するために、X はログインしたのと同じ tty で実行させる必要があります。これはデフォルトの {{ic|/etc/X11/xinit/xserverrc}} で管理されています。
  +
* {{ic|xinit}} は {{ic|startx}} よりも高速ですが、{{ic|-nolisten tcp}} などの追加のパラメータを指定する必要があります。
  +
* X セッションが終了してもログインしたままにしたい場合、{{ic|exec}} を削除してください。
  +
}}
  +
  +
[[Fish#ログイン時に X を起動]]や [[Systemd/ユーザー#ディスプレイマネージャを使わずに Xorg に自動ログイン]]も参照。
  +
  +
=== 仮想端末に自動ログイン ===
  +
  +
上記の方法は[[仮想端末に自動ログイン]]と組み合わせることができます。その場合、自動ログインする systemd サービスに適切な依存関係を設定して、{{ic|~/.xinitrc}} が読み込まれて pulseaudio が起動する前に dbus が起動するようにさせる必要があります (参照: [https://bbs.archlinux.org/viewtopic.php?id=155416 BBS#155416])。
  +
  +
== ヒントとテクニック ==
   
 
=== コマンドラインから xinitrc を上書きする ===
 
=== コマンドラインから xinitrc を上書きする ===
85行目: 129行目:
 
$ startx /full/path/to/window-manager
 
$ startx /full/path/to/window-manager
   
フルパスが必要なので注意してください。また、{{ic|--}} の後にカスタムオプションを指定して (デフォルトの X サーバーオプションが入っている) {{ic|/etc/X11/xinit/xserverrc}} を上書きすることもできます。例:
+
フルパスが必要なので注意してください。
  +
  +
ウィンドウマネージャに引数を指定する場合、''startx'' のパラメータとしてクォートで囲う必要があります:
  +
$ startx "/full/path/to/window-manager --key value"
  +
  +
また、{{ic|--}} の後にカスタムオプションを指定して (デフォルトの X サーバーオプションが入っている) {{ic|/etc/X11/xinit/xserverrc}} を上書きすることもできます。例:
   
 
$ startx /usr/bin/enlightenment -- -nolisten tcp -br +bs -dpi 96 vt$XDG_VTNR
 
$ startx /usr/bin/enlightenment -- -nolisten tcp -br +bs -dpi 96 vt$XDG_VTNR
94行目: 143行目:
   
 
{{ic|man startx}} を参照してください。
 
{{ic|man startx}} を参照してください。
  +
  +
{{Tip|通常の GUI プログラムを起動するのに使うこともできます。[[#ウィンドウマネージャを使わずにアプリケーションを起動]] や [[ゲーム#別の X サーバーでゲームを起動する]] を参照。}}
   
 
=== DE/WM の選択 ===
 
=== DE/WM の選択 ===
164行目: 215行目:
 
{{Tip|この方法を使ってグラフィカルなゲームを起動することも可能です。特に、ウィンドウマネージャやデスクトップ環境、またはデスクトップアクセサリといったアプリケーションによるメモリと CPU の消費を抑えて、ゲームの実行パフォーマンスを底上げすることができます。}}
 
{{Tip|この方法を使ってグラフィカルなゲームを起動することも可能です。特に、ウィンドウマネージャやデスクトップ環境、またはデスクトップアクセサリといったアプリケーションによるメモリと CPU の消費を抑えて、ゲームの実行パフォーマンスを底上げすることができます。}}
   
See also [[ディスプレイマネージャ#Starting applications without a window manager]].
+
[[ディスプレイマネージャ#ウィンドウマネージャを使わずにアプリケーションを起動]]も見て下さい。

2017年10月12日 (木) 23:16時点における版

関連記事

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

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

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

$ startx

または:

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

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

X を終了するには、ウィンドウマネージャの終了機能を実行してください。ウィンドウマネージャに終了機能がない場合、以下を実行:

$ pkill -15 Xorg
ノート: pkill は全ての X インスタンスを終了します。現在の VT のウィンドウマネージャを指定して終了させるには、以下を使用:
WM_PID=$(xprop -id $(xprop -root _NET_SUPPORTING_WM_CHECK \
| awk -F'#' '{ print $2 }') _NET_WM_PID \
| awk -F' = ' '{ print $2 }')

kill -15 $WM_PID

xprop プログラムは公式リポジトリxorg-xprop パッケージに入っています。

ノート:
  • 上記のコマンドはユーザーがログインしたのと同一の仮想端末上で Xorg を実行します [2]。これによって logind によってセッションが認証されるので、ターミナルを切り替えることによって画面ロッカーを迂回されることを防ぎます。
  • セッションのパーミッションを維持するには xinit のコマンドラインオプションとして vt$XDG_VTNR を指定する必要があります。
  • 既に別の仮想アイテムにログインしている場合、xinit は複数のセッションを扱えません。-- :session_no を付け加えてセッションを指定するようにしてください。X が既に動作している場合、:1 以上を指定します。
  • デフォルトでは、コンソールデバイスのパーミッションのため、X ディスプレイはログインした tty と同一である必要があります。これはデフォルトの /etc/X11/xinit/xserverrc で管理されています。詳細は一般的なトラブルシューティング#セッションのパーミッションを参照してください。
  • サーバーを実行している場所から別のコンソールの X ディスプレイを使いたい場合、/usr/lib/systemd/systemd-multi-seat-x によって提供されている X サーバーラッパーを使うことができます。~/.xserverrc を編集してラッパーを使うように startx を設定することが可能です。
  • startx の代わりに xinit を使う場合は、-nolisten tcp を渡して、異なる tty で X を起動することでセッションが破壊されることがないようにしてください。
  • "SocketCreateListener() failed" というエラーメッセージで X が終了してしまう場合、/tmp/.X11-unix 内のソケットファイルを削除する必要があります。root で Xorg を起動してしまった場合に発生します。

ログイン時に X を自動起動

ノート: ログインセッションを維持するために、X はログインしたのと同じ tty で実行させる必要があります。

Bash の場合、~/.bash_profile の最後に以下を追加してください。ファイルが存在しない場合、/etc/skel/.bash_profile からスケルトンをコピーしてください。Zsh の場合、~/.zlogin (または ~/.zprofile) に追加してください。

[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx
ノート:
  • 複数の VT でグラフィカルログインを使いたい場合、-eq 1-le 3 (vt1 から vt3) などで置き換えられます。
  • logind セッションを維持するために、X はログインしたのと同じ tty で実行させる必要があります。これはデフォルトの /etc/X11/xinit/xserverrc で管理されています。
  • xinitstartx よりも高速ですが、-nolisten tcp などの追加のパラメータを指定する必要があります。
  • X セッションが終了してもログインしたままにしたい場合、exec を削除してください。

Fish#ログイン時に X を起動Systemd/ユーザー#ディスプレイマネージャを使わずに Xorg に自動ログインも参照。

仮想端末に自動ログイン

上記の方法は仮想端末に自動ログインと組み合わせることができます。その場合、自動ログインする systemd サービスに適切な依存関係を設定して、~/.xinitrc が読み込まれて pulseaudio が起動する前に dbus が起動するようにさせる必要があります (参照: BBS#155416)。

ヒントとテクニック

コマンドラインから 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 を参照してください。

ヒント: 通常の GUI プログラムを起動するのに使うこともできます。#ウィンドウマネージャを使わずにアプリケーションを起動ゲーム#別の X サーバーでゲームを起動する を参照。

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 の消費を抑えて、ゲームの実行パフォーマンスを底上げすることができます。

ディスプレイマネージャ#ウィンドウマネージャを使わずにアプリケーションを起動も見て下さい。