CygwinのXWinサーバーが自動的にxtermを開始するのを防ぐにはどうすればよいですか?


12

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

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

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

回答:


5

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

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

sleep inf

これはクライアントプログラムを起動しませんが、.startxwinrcの終了も防ぎます。


1
何らかの理由で、これは私には機能しません。次のように入力する必要がありましexec sleep infinityた:x.cygwin.com/docs/faq/cygwin-x-faq.html#q-startxwinrc-exit
enricoferrero

17

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

からman startxwin

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

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

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

touch ~/.startxwinrc

1
このソリューションは長い間有効でしたが、最後の更新ではそうではありません。空の値を使用する.startxwinrcと、Xサーバーがすぐに消えます。:-(
Notinlist

1
@Notinlistそうです。それは少し悲しいです。私は新しいソリューションを調査し、見つけようとします。システムは今ややや複雑になっているようであり、どのように機能するかを簡単に判断することはできません…
-me_and

3

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

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

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

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

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

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

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

eval \"$server\" $display $serverargs

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


0

Cygwin Xを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


これは実際にはこの質問に対する答えではありません。言い換えると、それは可能性がありますが、これは、表示されているエラーの処理に関する個別の質問と回答(ここで行ったように)として適していると思います。次に、この質問へのコメントでその質問にリンクできます。
me_and
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.