Xクライアント、サーバの動かし方

最新版は以下に記載しました。
https://hana-shin.hatenablog.com/entry/2023/02/19/222425

#1 はじめに
PCにXサーバをインストールして、Xクライアント(xeyes)をPC上で実行してみます。

#2 環境
VMware Workstation 14 Player上の仮想マシン、および、PC上で動作するXserverを使いました。
`()`内の数値は,Windows10のポート番号です。Xserverは、TCPの6000番ポートを使います。

```
+---------------- PC(Windows10) ------------+
|                                           |
|  +----------------+   +----------------+  |
|  |                |   |                |  |
|  |    Xserver     |   |   CentOS7.4    |  |
|  |   (VcXsrv)     |   |                |  |
|  |                |   |    Xclient     |  |
|  |                |   |    (xeyes)     |  |
|  |                |   |                |  |
|  |                |   |                |  |
|  |                |   |                |  |
|  |     (6000)     |   |  192.168.3.20  |  |
|  +----------------+   +----- eth0 -----+  |
|                       +----------------+  |
|                       |     VMware     |  |
|                       +----------------+  |
|                                           |
+------------------ ethX -------------------+
                 192.168.3.3
```


#3 インストール方法
##3.1 Xサーバのインストール
Xサーバとして、Xming等がありますが、ここでは、VcXsrvをPCにインストールしました。
インストール方法は、[ここ](https://www.atmarkit.co.jp/ait/articles/1812/06/news040.html)を参照してください。

##3.2 Xクライアントソフトのインストール

```
[root@host ~]# yum -y install xeyes
```

#4 McAfeeの設定変更
私のPCには、McAfeeがインストールされています。
デフォルトのままでは、Xクライアントが起動しないため、下記2点を変更しました、
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/4c0f3273-f51f-42af-a036-43179843d600.png)

##4.1 ポートとシステムサービス
XクライアントからXサーバにTCPパケットを送信するため、
PCのTCP/6000番ポートを開放します。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/0c013f6e-8b89-c7c9-2d4f-b797c6e0eb15.png)


##4.2 ネットワーク接続
PCにアクセス可能なネットワークを追加します。
ここでは、XクライアントのIPアドレスのみを追加しました。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/61ba165a-da3d-f120-5d16-ca8c7ac01c17.png)



#5 Xサーバの起動方法
XLaunchをマウスでクリックします。
![test8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/91e1f911-6423-95fa-1653-66abbc8e3d65.png)

`Display number`はデフォルトの"-1"を使います。
デフォルトの"-1"を選択すると、`<ディスプレイ番号>`は0になります。
![test9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/e3e39998-57f7-cf92-c49d-7b4f3a4dedac.png)
![test10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/951bb241-9c02-6bb9-eb86-d78f1db4bdd8.png)

`Disable access control`を有効にします。
これを有効にしないと、Xクライアントからのアクセスが拒否されました。
![test11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/7e2c5b39-2d75-0b7b-d76c-342faed48b26.png)
![test12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/96290414-158f-2273-0d2d-5dcf18cf0894.png)


#6 Xクライアントの起動方法
##6.1 環境変数DISPLAYの設定
`<IPアドレス>`には、Xサーバ動作しているマシンのIPアドレスを設定します。
`<ディスプレイ番号>.<スクリーン番号>`には0.0を設定します。

```console:DISPLAYの書式
DISPLAY=<IPアドレス>:<ディスプレイ番号>.<スクリーン番号>
```

DISPLAY変数に設定する`192.168.3.3`は、PCのIPアドレスです。

```console:DISPLAYの設定
[root@host ~]# export DISPLAY=192.168.3.3:0.0
[root@host ~]# echo $DISPLAY
192.168.3.3:0.0
```

##6.2 Xクライアント起動

```
[root@host ~]# xeyes
```

#7 実行結果
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146813/f6bafb50-e591-b878-c8bd-77b0f4832cc4.png)


#8 その他
XクライアントとXサーバのTCPコネクション確立時の様子をtcpdumpで確認しました。
xeyesコマンドを実行すると、XクライアントからXサーバの6000番ポートに対して
SYNパケットを送信して、TCPコネクションを確立しているのがわかります。
なお、tcpdumpの使い方は、[ここ(tcpdumpの使い方)](https://qiita.com/hana_shin/items/385182b05db96ef4e205)を参照してください。

```console:tcpdump実行結果
[root@host ~]# tcpdump -i eth0 port 6000 -n
11:44:16.094423 IP 192.168.3.20.51990 > 192.168.3.3.x11: Flags [S], seq 2889893148, win 29200, options [mss 1460,sackOK,TS val 9543841 ecr 0,nop,wscale 7], length 0
11:44:16.094761 IP 192.168.3.3.x11 > 192.168.3.20.51990: Flags [S.], seq 2646370916, ack 2889893149, win 65535, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
11:44:16.094819 IP 192.168.3.20.51990 > 192.168.3.3.x11: Flags [.], ack 1, win 229, length 0
-以下、略-
```

tcpdumpの実行結果を以下に図示しました。`()`内の数値はポート番号です。

```console:TCPコネクション確立
Xclient                                   Xserver
(51990)                                    (6000)
   |                                         |
   |------------------ SYN ----------------->|
   |<----------------- SYN+ACK --------------|
   |------------------ ACK ----------------->|
   |                                         |
```

x11は6000番ポートとして定義されています。

```console:ポート番号
[root@host ~]# cat /etc/services
x11             6000/tcp        X               # the X Window System
```

#Z 参考情報
[WSL上にXサーバをインストールしてGUIを実現する（VcXsrv編）](https://www.atmarkit.co.jp/ait/articles/1812/06/news040.html)
[VcXsrv Windows X Server](https://sourceforge.net/projects/vcxsrv/)
[X Window System とは](http://www.astec-x.com/FAQ/aboutx.html)