「Xinit」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(冒頭を同期)
(→‎設定: 同期)
25行目: 25行目:
 
== 設定 ==
 
== 設定 ==
   
''xinit'' と ''startx'' はオプションでクライアントプログラムの引数を取ります。[[#Override xinitrc]] を参照してください。もし、引数を与えなければ、クライアントプロラムを起動するシェルスクリプトとして、{{ic|~/.xinitrc}} を探します。
+
''xinit'' と ''startx'' は任意でクライアントプログラムの引数を受け取ります。[[#xinitrc をオーバーライドする]] を参照してください。もし、引数を与えなければ、クライアントプロラムを起動するシェルスクリプトとして、{{ic|~/.xinitrc}} を探します。
   
 
=== xinitrc ===
 
=== xinitrc ===
   
{{ic|~/.xinitrc}} は X に応じてプログラムを実行し、X サーバの起動時に環境変数を設定するのに便利です。ユーザのホームディレクトリに存在する場合、''startx'' と ''xinit'' 実行します。それ以外の場合、''startx'' はデフォルトの {{ic|/etc/X11/xinit/xinitrc}} を実行します。
+
{{ic|~/.xinitrc}} はX に依存するプログラムを実行し、X サーバの起動時に環境変数を設定するのに便利です。このファイルがユーザのホームディレクトリに存在する場合、''startx'' と ''xinit'' はこのファイルを実行します。それ以外の場合、''startx'' はデフォルトの {{ic|/etc/X11/xinit/xinitrc}} を実行します。
   
{{note|''Xinit'' には、ファイルを実行する代わりに独自のデフォルトの動作があります。詳細については、{{man|1|xinit}} を参照してください。}}
+
{{note|''Xinit'' には、このファイルを実行する以外に独自のデフォルトの動作があります。詳細については、{{man|1|xinit}} を参照してください。}}
   
デフォルトの xinitrc は [[Twm]] と, {{Pkg|xorg-xclock}}, [[Xterm]] とで基本的な環境をスタートします必要なパッケージインストールされているとして。そのため、別のウィンドウマネージャやデスクトップ環境を始めるには、まずデフォルトの {{ic|xinitrc}} のコピーをホームディレクトリに作成します
+
デフォルトの 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#Standalone|openbox]] を開始するには、以下のように記述します:
+
それからそのファイルを[[テキスト編集|編集]]して、デフォルトのプログラムを好きなコマンドに置き換えてください。{{ic|exec}} を使用するコマンド以降の行は無視されることを覚えておいてください。たとえば、{{ic|xscreensaver}} をバックグラウンドで開始してから [[Openbox#スタンドアロン|openbox]] を開始するには、以下のように記述します:
   
 
{{hc|~/.xinitrc|
 
{{hc|~/.xinitrc|
44行目: 44行目:
 
exec openbox-session}}
 
exec openbox-session}}
   
{{Note|最低限、{{ic|/etc/X11/xinit/xinitrc}} にある最後の {{ic|if}} ブロックが、あなたの {{ic|~/.xinitrc}} ファイルにあることを確認してください。これにより、 {{ic|/etc/X11/xinit/xinitrc.d}} にあるスクリプトが読み込まれることを確認できます。}}
+
{{Note|最低限、{{ic|/etc/X11/xinit/xinitrc}} にある最後の {{ic|if}} ブロックが、あなたの {{ic|~/.xinitrc}} ファイルにあることを確認してください。これにより、 {{ic|/etc/X11/xinit/xinitrc.d}} にあるスクリプトが読み込まれることを保証できます。}}
   
スクリーンセーバーや壁紙アプリケーションといった、長く実行されるプログラムがウィンドウマネージャの前に開始される場合、それらをフォークするか {{ic|&}} 記号をつけてバックグラウンドで実行しなければなりません。そうしないと、スクリプトはウィンドウマネージャやデスクトップ環境を実行する前に停止し、それらのプログラムが終了するのを待ちます。いくつかのプログラムは、 [[xrdb]] のように、レースバグを回避するためフォークしないでください。{{ic|exec}} を前につけることで、スクリプトプロセスをウィンドウマネージャプロセスへ入れ替えることができます。これにより、たとえこのプロセスがバックグランドへフォークされても X が終了しないようにできます。
+
スクリーンセーバーや壁紙アプリケーションといった、長く実行されるプログラムがウィンドウマネージャの前に開始される場合、それらをフォークするか {{ic|&}} 記号をつけてバックグラウンドで実行しなければなりません。そうしないと、スクリプトはウィンドウマネージャやデスクトップ環境を実行する前に停止し、それらのプログラムが終了するのを待ちます。いくつかのプログラムは、 [[xrdb]] のように、競合バグを回避するためフォークしないでください。{{ic|exec}} を前につけることで、スクリプトプロセスをウィンドウマネージャプロセスへ入れ替えることができます。これにより、たとえこのプロセスがバックグランドへフォークされても X が終了しないようにできます。
   
 
=== xserverrc ===
 
=== xserverrc ===
   
{{ic|xserverrc}} ファイルは、X サーバの起動を担当するシェルスクリプトです。''startx'' と ''xinit'' はどちらも {{ic|~/.xserverrc}} が存在すればそれを実行し、 ''startx'' はそうでなければ {{ic|/etc/X11/xinit/xserverrc}} を使用します。
+
{{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}} を指定することが推奨されます
+
[[一般的なトラブルシューティング#セッションのパーミッション|認証されたセッション]]を {{ic|logind}} で維持できるようにし、かつ、ターミナルを切り替えることで画面ロッカーをバイパスできないようにするために、ログインが行われたのと同じ仮想コンソールで [[Xorg]] を起動しなければなりません [http://blog.falconindy.com/articles/back-to-basics-with-x-and-systemd.html]。そのため、{{ic|~/.xserverrc}} ファイルで {{ic|vt$XDG_VTNR}} を指定することが推奨されます:
   
 
{{hc|~/.xserverrc|
 
{{hc|~/.xserverrc|
62行目: 62行目:
 
全てのコマンドラインオプションの一覧は {{man|1|Xserver}} を参照してください。
 
全てのコマンドラインオプションの一覧は {{man|1|Xserver}} を参照してください。
   
{{Tip|{{ic|-nolisten local}} を {{ic|-nolisten tcp}} の後に追加すると、X11 の抽象ソケットを無効にして分離を助けることができます。 これが X11 のセキュリティにどのよう影響るかについては、[https://tstarling.com/blog/2016/06/x11-security-isolation/ quick background] があります。}}
+
{{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}} を修正することでこのラッパーを使うようにセットアップすることができます。
+
あるいは、サーバを起動するコンソールとは別のコンソールで X を表示させたい場合は、 {{ic|/usr/lib/systemd/systemd-multi-seat-x}} が提供する X サーバラッパーを使って表示させることも可能です。利便性のために、''xinit'' と ''startx'' は {{ic|~/.xserverrc}} を修正することでこのラッパーを使うようにセットアップすることができます。
   
 
{{Note|X セッションから Xorg ログファイルへの出力のリダイレクトを再び有効にするには、{{ic|-keeptty}} オプションを追加してください。詳しくは [[Xorg#セッションログのリダイレクト]] を見て下さい。}}
 
{{Note|X セッションから Xorg ログファイルへの出力のリダイレクトを再び有効にするには、{{ic|-keeptty}} オプションを追加してください。詳しくは [[Xorg#セッションログのリダイレクト]] を見て下さい。}}

2023年6月20日 (火) 06:37時点における版

関連記事

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 は既に記述しているが、他の 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 サーバーでゲームを起動する を参照。

ログイン時に 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シリアルコンソール では機能しないことが挙げられます。

X セッションが終了してもログインしたままにしたい場合は、exec を削除してください。

警告: exec がなければ、X を Kill することができます、これであなたのホームディレクトリのシェルとファイルへのアクセスを取得することができます。このことがあなたにとって重要かどうか、上記のことを実行する前に判断してください

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

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

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

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

startx 使用時の出力のリダイレクト

詳細は、Xorg#Session log redirection を参照してください。