[スタート]メニューの[XWinサーバー]リンクを使用するか、Cygwinシェルからstartxwin
を実行して、CygwinのXサーバーを起動すると、xtermウィンドウが自動的に表示されます。
どうすればそれを回避できますか?
( このコメント by Stijn Vanpoucke スタックオーバーフローに触発された質問)
@me_andが最初に質問に回答してから、startxwinの動作が変更されたようです。そのため、ホームディレクトリに空の.startxwinrcを作成するだけでは機能しなくなります。
私は答えを見つけました ここ 。基本的に、.startxwinrcの最後のコマンドが終了すると、サーバーは終了します。これを防ぎたい場合は、これを.startxwinrcの最後の行として配置できます。
sleep inf
これにより、クライアントプログラムは起動しませんが、.startxwinrcが終了するのを防ぐこともできます。
[〜#〜] update [〜#〜]:この回答は現在古くなっています。最新の回答については、 以下のuser551570の回答 を参照してください。
man startxwin
から:
コマンドラインで特定のクライアントプログラムが指定されていない場合、
startxwin
はユーザーのホームディレクトリで.startxwinrc
というファイルを検索し、クライアントプログラムを起動するためのシェルスクリプトとして実行します。そのようなファイルが存在しない場合、startxwin
はデフォルトとして以下を使用します。xterm -geometry +1+1 -n login -display :0
したがって、Xサーバーの起動時にプログラムが起動しないようにするには、空の.startxwinrc
ファイルが必要です。 Cygwinプロンプトから以下を実行するだけです。
touch ~/.startxwinrc
2014年11月 の時点で、startxwin
の最新バージョンはxinit
を使用してCygwin/Xサーバーを起動します。これは実際にはXWin.exe
と呼ばれます。プロセスは次のようになります。
startxwin
に電話しますstartxwin
は新しい.Xauthority
ファイルと.serverauth.1234
というファイルを作成します(Xを起動するたびに1234
が変更されます)startxwin
はいくつかのクライアントとサーバーのパラメータを設定しますstartxwin
は、いくつかのオプションのシェルスクリプトと認証ファイルへの参照を含む、クライアントとサーバーのパラメーターを使用してxinit
を呼び出します。xinit
はXサーバーを起動し、いくつかのrcスクリプトを実行しますxinit
は、クライアント(通常はxterm
)またはクライアント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を強制終了しないようにします)。
私は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 [〜#〜]