2012-05-07 10:34:49 from—http://blog.163.com/tianle_han/blog/static/6617826201247103222511/

下载LOFTER
我的照片书 |

一、linux桌面系统原理
linux的桌面系统(X Window System,可以直接通过yum groupinstall “X Window System”安装)实现了X protocol。它包括X server和X client。X client包括gnome和kde两套实现方案,两套方案中提供的登录管理程序分别是gdm和kdm。gnome在centos5上可以使用yum groupinstall “GNOME Desktop Environment”进行安装,在centos6上可以使用yum groupinstall “Desktop”进行安装。

二、linux远程桌面原理
1、XDMCP协议。
客户端是X Window System的X server,它通过XDMCP协议连接服务器上的X client,X server会根据指定的远程桌面的显示编号开启tcp监听端口(一般从6000开始),然后X client的登录管理程序连接到客户端的X server提供的端口上,并由X client的登录管理程序(gdm或者kdm)提供登录界面上,登录完成后由X client启动WM(window manager),然后就开始正常的交互了,客户端的X server负责在客户端绘制图形并提供硬件的操作事件,X client负责提供界面操作需求,然后经过网络传输给X server。使用这种方式进行连接X client和X server之间的通信只需要X server往X client的硬件事件和X client往X server的绘图要求,所以通信量还是比较小的。gdm提供的远程登录请求接收协议使用udp,端口默认在177上。udp请求协议通过后,X server便开始在6000+窗口编号的tcp端口上监听了,然后x client便可以连接这个端口,并将请求发送到X server上。

2、VNC
VNC借助XDMCP的原理,在服务器上启动一个X server并负责绘图,然后通过网络传输到VNC的客户端。因为VNC生成的界面只在服务器端,然后传往客户端,所以输出的界面都只是同步的拷贝,一个X server的显示也只能有一个客户端。VNC的实现有tigervnc等。由于VNC的服务端和客户端传输的是已经绘制完的屏幕图像,所以通信量比较大。

3、xrdp
xrdp实现了rdp协议。前端使用统一端口(默认为3389)管理客户端的连接请求,后端借助vnc server或者rdp server进行窗口显示,并把vnc的窗口发往客户端,由于它提供了sesman(session manager),所以连向它的客户端如果没有这个session,那么它将启动vncserver(Xvnc)或者rdp server建立这个显示界面,并发往客户端。

4、freeNX
freeNX使用NX protocol,后端通过VNC、gnome或者xrdp来提供界面,由于NX协议封装了界面显示信息,使通信量大大降低,比直接使用VNC所需要的带宽要小很多。

三、linux的远程桌面配置
1、使用XDMCP协议的配置
(1)服务器端
A、如果是centos5的版本,在使用XDMCP时,只需要使用gdmsetup(系统->管理->登录窗口)进行配置即可,配置的方式是在远程标签里的样式选上“与本地相同”,然后安全标签里分别选上允许本地系统管理员登录、允许远程管理员登录和禁止TCP连接到X服务器。当然也可直接修改gdm的配置文件/etc/gdm/custom.conf,内容改成如下:
[daemon]
RemoteGreeter=/usr/libexec/gdmgreeter
[security]
AllowRemoteRoot=true
[xdmcp]
Enable=true
[greeter]
[chooser]
[debug]
B、如果是centos6的版本,由于找不到gdmsetup程序(centos6取消了gdmsetup,gdm-restart等一系列命令,release_note上可以查到移除了rhn-setup-gnome包),所以不能再通过gdmsetup程序进行修改了,但可以通过改gdm的配置文件进行gdm的管理,也可以通过首选项的远程桌面配置来管理远程连接的配置部分。gdm的配置文件为/etc/gdm/custum.conf,内容改成如下:
[daemon]
[security]
DisallowTcp=false
AllowRemoteRoot=true
[xdmcp]
Enable=true
[greeter]
[chooser]
[debug]
(2)客户端
A、linux客户端可以使用tsclient(yum可以直接安装,tsclient只是一个软件,它的名称叫在终端服务客户端,它装完后在应用程序->internet或者附件里可以找到,它根据使用的协议选择不同的程序,如使用xdmcp协议时,tsclient实际上调用的是Xnest),也可直接使用Xnest进行连接。使用Xnest时需要指定使用哪个窗口进行显示,如Xnest -query serveraddr :2,其中2表示窗口编号,一般操作系统启动之后0和1窗口是已经被使用过了,所以不能指定0和1,当然这个是可以配置的。需要注意的是XDMCP协议不同版本兼容性可能存在问题,经测试高版本的Xnest可以访问低版本的gdm,但低版本的Xnest访问高版本的gdm时老是出段错误,软件上存在bug。
当然linux上也可以直接使用X启用X server连接远程桌面,但缺点是需要使用显示界面编号,不能在当前的显示界面里显示,使用X进行连接有三种方法:
(a)query方法,例:X -query XDMCPServerAddr :2
(b)broadcast方法,例:X -broadcast :2,这种方式将会连接第一个响应支持远程连接的server上。
(c)indirect方法,例:X -indirect XDMCPServerAddr :2,这种方式将由服务器返回可以连接的主机列表,然后你可以选择登录。
B、Windows的XDMCP协议客户端可以使用xshell带的X Manager客户端、Xming或MobaXterm

2、使用VNC的配置
(1)服务器端
A、centos5上使用的vnc服务器软件为vnc-server,可以直接使用yum install vnc-server安装
B、centos6上使用的vnc服务器软件为tigervnc-server,也可以直接使用yum install tigervnc-server安装
安装完成后配置过程如下(参考wiki.centos.org/HowTos/VNC-Server):
a、添加vnc用户,直接使用useradd即可。
b、使用添加的用户登录,然后使用vncpasswd修改自己的vnc密码,注意这个密码不是系统密码,只是远程登录时的验证密码。
c、修改配置文件,为每个用户提供显示界面,vncserver配置文件为/etc/sysconfig/vncserver,它里面的配置指定在哪个显示界面上输出,示例配置如下:
VNCSERVER=“3:xiaomao”#表示在编号为3的显示界面上输出,登录用户名为xiaomao
VNCSERVERARGS[3]=”-geometry 800×600 -nolisten tcp”#表示显示界面的参数。
(2)客户端
A、linux上在centos5上使用的客户端软件为vnc,可以使用yum install vnc进行安装,安装完成后命令名称为vncviewer,应用程序->附件里可以找到,名称为VNC Viewer。
B、linux上在centos6上使用的客户端软件为tigervnc,可以使用yum install tigervnc进行安装,安装完成后命令名称为vncview,应用程序->internet里面可以找到,名称为TigerVNC Viewer。
C、linux上的VNC客户端也可以使用tsclient,选择使用VNC协议即可,tsclient实际调用的仍然是vnc的客户端(tigervnc或者vnc)。
需要说明的是vnc的客户端需要指明vnc的端口,否则将连接不上。端口和用户显示的界面相关,一般是5900+界面编号,如前面示例配置里xiaomao的端口为5903。

3、使用xrdp
(1)服务器端
linux服务器安装xrdp软件,需要下载xrdp包,自己编译安装。下载地址为sourceforge.net/projects/xrdp/files。官网地址为www.xrdp.org。安装完成后的配置过程如下:
A、xrdp的配置文件为/etc/xrdp/xrdp.ini。端口默认为3389。sesman的配置文件为sesman.ini。
B、xrdp的启动需要启动sesman(xrdp-sesman)和xrdp两个进程,一般编写service脚本的时候要把这两个进程都启动。安装时默认的service脚本(源码包的instfiles里的xrdp.sh)有问题,restart会卡住,需要修改脚本,当然也可以手工启动这两个程序。
(2)客户端
A、linux可以使用krdc、rdesktop或者tsclient(实际调用的是rdesktop)进行连接。
B、windows可以直接使用windows的远程桌面进行连接,也可以使用xrdp的客户端(rdesktop)进行连接。

4、使用freeNX
(1)服务器端
A、linux可以直接通过yum安装freenx(yum install nx freenx)。
B、编辑配置文件/etc/nxserver/node.conf,打开ENABLE_PASSDB_AUTHENTICATION=”1″选项(去掉前面的#号就行)。
C、添加nxserver系统用户(直接使用useradd即可),完成后添加到nxserver用户列表中去(nxserver –adduser username)。
D、设置用户密码(nxserver –passwd username)。
(2)客户端
A、客户端软件需要在freeNX的官方网站下载安装包进行安装,过程比较简单,linux下是rpm包,windows下面是exe。
B、安装完成后可以使用连接向导建立连接,linux下在应用程序->Internet->NX Client for Linux下面。需要注意的是在选择连接类型的时候我们需要根据服务器提供服务的类型进行选择,如我们可以选择GNOME、VNC(需要server端提供了vnc服务,并且已知vnc提供的界面显示编号)以及rdp(需要服务端提供了xrdp的服务)等都可以。然后在finish时选上“显示高级配置对话框”的复选框,然后在key里面贴上nxserver验证使用的key(使用所选用户登ssh录服务器后,文件/etc/nxserver/client.id.dsa.key里面的内容)。经过试验,如果登录的server是centos6,并且使用默认设置的话,需要选择xdm而不是gnome才可以登录。

四、windows的远程桌面
1、服务器端
直接在windows上配置远程桌面,使用rdp协议
2、windows客户端
系统自带rdp客户端
3、linux客户端
使用krdc的rdp协议或者tsclient客户端