75996


現在、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のアドレス」

以下参考にしています。  
<https://www.infraeye.com/study/linuxz37.html>

以上が今までの構成と流れですが、今必要な設定は他になにかあるでしょうか(基本的に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のファイヤーウォールを完全に停止すれば同じようにできるはずです。

助けていただいた皆様本当にありがとうございました！


CC BY-SA 4.0
2021-05-20T07:10:27.040
75976
2021-05-25T09:41:14.620
2021-05-25T09:41:14.620
43586
43586
question
linux
LinuxをもつPCが2台で、リモートアクセスにより、Xアプリの1つ「Xeyes」を表示させる方法


Xサーバは一般的な「サーバ/クライアント」モデルから想像するのと違い、以下のような構成になります。

  * 手元で操作する側 (GUIを表示する): Xサーバ
  * 表示対象のプログラム: Xクライアント

仮に「PCA から PCB にリモート接続して、PCB 上で実行した GUI を PCA
の画面に表示したい」であれば、以下のような流れになります。(ファイアウォール周りなどの細かい部分は解決済みとして)

  * PCA 上で X Server を起動しておく (Linux であれば、恐らく GUI ログインしていればOK)
  * PCA から PCB に ssh でリモート接続
  * PCB 上で 環境変数 DISPLAY を設定 (`export DISPLAY=<PCAのIPアドレス>`)
  * PCB 上で GUI プログラムを実行
  * PCA の画面に GUI が表示される


CC BY-SA 4.0
2021-05-20T08:07:30.823
75977
2021-05-20T08:07:30.823
3060
75976
answer


コメントが付けられなかったので回答として投稿します。  
「ss
-tlpn」を実行して6002番ポートがあったとのことですが、そのポートを用いて接続しているのはXサーバのプロセスでしたか？出力結果を質問文に追記すると適切なコメントがもらえると思います。

もし接続待ちがXサーバのプロセスだったとするならば、PCAでexportするDISPLAY変数は  
DISPLAY=PCBアドレス:0.0  
ではなく  
DISPLAY=PCBアドレス:2.0  
になるかと思います。  
6002番がXサーバとは関係ないプロセスであるならすでに指摘を受けている通り-nolisten tcp付きで実行されているのではと思います。

\--コメントを受けて追記--  
1つずつ丁寧に切り分けるしかないと思います。以下、確認済みのものもあるかと思いますが、  
思いつくものを列挙しておきます。未確認のものがある場合は確認することをお勧めします。

・PCBのアドレスはゲストマシンのアドレスか？（ホストマシンWindows側のアドレスになっていないか）  
・PCBでxhostコマンドを引数無しで実行して、出力される結果にPCAのアドレスが許可されているか  
・PCAで「xeyes -display PCBのアドレス:2.0」を実行した場合はどうか？  
・コメントで提案のあったsshによる実行ではどうか（実際のシステムで使用するかは別として動作するかしないかの確認として）

手元にすぐ動かせるLinuxマシンが準備できないので実行例など示せず申し訳ありません。


CC BY-SA 4.0
2021-05-21T06:52:48.960
75996
2021-05-21T08:38:38.550
2021-05-21T08:38:38.550
45440
45440
75976
answer