web-dev-qa-db-ja.com

CygwinのXWinサーバーがxtermを自動的に起動しないようにするにはどうすればよいですか?

[スタート]メニューの[XWinサーバー]リンクを使用するか、Cygwinシェルからstartxwinを実行して、CygwinのXサーバーを起動すると、xtermウィンドウが自動的に表示されます。

どうすればそれを回避できますか?

このコメント by Stijn Vanpoucke スタックオーバーフローに触発された質問)

12
me_and

@me_andが最初に質問に回答してから、startxwinの動作が変更されたようです。そのため、ホームディレクトリに空の.startxwinrcを作成するだけでは機能しなくなります。

私は答えを見つけました ここ 。基本的に、.startxwinrcの最後のコマンドが終了すると、サーバーは終了します。これを防ぎたい場合は、これを.startxwinrcの最後の行として配置できます。

sleep inf

これにより、クライアントプログラムは起動しませんが、.startxwinrcが終了するのを防ぐこともできます。

5
josmith42

[〜#〜] update [〜#〜]:この回答は現在古くなっています。最新の回答については、 以下のuser551570の回答 を参照してください。

man startxwinから:

コマンドラインで特定のクライアントプログラムが指定されていない場合、startxwinはユーザーのホームディレクトリで.startxwinrcというファイルを検索し、クライアントプログラムを起動するためのシェルスクリプトとして実行します。そのようなファイルが存在しない場合、startxwinはデフォルトとして以下を使用します。

xterm  -geometry  +1+1  -n  login  -display  :0

したがって、Xサーバーの起動時にプログラムが起動しないようにするには、空の.startxwinrcファイルが必要です。 Cygwinプロンプトから以下を実行するだけです。

touch ~/.startxwinrc
17
me_and

2014年11月 の時点で、startxwinの最新バージョンはxinitを使用してCygwin/Xサーバーを起動します。これは実際にはXWin.exeと呼ばれます。プロセスは次のようになります。

  1. startxwinに電話します
  2. startxwinは新しい.Xauthorityファイルと.serverauth.1234というファイルを作成します(Xを起動するたびに1234が変更されます)
  3. startxwinはいくつかのクライアントとサーバーのパラメータを設定します
  4. startxwinは、いくつかのオプションのシェルスクリプトと認証ファイルへの参照を含む、クライアントとサーバーのパラメーターを使用してxinitを呼び出します。
  5. xinitはXサーバーを起動し、いくつかのrcスクリプトを実行します
  6. xinitは、クライアント(通常はxterm)またはクライアントrcスクリプトを起動します。 これを避けたい
  7. クライアントを閉じるか、クライアントrcスクリプトが終了すると、xinitはXサーバーをシャットダウンします。 ステップ6を回避する場合は、これも回避する必要があります

startxwinおよびxinitが実行する周囲のタスクなしで、Bashログインシェル内から直接XWin.exeを実行することが可能です。これの主な利点は、Xサーバーが起動し、実行されたままになるという、希望どおりに動作することです。残念ながら、起動時に.Xauthorityファイルが渡されないため、Xサーバーはローカルプロセスの接続を許可しますが、これは安全ではありません。

幸いなことに、私たちが望まないことのほとんどを行うのはxinitです。 xinitをバイパスするが、サーバー自体に関連するstartxwinの残りの要素を保持する簡単なハックがあります。

TL; DR:startxwinには、下部に次のような行があります。

eval xinit \"$client\" $clientargs -- \"$server\" $display $serverargs

その行を次のように変更します。

eval \"$server\" $display $serverargs

今後、startxwinスクリプトは、xinitを呼び出すのではなく、XWin.exeを直接呼び出します。明らかに、これによりクライアントrcスクリプトが無効になりますが、そもそもそれらは必要ありませんでした。また、Xが存続するためにクライアントプロセスを必要とせずに実行を継続することも意味します(つまり、xinitがXを強制終了しないようにします)。

3
Ethan T

私はCygwinXをstartxwin(.exe)で起動することを習慣にしました。私の.startxwinrcファイルは次のようになります。

X :0 -rootless mrxvt  -geometry  +1+1  -n  login  -display  :0 -tt ImTabbed

これまでのところ、それは機能しています。私が得る唯一のエラーは、別のXプロセスによってディスプレイがまだ「開いている」ことに関するものです。このエラーは、Xサーバーがすべてのセッションに対してデフォルトで生成する特定のファイルを指定します。 Cygwinの人々は、セッションが終了しても削除されないことを認識しています。

だから私はそれを「治す」ためのエイリアスを書いた:

alias freex='rm /tmp/.X0-lock'

自分で忘れてしまった場合に備えて、.bashrcファイルと.bash_profileファイルに同じ行(引用符の間の部分)を入れました。

HTH。

[〜#〜] bzt [〜#〜]

0
SilversleevesX