WindowsマシンでPuTTYを使用して別のサーバーにSSHで接続しています。そこに到着したら、X11転送を使用してウィンドウをコンピューターにポップしようとしています。リモートシステムは、他の多くのユーザーが同じ方法で正常に使用できる大規模なシステムであるため、問題にはなりません。
問題なくPuTTYを介してシステムにログインし、cygwinでstartxwin
を実行します。ただし、PuTTYでxterm
を実行すると、エラーxterm Xt error: Can't open display: localhost:##.0
が表示されます。シャープ記号は、ログインするたびに値が変わる2つの整数です。
localhost:0
に設定してみましたstartx
の代わりにstartxwin
だけを使用してみましたsetenv DISPLAY localhost:0
とsetenv DISPLAY my.ip.address
を試しました残念ながら、問題は解決しません。このトピックに関するグーグルリソースを使い果たしたので、どんな助けにも感謝します。ありがとう!
最近のCygwinの更新により、XサーバーがTCP接続をデフォルトでリッスンしないように変更されました。代わりに、CygwinのXは(Cygwinの実装)Unixドメインソケット、およびPuTTY(ネイティブWindowsプログラムとして)を使用しますこれらの使い方を知りません。
Cygwin X FAQ および Cygwinmailinglists に詳細があります。
私の解決策は startxwin を使用してXを起動する標準のCygwinショートカットを取ることでした:
C:\cygwin\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; /usr/bin/startxwin"
そして、それを私の希望するオプションでxinitを直接呼び出すことで置き換えます(-listen tcp
を追加して-auth
を削除します):
C:\cygwin\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; /usr/bin/xinit /etc/X11/xinit/startxwinrc -- /usr/bin/XWin :0 -multiwindow -listen tcp"
これはCygwinの新しいデフォルトよりも安全ではありません。これはシングルユーザーシステムでのみ使用する必要があり、XWinへの接続をブロックするようにファイアウォールを構成するのが賢明です。
Josh Kelleyの発言の代わりに、startxwinファイルを編集して、「-listen tcp」をデフォルトのサーバー引数に追加することもできます。
旧:defaultserverargs = "-multiwindow"
新規:defaultserverargs = "-multiwindow -listen tcp"
また、認証を有効にして、PuTTYにstartxwinスクリプトで作成された認証ファイルを指定する必要がありました。鉱山はここにありました:c:\ cygwin64\home\USERNAME.Xauthority
このファイルは再作成されるため、xserverをリセットした後、PuTTYセッションを再起動する必要があります。
セキュリティのため、PuTTYが転送するのはlocalhostからの接続のみを許可することもできます。
「X表示場所」をlocalhost:0に設定してみました
代わりに「X表示場所」を「:0.0」に設定してみてください。
export DISPLAY=:0.0
Josh Kelley が言及 Cygwin X FAQ :
3.13。アップグレードしたが、Xクライアントが接続できない
A1:
Xサーバー1.17以降、サーバーはデフォルトでTCP/IP接続をリッスンせず、UNIXドメインソケットでのローカル接続のみを受け入れます。
ローカルクライアントの場合、DISPLAY = localhost:0.0、DISPLAY = 127.0.0.1:0.0、DISPLAY = :: 1:0.0などではなく、DISPLAY =:0.0を使用します。
これはxming用ですが、おそらくこのよくある質問は助けになりますか?その背後にある考え方は同じですが、ローカルマシンでcygwinの代わりにxmingを使用しています。 https://wiki.utdallas.edu/wiki/display/FAQ/X11+Forwarding+using+Xming+and+PuTTY
他の人が言ったように、トリックは-listen tcp
をサーバーの引数に追加することです。ただし、startxwin -- -listen tcp
を呼び出してstartxwin
に残りのxinit
コマンドをビルドさせることにより、これを行うことをお勧めします。
スタートメニューのショートカット:
C:\cygwin\bin\run.exe --quote /usr/bin/bash.exe -l -c "cd; /usr/bin/startxwin -- -listen tcp"