「Xinit」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Kusanaginoturugi がページ「Xinitrc」をリダイレクトの「Xinit」に移動しました: 英語版にあわせる)
 
(4人の利用者による、間の24版が非表示)
2行目: 2行目:
 
[[Category:Xorg コマンド]]
 
[[Category:Xorg コマンド]]
 
[[de:Xinitrc]]
 
[[de:Xinitrc]]
[[el:Xinitrc]]
+
[[en:Xinit]]
[[en:Xinitrc]]
+
[[es:Xinit]]
[[es:Xinitrc]]
+
[[fr:Xinit]]
[[fr:Startx]]
+
[[pt:Xinit]]
[[it:Xinitrc]]
+
[[ru:Xinit]]
[[zh-hans:Xinitrc]]
+
[[zh-hans:Xinit]]
 
{{Related articles start}}
 
{{Related articles start}}
 
{{Related|ディスプレイマネージャ}}
 
{{Related|ディスプレイマネージャ}}
 
{{Related|Xorg}}
 
{{Related|Xorg}}
 
{{Related|xprofile}}
 
{{Related|xprofile}}
{{Related|X resources}}
+
{{Related|Xresources}}
 
{{Related articles end}}
 
{{Related articles end}}
  +
[[Wikipedia:xinit|Wikipedia]] から:
  +
:'''xinit''' プログラムにより、ユーザが [[Xorg]] ディスプレイサーバを手動で起動することが可能になります。{{man|1|startx}} スクリプトは {{man|1|xinit}} のフロントエンドです。
   
  +
通常、''xinit'' は[[ウィンドウマネージャ]]や[[デスクトップ環境]]を起動するために使用されます。''xinit'' を使うことでウィンドウマネージャ無しで GUI アプリケーションを実行することができますが、多くのグラフィカルアプリケーションは [[Wikipedia:ja:Extended Window Manager Hints|EWMH]] に準拠したウィンドウマネージャを期待します。[[ディスプレイマネージャ]]は [[Xorg]] を起動し、一般的に [[xprofile]] を読み込みます。
{{ic|~/.xinitrc}} ファイルは {{ic|xinit}} や {{ic|startx}} によって読み込まれるシェルスクリプトです。主として、X サーバーが起動した時に[[デスクトップ環境]]や[[ウィンドウマネージャ]]などのプログラムを起動するのに使われます (デーモンの起動や環境変数のセットなど)。{{ic|xinit}} と {{ic|startx}} プログラムは [[Xorg|X Window System]] を起動させ、X を直接 {{ic|/etc/init}} から起動できないシステムや複数のウィンドウシステムを使っている環境で、一番最初のクライアントプログラムとして動作します。
 
 
{{ic|~/.xinitrc}} の主要な仕事の一つは、{{ic|/usr/bin/startx}} や {{ic|/usr/bin/xinit}} プログラムが実行されたときに X Window System のためにどのクライアントを呼び出すか指定することです。様々な追加の記述やコマンドが存在しており、それらを {{ic|~/.xinitrc}} に追加して、その後のシステムのカスタマイズも行えます。
 
 
ほとんどの DM は xinit の前に同じようなファイルである [[xprofile]] も読み込みます。
 
   
 
== インストール ==
 
== インストール ==
27行目: 25行目:
 
== 設定 ==
 
== 設定 ==
   
  +
''xinit'' と ''startx'' は任意でクライアントプログラムの引数を受け取ります。[[#xinitrc をオーバーライドする]] を参照してください。もし、引数を与えなければ、クライアントプロラムを起動するシェルスクリプトとして、{{ic|~/.xinitrc}} を探します。
''xinit'' and ''startx'' take an optional client program argument, see [[#Override xinitrc]]. If you do not provide one they will look for {{ic|~/.xinitrc}} to run as a shell script to start up client programs.
 
   
 
=== xinitrc ===
 
=== xinitrc ===
   
{{ic|.xinitrc}} がユーザのホームディレクトリに配置されている場合、''startx'' ''xinit'' 実行されます。存在しない場合、''startx'' は {{ic|/etc/X11/xinit/xinitrc}} を実行します。このファイルではデフォルトで [[Twm]] と [[Xterm]]、{{Pkg|xorg-xclock}} を起動するようになっています (''xinit'' にはファイルの実行以外のデフォルトの挙動があります、詳しくは {{ic|man 1 xinit}} を見て下さい)。したがって、他のウィンドウマネージャやデスクトップ環境を使う場合、まずデフォルトの {{ic|xinitrc}} のコピーを作成してください:
+
{{ic|~/.xinitrc}} は、X に依存するプログラムを実行し、X サーバの起動時に環境変数を設定するのに便利です。このファイルがユーザのホームディレクトリに存在する場合、''startx'' ''xinit'' はこのファイルを実行ます。それ以外の場合、''startx'' はデフォルトの {{ic|/etc/X11/xinit/xinitrc}} を実行します。
  +
  +
{{note|''Xinit'' には、このファイルを実行する以外に独自のデフォルトの動作があります。詳細については、{{man|1|xinit}} を参照してください。}}
  +
  +
デフォルトの xinitrc は、[[Twm]]、{{Pkg|xorg-xclock}}、そして [[Xterm]] を起動した基本的な環境を開始します (このファイルは、必要なパッケージがインストールされていると仮定しています)。そのため、別のウィンドウマネージャやデスクトップ環境を始めるには、まずデフォルトの {{ic|xinitrc}} のコピーをホームディレクトリに作成します:
   
 
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
 
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
   
  +
それからそのファイルを[[テキスト編集|編集]]して、デフォルトのプログラムを好きなコマンドに置き換えてください。{{ic|exec}} を使用するコマンド以降の行は無視されることを覚えておいてください。たとえば、{{ic|xscreensaver}} をバックグラウンドで開始してから [[Openbox#スタンドアロン|openbox]] を開始するには、以下のように記述します:
スクラッチでファイルを作成するのではなく、コピーを作成することで、{{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]。
 
 
必要なコマンドを追加して、そのコマンドと衝突するような行を削除/コメントアウトしてください。{{ic|exec}} 以降の行は無視されるので注意しましょう。例:
 
   
 
{{hc|~/.xinitrc|
 
{{hc|~/.xinitrc|
 
...
 
...
  +
xscreensaver &
  +
exec openbox-session}}
   
  +
{{Note|最低限、{{ic|/etc/X11/xinit/xinitrc}} にある最後の {{ic|if}} ブロックが、あなたの {{ic|~/.xinitrc}} ファイルにあることを確認してください。これにより、 {{ic|/etc/X11/xinit/xinitrc.d}} にあるスクリプトが読み込まれることを保証できます。}}
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|&}} 記号をつけてバックグラウンドで実行しなければなりません。そうしないと、スクリプトはウィンドウマネージャやデスクトップ環境を実行する前に停止し、それらのプログラムが終了するのを待ちます。いくつかのプログラムは、 [[xrdb]] のように、競合バグを回避するためフォークしないでください。{{ic|exec}} を前につけることで、スクリプトプロセスをウィンドウマネージャプロセスへ入れ替えることができます。これにより、たとえこのプロセスがバックグランドへフォークされても X が終了しないようにできます。
# 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
 
}}
 
 
{{Note|最低でも {{ic|.xinitrc}} ファイルには上記の例にある ''if'' ブロックを含めるようにしましょう。{{ic|/etc/X11/xinit/xinitrc.d/30-dbus.sh}} スクリプトが読み込まれます。これがないと [[D-Bus]] のセッションインスタンスが起動しません。}}
 
 
スクリーンセーバーや壁紙アプリケーションといった、実行時間が長いプログラムをウィンドウマネージャよりも前に起動する場合、{{ic|&}} 記号を付けてバックグラウンドで実行するべきです。ウィンドウマネージャが起動するまで、それぞれのプログラムが終了するまでスクリプトが停止してしまいます。[[xrdb]] など、競合状態が発生するためにフォークしてはならないプログラムもあるので注意しましょう。コマンドの前に {{ic|exec}} をつけているとスクリプトのプロセスがウィンドウマネージャのプロセスで置き換わり、プロセスがバックグラウンドにフォークされても X が終了しなくなります。
 
 
Xorg を通常ユーザーで実行するには、次を実行:
 
 
$ startx
 
 
または:
 
 
$ xinit -- :1 -nolisten tcp vt$XDG_VTNR
 
 
これで選択したウィンドウマネージャが起動します。
 
 
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|
 
* 上記のコマンドはユーザーがログインしたのと同一の仮想端末上で [[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}} 以上を指定します。
 
* デフォルトでは、コンソールデバイスのパーミッションのため、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 を起動してしまった場合に発生します。
 
}}
 
   
 
=== xserverrc ===
 
=== xserverrc ===
   
The {{ic|xserverrc}} file is a shell script responsible for starting up the X server. Both ''startx'' and ''xinit'' execute {{ic|~/.xserverrc}} if it exists, ''startx'' will use {{ic|/etc/X11/xinit/xserverrc}} otherwise.
+
{{ic|xserverrc}} ファイルは、X サーバの起動を担当するシェルスクリプトです。''startx'' ''xinit'' はどちらも {{ic|~/.xserverrc}} が存在すればそれを実行し、存在しなければ ''startx'' {{ic|/etc/X11/xinit/xserverrc}} を使用します。
   
  +
[[一般的なトラブルシューティング#セッションのパーミッション|認証されたセッション]]を {{ic|logind}} で維持できるようにし、かつ、ターミナルを切り替えることで画面ロッカーをバイパスできないようにするために、ログインが行われたのと同じ仮想コンソールで [[Xorg]] を起動しなければなりません [http://blog.falconindy.com/articles/back-to-basics-with-x-and-systemd.html]。そのため、{{ic|~/.xserverrc}} ファイルで {{ic|vt$XDG_VTNR}} を指定することが推奨されます:
In order to maintain an [[General troubleshooting#Session permissions|authenticated session]] with {{ic|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 [http://blog.falconindy.com/articles/back-to-basics-with-x-and-systemd.html]. Therefore it is recommended to specify {{ic|vt$XDG_VTNR}} in the {{ic|~/.xserverrc}} file:
 
   
 
{{hc|~/.xserverrc|
 
{{hc|~/.xserverrc|
112行目: 60行目:
 
}}
 
}}
   
  +
全てのコマンドラインオプションの一覧は {{man|1|Xserver}} を参照してください。
See {{man|1|Xserver}} for a list of all command line options.
 
   
{{Tip|{{ic|-nolisten local}} can be added after {{ic|-nolisten tcp}} to disable abstract sockets of X11 to help with isolation. There is a [https://tstarling.com/blog/2016/06/x11-security-isolation/ quick background] on how this potentially affects X11 security.}}
+
{{Tip|{{ic|-nolisten local}} {{ic|-nolisten tcp}} の後に追加すると、X11 の抽象ソケットを無効でき、X の分離に役立ちます。これが X11 のセキュリティにどのような影響を及ぼしうるのかについての[https://tstarling.com/blog/2016/06/x11-security-isolation/ 簡単な説明]があります。}}
   
  +
あるいは、サーバを起動するコンソールとは別のコンソールで X を表示させたい場合は、 {{ic|/usr/lib/systemd/systemd-multi-seat-x}} が提供する X サーバラッパーを使って表示させることも可能です。利便性のために、''xinit'' と ''startx'' は {{ic|~/.xserverrc}} を修正することでこのラッパーを使うようにセットアップすることができます。
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 {{ic|/usr/lib/systemd/systemd-multi-seat-x}}. For convenience, ''xinit'' and ''startx'' can be set up to use this wrapper by modifying your {{ic|~/.xserverrc}}.
 
   
  +
{{Note|X セッションから Xorg ログファイルへの出力のリダイレクトを再び有効にするには、{{ic|-keeptty}} オプションを追加してください。詳しくは [[Xorg#セッションログのリダイレクト]] を見て下さい。}}
{{Note|To re-enable redirection of the output from X session into the Xorg log file, add the {{ic|-keeptty}} option. See [[Xorg#Session log redirection]] for details.}}
 
   
 
== 使用方法 ==
 
== 使用方法 ==
   
Xorg を通常のユーザとして実行するには、次のように実行します
+
Xorg を通常のユーザとして実行するには、次のように実行します:
   
 
$ startx
 
$ startx
130行目: 78行目:
 
$ xinit -- :1
 
$ xinit -- :1
   
{{Note|''xinit'' は他の X サーバがすでに起動している場合は、複数の表示を処理しません。その場合、{{ic|-- :''display_number''}} ({{ic|''display_number''}} は {{ic|1}} 以上) を付けてディスプレイを指定してください。}}
+
{{Note|''xinit'' は他の X サーバがすでに起動している場合は、複数のディスプレイを処理しません。その場合、{{ic|-- :''display_number''}} ({{ic|''display_number''}} は {{ic|1}} 以上) を付けてディスプレイを指定しなければなりません。}}
   
 
これでお好みのウィンドウマネージャー(またはデスクトップ環境)が正しく起動するはずです。
 
これでお好みのウィンドウマネージャー(またはデスクトップ環境)が正しく起動するはずです。
   
X を終了するには、ウィンドウマネージャーの exit 関数を実行してください(exit 関数があれば)。そのような機能がない場合は次のように実行します
+
X を終了するには、ウィンドウマネージャーの exit 関数を実行してください (exit 関数があると仮定します)。そのような機能がない場合は次のように実行します:
   
 
$ pkill -15 Xorg
 
$ pkill -15 Xorg
   
{{Note|''pkill'' は実行中の X インスタンスを全て kill します。現在の仮想端末上のウィンドウマネージャーを kill するには、次のように実行します:
+
{{Note|''pkill'' は実行中の X インスタンスを全て kill します。現在の仮想コンソール上のウィンドウマネージャーを kill するには、次のように実行します:
   
 
$ pkill -15 -t tty"$XDG_VTNR" Xorg
 
$ pkill -15 -t tty"$XDG_VTNR" Xorg
147行目: 95行目:
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==
   
=== コマンドラインから xinitrc を上書きする ===
+
=== xinitrc をオーバーライドする ===
   
{{ic|~/.xinitrc}} は既に記述しているが、他の WM/DE を試してみたい場合、ウィンドウマネージャのパスを加えて {{ic|startx}} を実行することができます:
+
すでに {{ic|~/.xinitrc}} があるが、他のウィンドウマネージャやデスクトップ環境を試してみたい場合、ウィンドウマネージャのパスを付け加えて ''startx'' を実行することで、ウィンドウマネージャを起動させることができます。例えば:
   
$ startx /full/path/to/window-manager
+
$ startx /usr/bin/i3
   
  +
ウィンドウマネージャのバイナリが引数を取る場合、引数全体が ''startx'' の第1パラメータとして認識されるようにするために引数を引用符で囲む必要があります:
フルパスが必要なので注意してください。
 
   
  +
$ startx "/usr/bin/''application'' --''key value''"
ウィンドウマネージャに引数を指定する場合、''startx'' のパラメータとしてクォートで囲う必要があります:
 
$ startx "/full/path/to/window-manager --key value"
 
   
また、{{ic|--}}後にカスタムオプションを指定して (デフォルトの X サーバーオプションが入っている) {{ic|/etc/X11/xinit/xserverrc}} を上書きすることできます。例:
+
完全なパスが '''必要である''' ことに注意してください。また、[[#xserverrc]] スクリプトのカスタムオプションは、{{ic|--}} 記号のあとに付け加えることで指定できます:
   
$ startx /usr/bin/enlightenment -- -nolisten tcp -br +bs -dpi 96 vt$XDG_VTNR
+
$ startx /usr/bin/enlightenment -- -br +bs -dpi 96
   
  +
{{man|1|startx}} も参照してください。
または:
 
   
  +
{{Note|1={{ic|/etc/X11/xinit/xinitrc.d/}} にあるスクリプトはスキップされるので、環境変数 {{ic|DISPLAY}} を設定する必要があるかもしれません。次のように実行することで、''i3'' を好きなディスプレイに表示させてみることができます: {{ic|1=DISPLAY=:''display_number'' startx /usr/bin/i3}}。}}
$ xinit /usr/bin/enlightenment -- -nolisten tcp -br +bs -dpi 96 vt$XDG_VTNR
 
   
  +
{{Tip|これにより通常の GUI プログラムを開始できますが、基本的なウィンドウマネージャの機能はありません。[[#ウィンドウマネージャを使わずにアプリケーションを起動する]] と [[ゲーム#別の X サーバーでゲームを起動する]] を参照してください。}}
{{ic|man startx}} を参照してください。
 
 
{{Tip|通常の GUI プログラムを起動するのに使うこともできます。[[#ウィンドウマネージャを使わずにアプリケーションを起動]] や [[ゲーム#別の X サーバーでゲームを起動する]] を参照。}}
 
   
 
=== ログイン時に X を自動起動 ===
 
=== ログイン時に X を自動起動 ===
   
  +
''startx'' が適切に[[#設定|設定されている]]ことを確認してください。
{{Note|ログインセッションを維持するために、X はログインしたのと同じ tty で実行させる必要があります。}}
 
   
[[Bash]] の場合{{ic|~/.bash_profile}} の最後に以下を追加してください。ファイルが存在しない場合{{ic|/etc/skel/.bash_profile}} からスケルトンをコピーしてください。[[Zsh]] の場合、{{ic|~/.zlogin}} (または {{ic|~/.zprofile}}) に追加してください
+
以下を[[ログインシェル]]の初期化ファイル (例: [[Bash]] の場合{{ic|~/.bash_profile}}、[[Zsh]] の場合は {{ic|~/.zprofile}}) に記述してください:
   
 
{{bc|1=<nowiki>
 
{{bc|1=<nowiki>
[[ -z $DISPLAY && $XDG_VTNR -eq 1 ]] && exec startx
+
if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
  +
exec startx
  +
fi
 
</nowiki>}}
 
</nowiki>}}
   
  +
複数の仮想コンソールでグラフィカルログインを使用したい場合は、{{ic|-eq}} 比較演算子を {{ic|-le 3}} (vt1 から vt3 まで) のようなものに置き換えることで可能です。
{{Note|
 
  +
* 複数の VT でグラフィカルログインを使いたい場合、{{ic|-eq 1}} を {{ic|-le 3}} (vt1 から vt3) などで置き換えられます。
 
  +
仮想コンソールを検出できる条件式として {{ic|<nowiki>"$(tty)" = "/dev/tty1"</nowiki>}} もありますが、これは {{ic|-le}} を使って比較することができません。また、{{ic|<nowiki>"$(fgconsole 2>/dev/null || echo -1)" -eq 1</nowiki>}} という書き方もありますが、こっちは[[シリアルコンソール]]では動きません。
* logind セッションを維持するために、X はログインしたのと同じ tty で実行させる必要があります。これはデフォルトの {{ic|/etc/X11/xinit/xserverrc}} で管理されています。
 
  +
* {{ic|xinit}} は {{ic|startx}} よりも高速ですが、{{ic|-nolisten tcp}} などの追加のパラメータを指定する必要があります。
 
* X セッションが終了してもログインしたままにしたい場合、{{ic|exec}} をてください。
+
{{ic|exec}} コマンドは、X サーバが終了、クラッシュ、または攻撃者によって kill されたときに、ユーザがログアウトすることを保証します。リスクを犯して、X セッションが終了したときにログイン状態を維持したい場合、{{ic|exec}} を取りてください。
}}
 
   
[[Fish#ログイン時に X を起動]] [[Systemd/ユーザー#ディスプレイマネージャを使わずに Xorg に自動ログイン]]も参照。
+
[[Fish#ログイン時に X を起動]] [[systemd/ユーザー#ディスプレイマネージャを使わずに Xorg に自動ログイン]] も参照してください
   
  +
{{Tip|この方法は [[getty#仮想コンソールに自動ログイン|仮想コンソールに自動ログイン]] と組み合わせることができます。}}
==== 仮想端末に自動ログイン ====
 
   
  +
=== デスクトップ環境/ウィンドウマネージャを切り替える ===
上記の方法は[[仮想端末に自動ログイン]]と組み合わせることができます。その場合、自動ログインする systemd サービスに適切な依存関係を設定して、{{ic|~/.xinitrc}} が読み込まれて pulseaudio が起動する前に dbus が起動するようにさせる必要があります (参照: [https://bbs.archlinux.org/viewtopic.php?id=155416 BBS#155416])。
 
   
  +
様々なデスクトップ環境やウィンドウマネージャを頻繁に切り替える場合、[[ディスプレイマネージャ]]を使うか、{{ic|~/.xinitrc}} を拡張して切り替えを可能にすると便利です。
=== DE/WM の選択 ===
 
   
様々な DE/WM を頻繁に切り替えて使っている場合、[[ディスプレイマネージャ]]を使うか、以下のコードを {{ic|.xinitrc}} に追加することを推奨します。引数を使って起動したいデスクトップ環境やウィンドウマネージャをロードします:
+
以下の例では、特定のデスクトップ環境やウィンドウマネージャを引数付きで起動する方法を示ています:
   
 
{{hc|~/.xinitrc|<nowiki>
 
{{hc|~/.xinitrc|<nowiki>
 
...
 
...
   
  +
# ここで Xfce をデフォルトとしています
# Here Xfce is kept as default
 
 
session=${1:-xfce}
 
session=${1:-xfce}
   
 
case $session in
 
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;;
 
i3|i3wm ) exec i3;;
icewm ) exec icewm-session;;
+
kde ) exec startplasma-x11;;
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;;
 
xfce|xfce4 ) exec startxfce4;;
  +
# 既知のセッションではないので、引数をコマンドとして実行してみる
xmonad ) exec xmonad;;
 
# No known session, try to run it as command
+
* ) exec $1;;
*) exec $1;;
 
 
esac
 
esac
 
</nowiki>}}
 
</nowiki>}}
   
  +
''session'' 引数を渡すには:
{{ic|/etc/X11/xinit/xserverrc}} ファイルをホームディレクトリにコピーしてください:
 
   
$ cp /etc/X11/xinit/xserverrc ~/.xserverrc
+
$ xinit ''session''
   
  +
あるいは
その後、引数を指定して特定の DE/WM を起動することができます:
 
   
  +
$ startx ~/.xinitrc ''session''
$ xinit
 
$ xinit gnome
 
$ xinit kde
 
$ xinit wmaker
 
 
または:
 
 
$ startx
 
$ startx ~/.xinitrc gnome
 
$ startx ~/.xinitrc kde
 
$ startx ~/.xinitrc wmaker
 
   
 
=== ウィンドウマネージャを使わずにアプリケーションを起動 ===
 
=== ウィンドウマネージャを使わずにアプリケーションを起動 ===
258行目: 176行目:
 
}}
 
}}
   
  +
あるいは、[[#xinitrc をオーバーライドする]] で説明されているように、コマンドプロンプトからバイナリを直接実行することもできます。
この方法を使うときはアプリケーションのウィンドウの配置を、アプリケーションの設定ファイルで設定しておく必要があります。
 
  +
  +
この方法を使うときはアプリケーションのウィンドウの配置を、アプリケーションの設定ファイルで設定しておく必要があります (可能な限り)。
  +
  +
{{Tip|コンポジタのオーバーヘッドを取り除くことでゲームのパフォーマンスが向上するのであれば、この方法でグラフィカルなゲームを起動すると便利かもしれません。}}
  +
  +
[[ディスプレイマネージャ#ウィンドウマネージャを使わずにアプリケーションを起動]] も見て下さい。
  +
  +
=== startx を使って出力をリダイレクトする ===
   
  +
詳細は [[Xorg#セッションログのリダイレクト]] を見てください。
{{Tip|この方法を使ってグラフィカルなゲームを起動することも可能です。特に、ウィンドウマネージャやデスクトップ環境、またはデスクトップアクセサリといったアプリケーションによるメモリと CPU の消費を抑えて、ゲームの実行パフォーマンスを底上げすることができます。}}
 
   
  +
{{TranslationStatus|xinit|2023-06-20|771773}}
[[ディスプレイマネージャ#ウィンドウマネージャを使わずにアプリケーションを起動]]も見て下さい。
 

2023年6月20日 (火) 07:22時点における最新版

関連記事

Wikipedia から:

xinit プログラムにより、ユーザが Xorg ディスプレイサーバを手動で起動することが可能になります。startx(1) スクリプトは xinit(1) のフロントエンドです。

通常、xinitウィンドウマネージャデスクトップ環境を起動するために使用されます。xinit を使うことでウィンドウマネージャ無しで GUI アプリケーションを実行することができますが、多くのグラフィカルアプリケーションは EWMH に準拠したウィンドウマネージャを期待します。ディスプレイマネージャXorg を起動し、一般的に xprofile を読み込みます。

インストール

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

設定

xinitstartx は任意でクライアントプログラムの引数を受け取ります。#xinitrc をオーバーライドする を参照してください。もし、引数を与えなければ、クライアントプロラムを起動するシェルスクリプトとして、~/.xinitrc を探します。

xinitrc

~/.xinitrc は、X に依存するプログラムを実行し、X サーバの起動時に環境変数を設定するのに便利です。このファイルがユーザのホームディレクトリに存在する場合、startxxinit はこのファイルを実行します。それ以外の場合、startx はデフォルトの /etc/X11/xinit/xinitrc を実行します。

ノート: Xinit には、このファイルを実行する以外に独自のデフォルトの動作があります。詳細については、xinit(1) を参照してください。

デフォルトの xinitrc は、Twmxorg-xclock、そして Xterm を起動した基本的な環境を開始します (このファイルは、必要なパッケージがインストールされていると仮定しています)。そのため、別のウィンドウマネージャやデスクトップ環境を始めるには、まずデフォルトの xinitrc のコピーをホームディレクトリに作成します:

$ cp /etc/X11/xinit/xinitrc ~/.xinitrc

それからそのファイルを編集して、デフォルトのプログラムを好きなコマンドに置き換えてください。exec を使用するコマンド以降の行は無視されることを覚えておいてください。たとえば、xscreensaver をバックグラウンドで開始してから openbox を開始するには、以下のように記述します:

~/.xinitrc
...
xscreensaver &
exec openbox-session
ノート: 最低限、/etc/X11/xinit/xinitrc にある最後の if ブロックが、あなたの ~/.xinitrc ファイルにあることを確認してください。これにより、 /etc/X11/xinit/xinitrc.d にあるスクリプトが読み込まれることを保証できます。

スクリーンセーバーや壁紙アプリケーションといった、長く実行されるプログラムがウィンドウマネージャの前に開始される場合、それらをフォークするか & 記号をつけてバックグラウンドで実行しなければなりません。そうしないと、スクリプトはウィンドウマネージャやデスクトップ環境を実行する前に停止し、それらのプログラムが終了するのを待ちます。いくつかのプログラムは、 xrdb のように、競合バグを回避するためフォークしないでください。exec を前につけることで、スクリプトプロセスをウィンドウマネージャプロセスへ入れ替えることができます。これにより、たとえこのプロセスがバックグランドへフォークされても X が終了しないようにできます。

xserverrc

xserverrc ファイルは、X サーバの起動を担当するシェルスクリプトです。startxxinit はどちらも ~/.xserverrc が存在すればそれを実行し、存在しなければ startx/etc/X11/xinit/xserverrc を使用します。

認証されたセッションlogind で維持できるようにし、かつ、ターミナルを切り替えることで画面ロッカーをバイパスできないようにするために、ログインが行われたのと同じ仮想コンソールで Xorg を起動しなければなりません [1]。そのため、~/.xserverrc ファイルで vt$XDG_VTNR を指定することが推奨されます:

~/.xserverrc
#!/bin/sh

exec /usr/bin/Xorg -nolisten tcp "$@" vt$XDG_VTNR

全てのコマンドラインオプションの一覧は Xserver(1) を参照してください。

ヒント: -nolisten local-nolisten tcp の後に追加すると、X11 の抽象ソケットを無効でき、X の分離に役立ちます。これが X11 のセキュリティにどのような影響を及ぼしうるのかについての簡単な説明があります。

あるいは、サーバを起動するコンソールとは別のコンソールで X を表示させたい場合は、 /usr/lib/systemd/systemd-multi-seat-x が提供する X サーバラッパーを使って表示させることも可能です。利便性のために、xinitstartx~/.xserverrc を修正することでこのラッパーを使うようにセットアップすることができます。

ノート: X セッションから Xorg ログファイルへの出力のリダイレクトを再び有効にするには、-keeptty オプションを追加してください。詳しくは Xorg#セッションログのリダイレクト を見て下さい。

使用方法

Xorg を通常のユーザとして実行するには、次のように実行します:

$ startx

または、#xserverrc が設定されている場合は:

$ xinit -- :1
ノート: xinit は、他の X サーバがすでに起動している場合は、複数のディスプレイを処理しません。その場合、-- :display_number (display_number1 以上) を付けてディスプレイを指定しなければなりません。

これでお好みのウィンドウマネージャー(またはデスクトップ環境)が正しく起動するはずです。

X を終了するには、ウィンドウマネージャーの exit 関数を実行してください (exit 関数があると仮定します)。そのような機能がない場合は次のように実行します:

$ pkill -15 Xorg
ノート: pkill は実行中の X インスタンスを全て kill します。現在の仮想コンソール上のウィンドウマネージャーを kill するには、次のように実行します:
$ pkill -15 -t tty"$XDG_VTNR" Xorg

signal(7) も参照してください。

ヒントとテクニック

xinitrc をオーバーライドする

すでに ~/.xinitrc があるが、他のウィンドウマネージャやデスクトップ環境を試してみたい場合、ウィンドウマネージャへのパスを付け加えて startx を実行することで、ウィンドウマネージャを起動させることができます。例えば:

$ startx /usr/bin/i3

ウィンドウマネージャのバイナリが引数を取る場合、引数全体が startx の第1パラメータとして認識されるようにするために引数を引用符で囲む必要があります:

$ startx "/usr/bin/application --key value"

完全なパスが 必要である ことに注意してください。また、#xserverrc スクリプトのカスタムオプションは、-- 記号のあとに付け加えることで指定できます:

$ startx /usr/bin/enlightenment -- -br +bs -dpi 96

startx(1) も参照してください。

ノート: /etc/X11/xinit/xinitrc.d/ にあるスクリプトはスキップされるので、環境変数 DISPLAY を設定する必要があるかもしれません。次のように実行することで、i3 を好きなディスプレイに表示させてみることができます: DISPLAY=:display_number startx /usr/bin/i3
ヒント: これにより通常の GUI プログラムを開始できますが、基本的なウィンドウマネージャの機能はありません。#ウィンドウマネージャを使わずにアプリケーションを起動するゲーム#別の X サーバーでゲームを起動する を参照してください。

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

startx が適切に設定されていることを確認してください。

以下をログインシェルの初期化ファイル (例: Bash の場合は ~/.bash_profileZsh の場合は ~/.zprofile) に記述してください:

if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then
  exec startx
fi

複数の仮想コンソールでグラフィカルログインを使用したい場合は、-eq 比較演算子を -le 3 (vt1 から vt3 まで) のようなものに置き換えることで可能です。

仮想コンソールを検出できる条件式として "$(tty)" = "/dev/tty1" もありますが、これは -le を使って比較することができません。また、"$(fgconsole 2>/dev/null || echo -1)" -eq 1 という書き方もありますが、こっちはシリアルコンソールでは動きません。

exec コマンドは、X サーバが終了、クラッシュ、または攻撃者によって kill されたときに、ユーザがログアウトすることを保証します。リスクを犯して、X セッションが終了したときにログイン状態を維持したい場合は、exec を取り除いてください。

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

ヒント: この方法は 仮想コンソールに自動ログイン と組み合わせることができます。

デスクトップ環境/ウィンドウマネージャを切り替える

様々なデスクトップ環境やウィンドウマネージャを頻繁に切り替える場合、ディスプレイマネージャを使うか、~/.xinitrc を拡張して切り替えを可能にすると便利です。

以下の例では、特定のデスクトップ環境やウィンドウマネージャを引数付きで起動する方法を示しています:

~/.xinitrc
...

# ここで Xfce をデフォルトとしています
session=${1:-xfce}

case $session in
    i3|i3wm           ) exec i3;;
    kde               ) exec startplasma-x11;;
    xfce|xfce4        ) exec startxfce4;;
    # 既知のセッションではないので、引数をコマンドとして実行してみる
    *                 ) exec $1;;
esac

session 引数を渡すには:

$ xinit session

あるいは

$ startx ~/.xinitrc session

ウィンドウマネージャを使わずにアプリケーションを起動

ウィンドウマネージャを使わずに特定のアプリケーションだけを起動することも可能です。フルスクリーンモードで何か一つのアプリケーションを表示したいときに有用です。例:

~/.xinitrc
...

exec chromium

あるいは、#xinitrc をオーバーライドする で説明されているように、コマンドプロンプトからバイナリを直接実行することもできます。

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

ヒント: コンポジタのオーバーヘッドを取り除くことでゲームのパフォーマンスが向上するのであれば、この方法でグラフィカルなゲームを起動すると便利かもしれません。

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

startx を使って出力をリダイレクトする

詳細は Xorg#セッションログのリダイレクト を見てください。

翻訳ステータス: このページは en:xinit の翻訳バージョンです。最後の翻訳日は 2023-06-20 です。もし英語版に 変更 があれば、翻訳の同期を手伝うことができます。