早就想做这个实验了,今天做了一下。
这是在三台实验机上配置环境执行的命令
[x-server]
ifconfig eth0 192.168.10.1
yum install xorg-x11-xinit
yum install xorg-x11-drv-vmware
yum install xterm
iptables -F
xhost + 192.168.10.3
xhost + 192.168.10.2
[gdm-server]
ifconfig eth0 192.168.10.2
yum install gnome-session
export DISPLAY="192.168.10.1:0"
[app-client]
ifconfig eth0 192.168.10.3
yum install xterm
useradd test (xterm 在root好像不让执行)
passwd test
export DISPLAY="192.168.10.1:0"
iptables -F
yum install gedit
配置完成后,在x-server上xinit ,在gdm-server上执行gnome-session ,在app-client上执行gedit。
如下图:
下面的xterm是x-server执行xinit是启动的,gedit就是在app-client上的启动的了,其余的都是gdm-server上产生。虽然有很多错误,但还是达到了实验目的gnome桌面环境已经启动,gedit上已经有最小化、最大化、关闭按钮了。
这个实验完全说明了可以吧x-server、桌面环境、应用软件分别放在三台机器上。
只是他们之间的关系还不太清楚,有待分析。
在三台机器上都打开过程中,网络流量监控着。发现,gdm-server 与 app-client之间没有任何流量,只有x-server 跟他们两的流量。x-server 监听 6000 端口 ,gdm-server 上的每一个gnome小程序都连接到x-server上,app-client 上的gedit也一样连接到x-server上
看来要分析x11协议了
既然gedit能在x-server上显示,那他就有gedit显示的坐标。x-server 就以事件报的形式告诉给gdm-server ,gdm-server 就在gedit坐标的上面加几个按钮及其它图像。当鼠标点击最大化时,x-server就给gdm-server 发送事件包(鼠标点击了最大化的位置),给app-client发送Sent-ClientMessage事件包;当鼠标点击关闭时,x-server向gdm-server发送事件包(鼠标点击了关闭位置),给app-client发送DestroyNotify事件包(Destroy是销毁的意思)
就是这样了,gdm-server 与 app-client 都不停向x-server 查询自己需要的信息,x-server 都一一予以回应。当有鼠标和键盘等操作事件是,x-server 都以事件的形式告诉gdm-server、app-client。
gdm-server与app-client 都根据收到的事件信息来完成自己的操作。
以上是我通过监控他们之间的来往数据包分析的。具体情况还要详细了解X11协议后才能知道 。