xinitrcの謎 - 存在できるものと存在できないもの

xinitrcの謎 - 存在できるものと存在できないもの


誰かが私のプロフィールの手がかりを与えることができますか.xinitrc?いくつかの実用的な質問に答える良いマニュアルを見つけるのに苦労しています。

  • これはユニバーサルBashスクリプトであると主張しますが、そうではありません。
  • 一部のコマンドが必要でexecあり、一部が必要ないのはなぜですか?
  • このコマンドは正確に何ですかexec
  • バイナリ構造または構文構造に固有のものですかxinitrc
  • execで実行できるものと実行できないものは何ですか?
  • 環境変数を正しく設定するには?

ほとんどの主流ディストリビューションのユーザーは理解する必要さえなく、xinitrcKodiの「一時的な」シェルを設定するまで超小型ウィンドウマネージャTWMを使用し、Kodiをフルスクリーンで実行する必要がありました。kodi-standaloneシェルは私には適していないからです。

しかし、再びxinitrc

実際のケース:

#!/bin/bash
/usr/bin/twm &
sleep 1
exec xterm

なぜtwm必要なくsleep必要なのですか? execxterm

動作しない例:

#!/bin/bash
/usr/bin/twm &
sleep 1
exec WINDOWING=x11 /usr/bin/kodi -geometry +0+0

これはexec実行のみで、WINDOWING=x11残りの行は無視されます。別のBashスクリプトWINDOWING=x11 /usr/bin/kodi -geometry +0+0(今回は通常のスクリプト)でラップし、そのスクリプトをexec;それからついに働いた。

答え1

このexecコマンドは、現在のシェルプロセスを指定されたコマンドを実行して生成されたプロセスに置き換えます。そうでない場合、execコマンドが終了すると、待機中のシェルセッションに制御が返されます。を使用すると、exec現在のシェルが置き換えられるため、その時点からスクリプトはコマンドを実行しなくなります。

この~/.xinitrcファイルはシェルスクリプトです。ウィンドウマネージャ(twmあなたの場合)だけでなく、最初に起動したい他のX11クライアント(たとえば、xterm他の端末などxeyes)も起動します。このスクリプトには、有効なスクリプト(シェルスクリプトソルバーによって実行されるため)であることを除いて特別な構文はありません。

最初の例では

exec xterm

これは現在のシェルプロセスを次にxterm置き換えexecます。見える効果はありますが、.xinitrcスクリプトは終了する前にバックグラウンドでxterm終了を待ちます(これはファイルの最後のコマンドなので)。

これが完了すると、exec twmシェルはそれ自体が置き換えられます。twmつまり、スクリプトで他のコマンドを実行できなくなります。そのため、代わりに(最後に)twmバックグラウンドプロセスから始めました。&sleepはtwm端末を起動する前に正しく起動することです。私はこれが必ずしも必要だとは思わない。実際、ウィンドウの装飾やウィンドウの移動、またはサイズ変更機能が必要ない場合は、twm他のウィンドウマネージャを実行する必要もありません(少なくともフルスクリーンを実行しない場合xterm)。

2番目の例では

exec WINDOWING=x11 /usr/bin/kodi -geometry +0+0

このexecコマンドを使用してこれらの環境変数を設定することはできません。代わりにWINDOWING変数を設定してエクスポートできます。今後移動するkodi

export WINDOWING=x11
exec /usr/bin/kodi -geometry +0+0

関連情報