「Xinit」の版間の差分
(→xserverrc: 翻訳) |
Kusanaginoturugi (トーク | 投稿記録) (→xinitrc: 記事を英語版に差し替え) |
||
32行目: | 32行目: | ||
=== xinitrc === |
=== xinitrc === |
||
+ | {{ic|~/.xinitrc}} is handy to run programs depending on X and set environment variables on X server startup. If it is present in a user's home directory, ''startx'' and ''xinit'' execute it. Otherwise ''startx'' will run the default {{ic|/etc/X11/xinit/xinitrc}}. |
||
− | {{ic|.xinitrc}} がユーザーのホームディレクトリに配置されている場合、''startx'' や ''xinit'' で実行されます。存在しない場合、''startx'' は {{ic|/etc/X11/xinit/xinitrc}} を実行します。このファイルではデフォルトで [[Twm]] と [[Xterm]]、{{Pkg|xorg-xclock}} を起動するようになっています (''xinit'' にはファイルの実行以外のデフォルトの挙動があります、詳しくは {{ic|man 1 xinit}} を見て下さい)。したがって、他のウィンドウマネージャやデスクトップ環境を使う場合、まずデフォルトの {{ic|xinitrc}} のコピーを作成してください: |
||
+ | |||
+ | {{note|''Xinit'' has its own default behaviour instead of executing the file. See {{man|1|xinit}} for details.}} |
||
+ | |||
+ | This default xinitrc will start a basic environment with [[Twm]], {{Pkg|xorg-xclock}} and [[Xterm]] (assuming that the necessary packages are installed). Therefore, to start a different window manager or desktop environment, first create a copy of the default {{ic|xinitrc}} in your home directory: |
||
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc |
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc |
||
+ | Then [[Help:Reading#Append, add, create, edit|edit]] the file and replace the default programs with desired commands. Remember that lines following a command using {{ic|exec}} would be ignored. For example, to start {{ic|xscreensaver}} in the background and then start [[Openbox#Standalone|openbox]], use the following: |
||
− | スクラッチでファイルを作成するのではなく、コピーを作成することで、{{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|At the very least, ensure that the last {{ic|if}} block in {{ic|/etc/X11/xinit/xinitrc}} is present in your {{ic|~/.xinitrc}} file to ensure that the scripts in {{ic|/etc/X11/xinit/xinitrc.d}} are sourced.}} |
||
− | 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 |
||
− | }} |
||
− | |||
− | {{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}} パッケージに入っています。 |
||
− | }} |
||
+ | Long-running programs started before the window manager, such as a screensaver and wallpaper application, must either fork themselves or be run in the background by appending an {{ic|&}} sign. Otherwise, the script would halt and wait for each program to exit before executing the window manager or desktop environment. Note that some programs should instead not be forked, to avoid race bugs, as is the case of [[xrdb]]. Prepending {{ic|exec}} will replace the script process with the window manager process, so that X does not exit even if this process forks to the background. |
||
− | {{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 === |
2022年3月14日 (月) 11:06時点における版
~/.xinitrc
ファイルは xinit
や startx
によって読み込まれるシェルスクリプトです。主として、X サーバーが起動した時にデスクトップ環境やウィンドウマネージャなどのプログラムを起動するのに使われます (デーモンの起動や環境変数のセットなど)。xinit
と startx
プログラムは X Window System を起動させ、X を直接 /etc/init
から起動できないシステムや複数のウィンドウシステムを使っている環境で、一番最初のクライアントプログラムとして動作します。
~/.xinitrc
の主要な仕事の一つは、/usr/bin/startx
や /usr/bin/xinit
プログラムが実行されたときに X Window System のためにどのクライアントを呼び出すか指定することです。様々な追加の記述やコマンドが存在しており、それらを ~/.xinitrc
に追加して、その後のシステムのカスタマイズも行えます。
ほとんどの DM は xinit の前に同じようなファイルである xprofile も読み込みます。
目次
インストール
xorg-xinit をインストールしてください。
設定
xinit と startx はオプションでクライアントプログラムの引数を取ります。#Override xinitrc を参照してください。もし、引数を与えなければ、クライアントプロラムを起動するシェルスクリプトとして、~/.xinitrc
を探します。
xinitrc
~/.xinitrc
is handy to run programs depending on X and set environment variables on X server startup. If it is present in a user's home directory, startx and xinit execute it. Otherwise startx will run the default /etc/X11/xinit/xinitrc
.
This default xinitrc will start a basic environment with Twm, xorg-xclock and Xterm (assuming that the necessary packages are installed). Therefore, to start a different window manager or desktop environment, first create a copy of the default xinitrc
in your home directory:
$ cp /etc/X11/xinit/xinitrc ~/.xinitrc
Then edit the file and replace the default programs with desired commands. Remember that lines following a command using exec
would be ignored. For example, to start xscreensaver
in the background and then start openbox, use the following:
~/.xinitrc
... xscreensaver & exec openbox-session
Long-running programs started before the window manager, such as a screensaver and wallpaper application, must either fork themselves or be run in the background by appending an &
sign. Otherwise, the script would halt and wait for each program to exit before executing the window manager or desktop environment. Note that some programs should instead not be forked, to avoid race bugs, as is the case of xrdb. Prepending exec
will replace the script process with the window manager process, so that X does not exit even if this process forks to the background.
xserverrc
xserverrc
ファイルは、X サーバーの起動を担当するシェルスクリプトです。startx と xinit はどちらも ~/.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) を参照してください。
また、サーバを起動するコンソールとは別のコンソールで X を表示させたい場合は、 /usr/lib/systemd/systemd-multi-seat-x
が提供する X サーバラッパーを使って表示させることも可能です。便利なように、 xinit と startx は ~/.xserverrc
を修正することでこのラッパーを使うようにセットアップすることができます。
使用方法
Xorg を通常のユーザーとして実行するには、次のように実行します。
$ startx
または、#xserverrc が設定されている場合は:
$ xinit -- :1
これでお好みのウィンドウマネージャー(またはデスクトップ環境)が正しく起動するはずです。
X を終了するには、ウィンドウマネージャーの exit 関数を実行してください(exit 関数があれば)。そのような機能がない場合は次のように実行します。
$ pkill -15 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
を参照してください。
ログイン時に 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
を削除してください。
ログイン時に 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
この方法を使うときはアプリケーションのウィンドウの配置を、アプリケーションの設定ファイルで設定しておく必要があります。
ディスプレイマネージャ#ウィンドウマネージャを使わずにアプリケーションを起動も見て下さい。
startx 使用時の出力のリダイレクト
詳細は、Xorg#Session log redirection を参照してください。