背景知识介绍:
1、什么是Xmanager?
Xmanager,可以将PC变成XWindow工作站,它是一个简单的易用的高性能的运行在windows平台上的Xserver,而linux平台下的gnome和kde就是Xclient,linux下的Xserver为xong。XDMCP协议是由DM程序所提供的。X11提供的displaymanager为XDM,而著名的KDE与GNOME也都有自己的displaymanager管理程序,分别是KDM与GDM,可以通过三者中的任何一个displaymanager配置文件来启动XDMCP这个协议程序。在操作XDMCP之前必须要先安装图形接口才可以。
2、linux下的XWindowSystem
linux使用的图形接口就是所谓的XWindowSystem,它是能够跨平台的,目前在linux上面开发的图形接口软件几乎都是使用这个架构来处理的。XWindowSystem在运行的过程中,又因控制的数据不同而分为Xserver和Xclient两种程序,虽然说是Xserver/client,但是它的作用却与网络主机的server/client架构截然不同。
Xserver:这组程序主要负责的是屏幕画面的绘制与显示。Xserver可以接收来自Xclient的数据,将这些数据绘制呈现为屏幕上的图像。此外,我们移动鼠标、单机数据、由键盘输入数据等,也会通过Xserver来传达到Xclient端,而由Xclient来加以运算出应绘制的数据。
Xclient:这组程序主要负责的是数据的运算。Xclient在接收到Xserver传来的数据后(如鼠标的移动、单击等操作)会经由本身的运算而得到鼠标应该要如何移动、单击的结果应该要出现什么样的数据、键盘输出的结果应该要如何呈现等。然后将这些结果告知给Xserver。让它自行绘制到屏幕上。
3、什么是WM?
WindowManager(WM)是一组控制所有Xclient的管理程序,并同时提供例如任务栏、背景桌面、虚拟桌面、窗口大小、窗口移动与重迭显示等任务。WindowManager主要由一些大型的桌面工具开发而来,常见的有gnome和kde。
4、什么是DM?
DisplayManager(DM)是用于提供用户登录画面,以让用户可以通过图形接口登录。在用户登录后,可通过displaymanager的功能去呼叫其他的windowmanager,让用户在图形接口的登录过程变得简单。由于DM也是启动一个等待输入帐号密码的图形数据,因此DM会主动去唤醒一个Xserver,然后在上面加载等待输入的画面。
5、关于XDMCP协议
XDMCP(xdisplaymanagercontrolprotocol)启动后会在服务器的UDP177开始监听,然后当客户端的Xserver连接到服务器的port177之后,我们的XDMCP就会在客户端的Xserver中放上用户输入帐号、密码的图形接口程序。那么你就能通过这个XDMCP去加载服务器所提供的类似windowmanager相关的Xclient,即能够取得图形接口的远程连接服务器了。
架构图如下:
操作流程:
6、CentOS配置XDMCP实现windows远程桌面linux
6.1查看是否安装桌面环境
[root@localhost ~]# yum grouplist Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Group Process Loading mirror speeds from cached hostfile * base: mirrors.btte.net * extras: mirrors.btte.net * updates: mirrors.btte.net Installed Groups: Base //必须的 Desktop //必须的 Desktop Debugging and Performance Tools Desktop Platform //必须的 X Window System //必须的 ……省略……
6.2通过进程查看判断当前是否开启DM
[root@localhost ~]# pstree|grep dm |-gdm-binary---gdm-simple-slav-+-Xorg | |-gdm-session-wor | |-gdm-simple-gree [root@localhost ~]#
6.3配置文件的设置
[root@localhost ~]# cat /etc/gdm/custom.conf # GDM configuration storage [daemon] [security] AllowRemoteRoot=yes //允许root登录 DisallowTCP=false //允许客户端使用TCP的方式连接到XDMCP [xdmcp] Enable=true //启动XDMCP [greeter] [chooser] [debug] [root@localhost ~]#
6.4重启服务
[root@localhost ~]# init 3 [root@localhost ~]# init 5 [root@localhost ~]# runlevel 3 5 [root@localhost ~]# netstat -antulp|grep dm udp 0 0 0.0.0.0:177 0.0.0.0:* 4487/gdm-binary [root@localhost ~]#
6.5防火墙设置
[root@localhost ~]# netstat -antulp|grep dm udp 0 0 0.0.0.0:177 0.0.0.0:* 4487/gdm-binary [root@localhost ~]# grep 177 /etc/sysconfig/iptables -A INPUT -p udp --dport 177 -j ACCEPT [root@localhost ~]# /etc/init.d/iptables restart iptables: Flushing firewall rules: [ OK ] iptables: Setting chains to policy ACCEPT: filter [ OK ] iptables: Unloading modules: [ OK ] iptables: Applying firewall rules: [ OK ] [root@localhost ~]#
6.6关闭windows端的防火墙
6.7测试登录界面
7、SUSElinux配置XDMCP实现windows远程桌面linux
7.1SUSElinux的版本查看
linux-08wz:~ # lsb_release -a LSB Version: core-2.0-noarch:core-3.2-noarch:core-4.0-noarch:core-2.0-x86_64:core-3.2-x86_64:core-4.0-x86_64:desktop-4.0-amd64:desktop-4.0-noarch:graphics-2.0-amd64:graphics-2.0-noarch:graphics-3.2-amd64:graphics-3.2-noarch:graphics-4.0-amd64:graphics-4.0-noarch Distributor ID: SUSE LINUX Description: SUSE Linux Enterprise Server 11 (x86_64) Release: 11 Codename: n/a linux-08wz:~ #
7.2查看当前使用的是哪种DM
linux-08wz:~ # pstree|grep dm |-gdm---gdm-simple-slav-+-X | |-gdm-session-wor | |-gdm-simple-gree linux-08wz:~ #
说明是gdm
7.3修改配置文件
一共需要修改四个地方:
a、
linux-08wz:~ # egrep -v '^$|^#' /etc/sysconfig/displaymanager DISPLAYMANAGER="gdm" DISPLAYMANAGER_REMOTE_ACCESS="yes" //默认是no,改为yes DISPLAYMANAGER_ROOT_LOGIN_REMOTE="yes" //默认是no,改为yes DISPLAYMANAGER_STARTS_XSERVER="yes" DISPLAYMANAGER_XSERVER_TCP_PORT_6000_OPEN="no" DISPLAYMANAGER_AUTOLOGIN="" DISPLAYMANAGER_PASSWORD_LESS_LOGIN="no" DISPLAYMANAGER_AD_INTEGRATION="no" DISPLAYMANAGER_SHUTDOWN="root" DISPLAYMANAGER_RANDR_MODE_VGA="" DISPLAYMANAGER_RANDR_MODE_auto="1024x768_60 64.11 1024 1080 1184 1344 768 769 772 795 -HSync +Vsync" DISPLAYMANAGER_XSERVER="Xorg" linux-08wz:~ #
b、
linux-08wz:~ # egrep -v '^$|^#' /etc/X11/xdm/Xaccess * #any host can get a login window //查看这一行,默认不需要修改,如果是被注释的,去掉注释,启用这一行 * CHOOSER BROADCAST #any indirect host can get a chooser linux-08wz:~ #
c、
linux-08wz:~ # grep 'requestPort' /etc/X11/xdm/xdm-config !DisplayManager.requestPort: 0 //默认是启用的,注释掉,注意用“!”注释 linux-08wz:~ #
d、
linux-08wz:~ # cat /etc/gdm/custom.conf # GDM configuration storage [xdmcp] # SuSEconfig: displaymanager:DISPLAYMANAGER_REMOTE_ACCESS Enable=true [chooser] [security] # SuSEconfig: displaymanager:~DISPLAYMANAGER_XSERVER_TCP_PORT_6000_OPEN DisallowTCP=false # SuSEconfig: displaymanager:DISPLAYMANAGER_ROOT_LOGIN_REMOTE AllowRemoteRoot=yes [debug] linux-08wz:~ #
这个文件和CentOS的一样
7.4重启服务
linux-08wz:~ # init 3 linux-08wz:~ # init 5 linux-08wz:~ # netstat -antulp|grep 177 udp 0 0 0.0.0.0:177 0.0.0.0:* 10263/gdm linux-08wz:~ #
7.5防火墙的设置
方法一:
linux-08wz:~ # init 3 linux-08wz:~ # init 5 linux-08wz:~ # netstat -antulp|grep 177 udp 0 0 0.0.0.0:177 0.0.0.0:* 10263/gdm linux-08wz:~ #
注意:这种方法是在默认情况下
linux-08wz:~ # /etc/init.d/SuSEfirewall2_init start Starting Firewall Initialization (phase 1 of 2) done linux-08wz:~ # /etc/init.d/SuSEfirewall2_setup start Starting Firewall Initialization (phase 2 of 2) done linux-08wz:~ # chkconfig --list|grep fire SuSEfirewall2_init 0:off 1:off 2:off 3:on 4:off 5:on 6:off SuSEfirewall2_setup 0:off 1:off 2:off 3:on 4:off 5:off 6:off linux-08wz:~ #
方法二:
linux-08wz:~ # chkconfig SuSEfirewall2_setup off //让开机不启动 linux-08wz:~ # iptables -A INPUT -p tcp --dport 22 -j ACCEPT linux-08wz:~ # iptables -A INPUT -p udp --dport 177 -j ACCEPT linux-08wz:~ # iptables -A INPUT -p icmp -j ACCEPT linux-08wz:~ # iptables-save > /etc/iptables.sh //将规则保存 linux-08wz:~ # cat /etc/iptables.sh # Generated by iptables-save v1.4.6 on Sun Oct 6 16:23:06 2013 *raw :PREROUTING ACCEPT [492:37226] :OUTPUT ACCEPT [370:41138] -A PREROUTING -i lo -j NOTRACK -A OUTPUT -o lo -j NOTRACK COMMIT # Completed on Sun Oct 6 16:23:06 2013 # Generated by iptables-save v1.4.6 on Sun Oct 6 16:23:06 2013 *filter :INPUT DROP [0:0] :FORWARD DROP [0:0] :OUTPUT ACCEPT [67:7123] :reject_func - [0:0] -A INPUT -i lo -j ACCEPT -A INPUT -m state --state ESTABLISHED -j ACCEPT -A INPUT -p icmp -m state --state RELATED -j ACCEPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT -A INPUT -p udp -m udp --dport 177 -j ACCEPT -A INPUT -p icmp -j ACCEPT -A OUTPUT -o lo -j ACCEPT COMMIT # Completed on Sun Oct 6 16:23:06 2013 linux-08wz:~ # cat /etc/init.d/after.local //默认不存在,需要自己创建,开机会加载 #!/bin/bash /usr/sbin/iptables-restore /etc/iptables.sh linux-08wz:~ #
7.6关闭windows端的防火墙
7.7测试登录