CentOS 6.7では、ssh
ローカルワークステーションからリモートホストに移動し、ホスト名またはIPアドレスを使用してDISPLAY環境変数をワークステーションに設定すると、Xディスプレイを開くことができません。
例:
$ ssh -Y host1
$ export DISPLAY=ws1:0.0 # workstation hostname=ws1
$ xeyes
Can't not open display
しかし、以下はうまくいきます。
$ ssh -Y host1
$ echo $DISPLAY
localhost:10.0
$ xeyes # works as expected
ホスト名で$ DISPLAYを設定するとX-displayが機能しないのはなぜですか?
答え1
重大なセキュリティ問題のため、X サーバーへのリモートアクセスは現在一般的に禁止されています。
ファイアウォールおよび/またはXサーバーの設定により、これらの接続が成功しない可能性があります。
これにより、ローカルおよびUnixドメインソケット接続のみが許可されます。ローカルホスト:サーバー[.display]またはまったくホストがありません:サーバー[.display]利用可能な設定があります。
XサーバーがTCPポートでリッスンしていることを確認するには、次のコマンドを実行し、Xサーバー(トンネリングの場合はSSH)が6000以上の範囲のポートを使用していることを確認できます。
$ sudo netstat -anp|grep -w LISTEN
サーバーがUnixバインディングソケットのみを受信している場合は、次のように表示されますlsof
。
$ sudo lsof -p $(pgrep Xorg)
次の行は Unix ソケットを示します。
Xorg 1874 root 21u unix 0xffff8800d5db4000 0t0 21169 @/tmp/.X11-unix/X0 type=STREAM
TCPポートでリッスンしているすべてのプロセスを識別するには、次のコマンドを実行できます。
$ sudo lsof -P | grep -w LISTEN
たとえば、次はTCPポート22でリッスンするSSHデーモンです。
sshd 1032 ルート 4u IPv6 22727 0t0 TCP *:22(リスニング)
答え2
ローカルXサーバーがXサーバーの最新バージョンの場合、デフォルトではXorg
直接ネットワーク接続は許可されません。この機能を有効にするには古くて全く安全ではありませんメソッドにアクセスするには、この-listen tcp
オプションを含めるためにXサーバーを起動するために使用されるコマンドラインを変更する必要があります。
以前のディストリビューションはデフォルトでこのオプションを使用してXサーバーを起動し-nolisten tcp
、保護されていないレガシーネットワークアクセスを有効にするには、Xサーバーのコマンドラインからこのオプションを削除する必要があります。
ほとんどの主要なLinuxディストリビューションは、2000年以前にデフォルトで保護されていないX11接続をブロックし始めたようです。