「Xinit」の版間の差分
(→xserverrc: 同期) |
|||
| (6人の利用者による、間の43版が非表示) | |||
| 1行目: | 1行目: | ||
{{Lowercase title}} |
{{Lowercase title}} |
||
| − | [[Category: |
+ | [[Category:Xorg コマンド]] |
| − | [[Category:X サーバー]] |
||
[[de:Xinitrc]] |
[[de:Xinitrc]] |
||
| − | [[ |
+ | [[en:Xinit]] |
| − | [[ |
+ | [[es:Xinit]] |
| − | [[ |
+ | [[fr:Xinit]] |
| − | [[ |
+ | [[pt:Xinit]] |
| − | [[ |
+ | [[ru:Xinit]] |
| − | [[zh- |
+ | [[zh-hans:Xinit]] |
{{Related articles start}} |
{{Related articles start}} |
||
{{Related|ディスプレイマネージャ}} |
{{Related|ディスプレイマネージャ}} |
||
| − | {{Related|ログイン時に X を起動}} |
||
{{Related|Xorg}} |
{{Related|Xorg}} |
||
{{Related|xprofile}} |
{{Related|xprofile}} |
||
| + | {{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}} に追加して、その後のシステムのカスタマイズも行えます。 |
||
| + | {{Pkg|xorg-xinit}} を[[インストール]]してください。 |
||
| − | ==初めに== |
||
| + | == 設定 == |
||
| − | 新しくユーザーを作ったときのデフォルトと同じファイル・ディレクトリが {{ic|/etc/skel/}} に入っています (''skel'' という名前は ''skeleton'' (スケルトン) からきています。これらのファイルはユーザーの home ディレクトリのための基本骨格となるからです)。{{Pkg|xorg-xinit}} パッケージは骨組みの {{ic|.xinitrc}} ファイルで {{ic|/etc/skel}} を初期設定します。 |
||
| + | ''xinit'' と ''startx'' は任意でクライアントプログラムの引数を受け取ります。[[#xinitrc をオーバーライドする]] を参照してください。もし、引数を与えなければ、クライアントプロラムを起動するシェルスクリプトとして、{{ic|~/.xinitrc}} を探します。 |
||
| − | {{Note|{{ic|~/.xinitrc}} はいわゆる'ドット' (.) ファイルと呼ばれるものです。*nix ファイルシステムでは名前の最初にドット (.) が付けられたファイルは'隠匿されて'普通の {{ic|ls}} コマンドでは表示されません。{{ic|ls -A}} を実行することでドットファイルを見ることができます。'rc' は ''Run Commands'' を示していて、単純に設定ファイルだということを表しています。プログラムの動作 (run) の方法をコントロールしているので、"Run Control" の意味だと言われることもあります(歴史的には間違っています)。}} |
||
| + | === xinitrc === |
||
| − | サンプルファイル {{ic|/etc/skel/.xinitrc}} をあなたの home ディレクトリにコピーします: |
||
| − | $ cp /etc/skel/.xinitrc ~ |
||
| + | {{ic|~/.xinitrc}} は、X に依存するプログラムを実行し、X サーバの起動時に環境変数を設定するのに便利です。このファイルがユーザのホームディレクトリに存在する場合、''startx'' と ''xinit'' はこのファイルを実行します。それ以外の場合、''startx'' はデフォルトの {{ic|/etc/X11/xinit/xinitrc}} を実行します。 |
||
| − | そして {{ic|~/.xinitrc}} を編集し、あなたが使っている DE/WM に合わせて行をアンコメントします。例えば、基本的な X の設定(マウス、キーボード、解像度)をテストするために [[xterm]] を使いたい場合: |
||
| + | {{note|''Xinit'' には、このファイルを実行する以外に独自のデフォルトの動作があります。詳細については、{{man|1|xinit}} を参照してください。}} |
||
| − | {{bc| |
||
| − | #!/bin/sh |
||
| − | # |
||
| − | # ~/.xinitrc |
||
| − | # |
||
| − | # Executed by startx (run your window manager from here) |
||
| + | デフォルトの xinitrc は、[[Twm]]、{{Pkg|xorg-xclock}}、そして [[Xterm]] を起動した基本的な環境を開始します (このファイルは、必要なパッケージがインストールされていると仮定しています)。そのため、別のウィンドウマネージャやデスクトップ環境を始めるには、まずデフォルトの {{ic|xinitrc}} のコピーをホームディレクトリに作成します: |
||
| − | if [ -d /etc/X11/xinit/xinitrc.d ]; then |
||
| + | |||
| − | for f in /etc/X11/xinit/xinitrc.d/*; do |
||
| + | $ cp /etc/X11/xinit/xinitrc ~/.xinitrc |
||
| − | [ -x "$f" ] && . "$f" |
||
| + | |||
| − | done |
||
| + | それからそのファイルを[[テキスト編集|編集]]して、デフォルトのプログラムを好きなコマンドに置き換えてください。{{ic|exec}} を使用するコマンド以降の行は無視されることを覚えておいてください。たとえば、{{ic|xscreensaver}} をバックグラウンドで開始してから [[Openbox#スタンドアロン|openbox]] を開始するには、以下のように記述します: |
||
| − | unset f |
||
| + | |||
| − | fi |
||
| + | {{hc|~/.xinitrc| |
||
| + | ... |
||
| + | xscreensaver & |
||
| + | exec openbox-session}} |
||
| + | |||
| + | {{Note|最低限、{{ic|/etc/X11/xinit/xinitrc}} にある最後の {{ic|if}} ブロックが、あなたの {{ic|~/.xinitrc}} ファイルにあることを確認してください。これにより、 {{ic|/etc/X11/xinit/xinitrc.d}} にあるスクリプトが読み込まれることを保証できます。}} |
||
| + | |||
| + | スクリーンセーバーや壁紙アプリケーションといった、長く実行されるプログラムがウィンドウマネージャの前に開始される場合、それらをフォークするか {{ic|&}} 記号をつけてバックグラウンドで実行しなければなりません。そうしないと、スクリプトはウィンドウマネージャやデスクトップ環境を実行する前に停止し、それらのプログラムが終了するのを待ちます。いくつかのプログラムは、 [[xrdb]] のように、競合バグを回避するためフォークしないでください。{{ic|exec}} を前につけることで、スクリプトプロセスをウィンドウマネージャプロセスへ入れ替えることができます。これにより、たとえこのプロセスがバックグランドへフォークされても X が終了しないようにできます。 |
||
| + | |||
| + | === xserverrc === |
||
| + | |||
| + | {{ic|xserverrc}} ファイルは、X サーバの起動を担当するシェルスクリプトです。''startx'' と ''xinit'' はどちらも {{ic|~/.xserverrc}} が存在すればそれを実行し、存在しなければ ''startx'' は {{ic|/etc/X11/xinit/xserverrc}} を使用します。 |
||
| + | |||
| + | すべてのコマンドラインオプションのリストについては、{{man|1|Xserver}} を参照してください。 |
||
| + | |||
| + | ==== 仮想ターミナル番号の引き渡し ==== |
||
| + | |||
| + | [[一般的なトラブルシューティング#セッションのパーミッション|認証されたセッション]]を {{ic|logind}} で維持できるようにし、かつ、ターミナルを切り替えることで画面ロッカーをバイパスできないようにするために、ログインが行われたのと同じ仮想コンソールで [[Xorg]] を起動しなければなりません [http://blog.falconindy.com/articles/back-to-basics-with-x-and-systemd.html]。そのため、{{ic|~/.xserverrc}} ファイルで {{ic|vt$XDG_VTNR}} を指定することが推奨されます: |
||
| + | |||
| + | ''startx'' を実行している場合、それ以上の操作は必要ありません。これは、仮想ターミナル番号を計算して ''Xorg'' に渡す [https://gitlab.freedesktop.org/xorg/app/xinit/-/commit/44915d6953076849b69a017f6fc8234b0f254362 ロジックをこちら] に含んでいます。 |
||
| + | |||
| + | 他の場合、たとえば ''xinit'' を実行している場合は、{{ic|~/.xserverrc}} ファイルで {{ic|vt$XDG_VTNR}} を指定することをお勧めします。 |
||
| + | |||
| + | {{hc|~/.xserverrc| |
||
| + | #!/bin/sh |
||
| + | exec /usr/bin/Xorg -nolisten tcp "$@" vt$XDG_VTNR |
||
| − | # 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 |
||
}} |
}} |
||
| + | 全てのコマンドラインオプションの一覧は {{man|1|Xserver}} を参照してください。 |
||
| − | {{Note|アンコメントされた {{ic|exec}} 行が複数ある場合、アンコメントされた行の中で最初の行だけが実行されます。}} |
||
| + | |||
| + | {{Tip|{{ic|-nolisten local}} を {{ic|-nolisten tcp}} の後に追加すると、X11 の抽象ソケットを無効でき、X の分離に役立ちます。これが X11 のセキュリティにどのような影響を及ぼしうるのかについての[https://tstarling.com/blog/2016/06/x11-security-isolation/ 簡単な説明]があります。}} |
||
| + | |||
| + | {{Note|X セッションから Xorg ログファイルへの出力のリダイレクトを再び有効にするには、{{ic|-keeptty}} オプションを追加してください。詳しくは [[Xorg#セッションログのリダイレクト]] を見て下さい。}} |
||
| + | |||
| + | == 使用方法 == |
||
| + | |||
| + | Xorg を通常のユーザとして実行するには、次のように実行します: |
||
| − | {{ic|~/.xinitrc}} を正しく設定したら、X を起動してください。X を起動するには: |
||
$ startx |
$ startx |
||
| + | または、[[#xserverrc]] が設定されている場合は: |
||
| − | あなたが選んだ DE/WM が起動するはずです。自由にキーボードやマウスやレイアウトをテストしてください。 |
||
| + | $ xinit -- :1 |
||
| − | ===セッションの維持=== |
||
| + | {{Note|''xinit'' は、他の X サーバがすでに起動している場合は、複数のディスプレイを処理しません。その場合、{{ic|-- :''display_number''}} ({{ic|''display_number''}} は {{ic|1}} 以上) を付けてディスプレイを指定しなければなりません。}} |
||
| − | logind セッションを維持するために、X はいつでもログインしたのと同じ tty で実行される必要があります。これはデフォルトの {{ic|/etc/X11/xinit/xserverrc}} によって管理されています。関連する問題については[[一般的なトラブルシューティング#セッションのパーミッション]]も見て下さい。 |
||
| + | これでお好みのウィンドウマネージャー(またはデスクトップ環境)が正しく起動するはずです。 |
||
| − | {{Note|過去、古いセッションを壊す代わりに'''新しい'''セッションをスタートするために {{ic|ck-launch-session}} が使われていました。{{ic|logind}} にはこのようなことをするものがないので、任意の tty で X を実行するためにディスプレイマネージャが必要です。}} |
||
| + | X を終了するには、ウィンドウマネージャーの exit 関数を実行してください (exit 関数があると仮定します)。そのような機能がない場合は次のように実行します: |
||
| − | == ファイル例== |
||
| − | 以下はスタートアッププログラムをいくつか含んだ {{ic|~/.xinitrc}} の例です: |
||
| − | {{hc |
||
| − | |~/.xinitrc |
||
| − | |<nowiki> |
||
| − | #!/bin/sh |
||
| + | $ pkill -15 Xorg |
||
| − | if [ -d /etc/X11/xinit/xinitrc.d ]; then |
||
| − | for f in /etc/X11/xinit/xinitrc.d/*; do |
||
| − | [ -x "$f" ] && . "$f" |
||
| − | done |
||
| − | unset f |
||
| − | fi |
||
| + | {{Note|''pkill'' は実行中の X インスタンスを全て kill します。現在の仮想コンソール上のウィンドウマネージャーを kill するには、次のように実行します: |
||
| − | xrdb -merge ~/.Xresources # update x resources db |
||
| + | $ pkill -15 -t tty"$XDG_VTNR" Xorg |
||
| − | xscreensaver -no-splash & # starts screensaver daemon |
||
| + | }} |
||
| − | xsetroot -cursor_name left_ptr & # sets the cursor icon |
||
| − | sh ~/.fehbg & # sets the background image |
||
| + | {{man|7|signal}} も参照してください。 |
||
| − | exec openbox-session # starts the window manager |
||
| − | </nowiki>}} |
||
| + | == ヒントとテクニック == |
||
| − | {{ic|exec}} の前に書かれていることは現在のプロセスを置き換えるものとして推奨されます、スクリプトの実行が停止したりプロセスがバックグラウンドにフォークされても X が終了しなくなります。 |
||
| + | === xinitrc をオーバーライドする === |
||
| − | == ファイル設定 == |
||
| − | + | すでに {{ic|~/.xinitrc}} があるが、他のウィンドウマネージャやデスクトップ環境を試してみたい場合、ウィンドウマネージャへのパスを付け加えて ''startx'' を実行することで、ウィンドウマネージャを起動させることができます。例えば: |
|
| + | $ startx /usr/bin/i3 |
||
| − | 上の例では {{ic|cairo-compmgr}}, {{ic|xscreensaver}}, {{ic|xsetroot}}, {{ic|sh}} などのプログラムがバックグラウンドで実行されている ({{ic|&}} が後ろに付けられている) ことに注意してください。そうしないと、{{ic|openbox-session}} を実行する前に、スクリプトがそれぞれのプログラムやデーモンを待つことになります。また、{{ic|openbox-session}} はバックグラウンドにしていないことも注意してください。これで openbox が動いている間はスクリプトが終了しないようになっています。 |
||
| + | ウィンドウマネージャのバイナリが引数を取る場合、引数全体が ''startx'' の第1パラメータとして認識されるようにするために引数を引用符で囲む必要があります: |
||
| − | 以下のセクションでは複数の WM や DE を使う場合の {{ic|~/.xinitrc}} の設定方法を説明しています。 |
||
| + | $ startx "/usr/bin/''application'' --''key value''" |
||
| − | === コマンドライン === |
||
| + | 完全なパスが '''必要である''' ことに注意してください。また、[[#xserverrc]] スクリプトのカスタムオプションは、{{ic|--}} 記号のあとに付け加えることで指定できます: |
||
| − | 既に {{ic|~/.xinitrc}} が動作しているが、他の WM/DE を試してみたい場合、ウィンドウマネージャへのパスを指定した {{ic|xinit}} を実行することで WM/DE を起動できます: |
||
| + | $ startx /usr/bin/enlightenment -- -br +bs -dpi 96 |
||
| − | xinit /full/path/to/window-manager |
||
| + | {{man|1|startx}} も参照してください。 |
||
| − | フルパスが'''必要'''です。任意で、X サーバーに {{ic|--}} の後でオプションを渡すこともできます - 例: |
||
| + | {{Note|1={{ic|/etc/X11/xinit/xinitrc.d/}} にあるスクリプトはスキップされるので、環境変数 {{ic|DISPLAY}} を設定する必要があるかもしれません。次のように実行することで、''i3'' を好きなディスプレイに表示させてみることができます: {{ic|1=DISPLAY=:''display_number'' startx /usr/bin/i3}}。}} |
||
| − | xinit /usr/bin/enlightenment -- -br +bs -dpi 96 |
||
| + | {{Tip|これにより通常の GUI プログラムを開始できますが、基本的なウィンドウマネージャの機能はありません。[[#ウィンドウマネージャを使わずにアプリケーションを起動する]] と [[ゲーム#別の X サーバーでゲームを起動する]] を参照してください。}} |
||
| − | 以下の {{ic|~/.xinitrc}} の例では引数によって特定のウィンドウマネージャを起動する方法を示しています: |
||
| + | === ログイン時に X を自動起動 === |
||
| − | {{hc |
||
| − | |~/.xinitrc |
||
| − | |<nowiki> |
||
| − | #!/bin/sh |
||
| − | # |
||
| − | # ~/.xinitrc |
||
| − | # |
||
| − | # Executed by startx (run your window manager from here) |
||
| + | ''startx'' が適切に[[#設定|設定されている]]ことを確認してください。 |
||
| − | if [ -d /etc/X11/xinit/xinitrc.d ]; then |
||
| − | for f in /etc/X11/xinit/xinitrc.d/*; do |
||
| − | [ -x "$f" ] && . "$f" |
||
| − | done |
||
| − | unset f |
||
| − | fi |
||
| + | 以下を[[ログインシェル]]の初期化ファイル (例: [[Bash]] の場合は {{ic|~/.bash_profile}}、[[Zsh]] の場合は {{ic|~/.zprofile}}) に記述してください: |
||
| − | if [[ $1 == "fluxbox" ]] |
||
| + | |||
| − | then |
||
| + | {{bc|1=<nowiki> |
||
| − | exec startfluxbox |
||
| + | if [ -z "${DISPLAY}" ] && [ "${XDG_VTNR}" -eq 1 ]; then |
||
| − | elif [[ $1 == "spectrwm" ]] |
||
| + | exec startx |
||
| − | then |
||
| − | exec spectrwm |
||
| − | else |
||
| − | echo "Choose a window manager" |
||
fi |
fi |
||
</nowiki>}} |
</nowiki>}} |
||
| + | 複数の仮想コンソールでグラフィカルログインを使用したい場合は、{{ic|-eq}} 比較演算子を {{ic|-le 3}} (vt1 から vt3 まで) のようなものに置き換えることで可能です。 |
||
| − | このサンプルを使えば {{ic|xinit fluxbox}} や {{ic|xinit spectrwm}} というコマンドで fluxbox や spectrwm が起動できます。 |
||
| + | |||
| + | 仮想コンソールを検出できる条件式として {{ic|<nowiki>"$(tty)" = "/dev/tty1"</nowiki>}} もありますが、これは {{ic|-le}} を使って比較することができません。また、{{ic|<nowiki>"$(fgconsole 2>/dev/null || echo -1)" -eq 1</nowiki>}} という書き方もありますが、こっちは[[シリアルコンソール]]では動きません。 |
||
| + | |||
| + | {{ic|exec}} コマンドは、X サーバが終了、クラッシュ、または攻撃者によって kill されたときに、ユーザがログアウトすることを保証します。リスクを犯して、X セッションが終了したときにログイン状態を維持したい場合は、{{ic|exec}} を取り除いてください。 |
||
| + | |||
| + | [[Fish#ログイン時に X を起動]] と [[systemd/ユーザー#ディスプレイマネージャを使わずに Xorg に自動ログイン]] も参照してください。 |
||
| + | |||
| + | {{Tip|この方法は [[getty#仮想コンソールに自動ログイン|仮想コンソールに自動ログイン]] と組み合わせることができます。}} |
||
| + | |||
| + | === デスクトップ環境/ウィンドウマネージャを切り替える === |
||
| + | |||
| + | 様々なデスクトップ環境やウィンドウマネージャを頻繁に切り替える場合、[[ディスプレイマネージャ]]を使うか、{{ic|~/.xinitrc}} を拡張して切り替えを可能にすると便利です。 |
||
| + | |||
| + | 以下の例では、特定のデスクトップ環境やウィンドウマネージャを引数付きで起動する方法を示しています: |
||
| + | |||
| + | {{hc|~/.xinitrc|<nowiki> |
||
| + | ... |
||
| + | |||
| + | # ここで Xfce をデフォルトとしています |
||
| + | session=${1:-xfce} |
||
| + | |||
| + | case $session in |
||
| + | i3|i3wm ) exec i3;; |
||
| + | kde ) exec startplasma-x11;; |
||
| + | xfce|xfce4 ) exec startxfce4;; |
||
| + | # 既知のセッションではないので、引数をコマンドとして実行してみる |
||
| + | * ) exec $1;; |
||
| + | esac |
||
| + | </nowiki>}} |
||
| + | |||
| + | ''session'' 引数を渡すには: |
||
| + | |||
| + | $ xinit ''session'' |
||
| + | |||
| + | あるいは |
||
| + | |||
| + | $ startx ~/.xinitrc ''session'' |
||
| + | |||
| + | === ウィンドウマネージャを使わずにアプリケーションを起動 === |
||
| + | |||
| + | ウィンドウマネージャを使わずに特定のアプリケーションだけを起動することも可能です。フルスクリーンモードで何か一つのアプリケーションを表示したいときに有用です。例: |
||
| + | |||
| + | {{hc|~/.xinitrc| |
||
| + | ... |
||
| + | |||
| + | exec chromium |
||
| + | }} |
||
| + | |||
| + | あるいは、[[#xinitrc をオーバーライドする]] で説明されているように、コマンドプロンプトからバイナリを直接実行することもできます。 |
||
| + | |||
| + | この方法を使うときはアプリケーションのウィンドウの配置を、アプリケーションの設定ファイルで設定しておく必要があります (可能な限り)。 |
||
| + | |||
| + | {{Tip|コンポジタのオーバーヘッドを取り除くことでゲームのパフォーマンスが向上するのであれば、この方法でグラフィカルなゲームを起動すると便利かもしれません。}} |
||
| + | |||
| + | [[ディスプレイマネージャ#ウィンドウマネージャを使わずにアプリケーションを起動]] も見て下さい。 |
||
| + | |||
| + | === startx を使って出力をリダイレクトする === |
||
| + | 詳細は [[Xorg#セッションログのリダイレクト]] を見てください。 |
||
| − | === スタートアップ === |
||
| + | {{TranslationStatus|xinit|2023-06-20|771773}} |
||
| − | [[ログイン時に X を起動]]を見て下さい。 |
||
2025年1月19日 (日) 05:29時点における最新版
Wikipedia から:
通常、xinit はウィンドウマネージャやデスクトップ環境を起動するために使用されます。xinit を使うことでウィンドウマネージャ無しで GUI アプリケーションを実行することができますが、多くのグラフィカルアプリケーションは EWMH に準拠したウィンドウマネージャを期待します。ディスプレイマネージャは Xorg を起動し、一般的に xprofile を読み込みます。
目次
インストール
xorg-xinit をインストールしてください。
設定
xinit と startx は任意でクライアントプログラムの引数を受け取ります。#xinitrc をオーバーライドする を参照してください。もし、引数を与えなければ、クライアントプロラムを起動するシェルスクリプトとして、~/.xinitrc を探します。
xinitrc
~/.xinitrc は、X に依存するプログラムを実行し、X サーバの起動時に環境変数を設定するのに便利です。このファイルがユーザのホームディレクトリに存在する場合、startx と xinit はこのファイルを実行します。それ以外の場合、startx はデフォルトの /etc/X11/xinit/xinitrc を実行します。
デフォルトの xinitrc は、Twm、xorg-xclock、そして Xterm を起動した基本的な環境を開始します (このファイルは、必要なパッケージがインストールされていると仮定しています)。そのため、別のウィンドウマネージャやデスクトップ環境を始めるには、まずデフォルトの xinitrc のコピーをホームディレクトリに作成します:
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
それからそのファイルを編集して、デフォルトのプログラムを好きなコマンドに置き換えてください。exec を使用するコマンド以降の行は無視されることを覚えておいてください。たとえば、xscreensaver をバックグラウンドで開始してから openbox を開始するには、以下のように記述します:
~/.xinitrc
... xscreensaver & exec openbox-session
スクリーンセーバーや壁紙アプリケーションといった、長く実行されるプログラムがウィンドウマネージャの前に開始される場合、それらをフォークするか & 記号をつけてバックグラウンドで実行しなければなりません。そうしないと、スクリプトはウィンドウマネージャやデスクトップ環境を実行する前に停止し、それらのプログラムが終了するのを待ちます。いくつかのプログラムは、 xrdb のように、競合バグを回避するためフォークしないでください。exec を前につけることで、スクリプトプロセスをウィンドウマネージャプロセスへ入れ替えることができます。これにより、たとえこのプロセスがバックグランドへフォークされても X が終了しないようにできます。
xserverrc
xserverrc ファイルは、X サーバの起動を担当するシェルスクリプトです。startx と xinit はどちらも ~/.xserverrc が存在すればそれを実行し、存在しなければ startx は /etc/X11/xinit/xserverrc を使用します。
すべてのコマンドラインオプションのリストについては、Xserver(1) を参照してください。
仮想ターミナル番号の引き渡し
認証されたセッションを logind で維持できるようにし、かつ、ターミナルを切り替えることで画面ロッカーをバイパスできないようにするために、ログインが行われたのと同じ仮想コンソールで Xorg を起動しなければなりません [1]。そのため、~/.xserverrc ファイルで vt$XDG_VTNR を指定することが推奨されます:
startx を実行している場合、それ以上の操作は必要ありません。これは、仮想ターミナル番号を計算して Xorg に渡す ロジックをこちら に含んでいます。
他の場合、たとえば xinit を実行している場合は、~/.xserverrc ファイルで vt$XDG_VTNR を指定することをお勧めします。
~/.xserverrc
#!/bin/sh exec /usr/bin/Xorg -nolisten tcp "$@" vt$XDG_VTNR
全てのコマンドラインオプションの一覧は Xserver(1) を参照してください。
使用方法
Xorg を通常のユーザとして実行するには、次のように実行します:
$ startx
または、#xserverrc が設定されている場合は:
$ xinit -- :1
これでお好みのウィンドウマネージャー(またはデスクトップ環境)が正しく起動するはずです。
X を終了するには、ウィンドウマネージャーの exit 関数を実行してください (exit 関数があると仮定します)。そのような機能がない場合は次のように実行します:
$ pkill -15 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) も参照してください。
ログイン時に X を自動起動
startx が適切に設定されていることを確認してください。
以下をログインシェルの初期化ファイル (例: Bash の場合は ~/.bash_profile、Zsh の場合は ~/.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#セッションログのリダイレクト を見てください。