質問: 現在、LinuxをもつPCが2台あり(PCA PCBとする)、PCAからリモートアクセスによりPCBへ、Xアプリの1つ「Xeyes」を表示させようと思います(PCAにある「Xeyes」をPCBで表示させたいという意味です。)。 しかし、現状、「Can't Open Display PCBのアドレス」というエラーがPCAに表示され、この後の解決がわかりません。 簡単な構成は以下となります。 PCA ・PC:デスクトップ型PC ・OS:Linux(CentOS 7) ・その他:XClientとする。 PCB ・PC:デスクトップ型PC ・OS:Windows10内に、VirtualBoxのLinux(CentOS 7)がある。 ・その他:XServerとする。 現在設定として、以下のことを試しました。 1.PCAで 「export DISPLAY=PCBのアドレス:0.0」 2.PCBで、GUIの画面から一度「xinit」を行い、「startx」でxtermの画面 3.PCBで「xhost + PCAのアドレス」 以下参考にしています。 以上が今までの構成と流れですが、今必要な設定は他になにかあるでしょうか(基本的にsshをしない方法で考えております、、)? 互いのip疎通は前提としてできております。 また、PCBですが、「systemctl status XServer」で調べるとXServerのServiceが「running」状態ではなかったことは気になっております。 この分野に関して初心者で分からないことが多くあります。お手数ですがよろしくお願いします。 --- 以下は、皆様のコメントを元に追加で行った内容です。 1.ポートを開いた状態で、xeyesが表示されるか確認 ・PCBで、「startx -- -listen tcp」を行い、ポート明示的に開いてxサーバを立ち上げた。 明示的にポートを開かなければ、ポートが閉じた状態でxサーバが立ち上がるため。 ・PCBで「firewall-cmd --add-port=6000/tcp」を行い、6000番台を立ち上げる。 ・PCBで「printenv DISPLAY」でディスプレイ番号確認する。ディスプレイ番号で、「:2」を得る。 ・PCBで「xhost +PCAのアドレス」をする。 ・「xhost」をする。「access control enabled, only authorized clients can connect INET:PCAのアドレス」という結果を得ており、PCAのアドレスが許可されている。 ・PCBで「ss -tlpn | grep 600」を行い、ポート接続しているのは「X」であることを確認した。 ・PCAで「export DISPLAY=PCBのアドレス:2.0」をする。 ・PCAでxeyes起動するが、「Can't open display PCBのアドレス:2.0」で起動できない。 2.sshでxeyesが表示されるか確認 ・PCBで、xサーバを立ち上げた上で、「ssh -X PCAのアドレス」でPCAにログインする。 ・PCBで、xeyes起動すると表示される。 3.PCAからPCBへsshでログイン可能かどうか確認 ・PCBへログインできていることを確認した。 4.PCBのアドレスはゲストマシンのアドレスか確認 ・PCBのアドレスはゲストマシンのアドレスであることが分かった。(ホストマシンWindows側のアドレスではない) 5.PCBのWindowsのファイヤーウォールを切っているか ・有償のセキュリティソフトが、windowsのファイヤーウォールを管理しているが、それが切られていることは確認した。 6.PCBで、「xhost +」で全てのマシーンを受け入れ形で、xeyesが表示されるか確認 1.の方法を元に行ったが、xeyesは起動しなかった。 --- 結果としまして、以下で恐らく可能かと思います。 追加作業1「ポートを開いた状態で、xeyesが表示されるか確認」において、2点目と3点目の作業を逆にしてください。また作業で若干の修正があります。 ・PCBで「printenv DISPLAY」でディスプレイ番号確認する。ディスプレイ番号で、私のPCの場合「:2」を得る。 ・PCBで「firewall-cmd --add-port=6002/tcp」を行い、6002番を立ち上げる。 利用するディスプレイ番号が0以外の場合は、(6000+ディスプレイ番号)のポートが使われるので、立ち上げるポートの設定もディスプレイ番号に合わせて変更したほうがよいそうです。今までは、ポート番号を6000で常時設定しようとしていましたが、ディスプレイ番号は2だったのでxeysの表示ができなかったのかもしれません。しかし、ポート番号6000で設定して、「ss -tlpn」をすると、「*6002」というメッセージで6002ポートがオープンされているように思われたのですが、、 参考:https://qiita.com/kkk627/items/0a4ad6c2ccd1548474ba 上記を行うと、ポートを設定した状態でxeyesが起動できると恐らく思われます。または、PCBのファイヤーウォールを完全に停止すれば同じようにできるはずです。 助けていただいた皆様本当にありがとうございました!
回答: Xサーバは一般的な「サーバ/クライアント」モデルから想像するのと違い、以下のような構成になります。 * 手元で操作する側 (GUIを表示する): Xサーバ * 表示対象のプログラム: Xクライアント 仮に「PCA から PCB にリモート接続して、PCB 上で実行した GUI を PCA の画面に表示したい」であれば、以下のような流れになります。(ファイアウォール周りなどの細かい部分は解決済みとして) * PCA 上で X Server を起動しておく (Linux であれば、恐らく GUI ログインしていればOK) * PCA から PCB に ssh でリモート接続 * PCB 上で 環境変数 DISPLAY を設定 (`export DISPLAY=`) * PCB 上で GUI プログラムを実行 * PCA の画面に GUI が表示される