使用XDMCP来远程连接你的Linux图形桌面!
-
操作环境
Fedora Core 3
gdm(Gnome)
X-Win32 v8.0 ( http://www.starnet.com/evalkey/ ) -
设定 XDMCP
XDM 是 X Display Manager 的简称,他的功能是什么呢? 简单的说,就是管理操控 X Server 的显示啦~他主要有两种管理方式, 如果 X Server/Client 在同一部机器上,那么启动 xdm 之后,就会产生一个 X server 了; 而如果 X server/client 不在同一部主机上面,那么启动 xdm 后,他就会透过网络去管理远程那部主机的 X server 了。而 XDMCP (X Display Manager Control Protocol) 就是负责监听来自网络上面对于 xdm 的要求的啦~
由 X11 (FC3 使用的是 Xorg 这个计划的 X11)提供的 display manager 为 xdm ,设定档在 /etc/X11/xdm/xdm-config , 而著名的 KDE 与 GNOME 也都有自己的 display manager 管理程序,分别是 kdm 与 gdm , 设定档则是 /etc/X11/xdm/kdmrc 与 /etc/X11/gdm/gdm.conf (不同的 distribution 这个档案放置的目录不太一样)。我们可以透过三者中任何一者的 display manager 的设定档来启动 xdmcp 这个协议呢~
要启用 xdmcp 的功能真的很简单,如果您要启用 xdm 的话,修改 /etc/X11/xdm/xdm-config 这个档案, 找到底下这一行:
DisplayManager.requestPort: 0
将它修改为
!DisplayManager.requestPort: 0
亦即是批注掉,然后再重新启动 xdm 就好了。而 kdm 与 gdm 的设定也类似,不过要注意的是,即使在 Linux 主机端不启用 X Server (port 6000) 也是可以正确无误的提供 X 接口的登入的~就如同上面提到的概念一般~ 但是,如果要获得比较正确的讯息,那么还是建议您,启用 kdm 时一并正确的启动 X , 只是安全性上面就要注意一些了!
如果是用kdm来进行xdmcp的架设的话,步骤是这样的:
1. 先让 kdm 支持 xdmcp 模式
[root@linux ~]# cd /etc/X11/xdm
[root@linux xdm]# vi kdmrc
[Xdmcp]
Enable=1
# 大约是在 70 行左右。
2. 让 client 可以透过 X 来登入系统!与权限有关的设定
[root@linux xdm]# vi Xaccess
*
# 为了安全性上面的需要,想要登入 X 的话,得要通过这个档案的验证才行。
# 找到上面这一行,如果没有这一行的话(整行只有一个 * ),
# 就自行加入。这表示『不论来自哪里,我都接受 X 登入』的意思!
3. 启动 kdm 喔!
[root@linux xdm]# /etc/init.d/xfs start
# 就如同我们上面提到的, kdm 执行后,可能的话,会在本机端启动一个 X server 的,
# 而我们这一版的 Xorg 要顺利的启动,得要先启用 X font Server 才行,
# 否则的话,您就得要到 /etc/X11/Xorg.conf 里面去设定好每个字型的路径才行。
[root@linux xdm]# kdm
[root@linux xdm]# netstat -tlunp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:6000 0.0.0.0:* LISTEN 5920/X
tcp 0 0 :::6000 :::* LISTEN 5920/X
udp 0 0 :::177 :::* 5918/kdm
# 要看到有 177 的 udp port 出现才行~ 因为那是 xdmcp 协议的监听埠口。
# 不过,如果要看看是否有成功启动 X 的话,就得要查阅 6000 这个 port 啰~
# 如果没有看到 port 6000 的话,请查阅 /var/log/Xorg.0.log 喔!
# 如果想要设定开机就自动执行的话,可以利用 chkconfig 加入 xfs ,
# 也可以将 kdm 这个指令写到 /etc/rc.d/rc.local 这个档案中~
虽然是非必备的,不过为了避免困扰,这里还是得要提醒大家。(因为 Fedora 不需要启动 X 就能够提供 xdmcp 登入) 上面的测试是在 run level 为 3 的环境下,且整体在执行的时候, /var/log/messages 与 /var/log/Xorg.0.log 这两个档案内容中并没有 kdm 的相关错误讯息~ 很重要啊!因为某些套件如果没有成功的启动 X 时,他就无法提供登入呢~
- 由于Redhat倾向使用Gnome,FC3默认也是使用Gnome,下面介绍一下用gdm来假设XDMCP
1. [root@server5 gdm]# vi /etc/X11/gdm/gdm.conf
找到如下几行,大约在205行那里:
[xdmcp]
# Distributions: Ship with this off. It is never a safe thing to leave
# out on the net. Setting up /etc/hosts.allow and /etc/hosts.deny to only
# allow local access is another alternative but not the safest.
# Firewalling port 177 is the safest if you wish to have xdmcp on.
# Read the manual for more notes on the security of XDMCP.
#Enable=false
Enable=true
修改 Enable=false 一行为 Enable=true 。
2. [root@server5 gdm]# vi /etc/X11/xdm/Xaccess
取消注释这一行:
* #any host can get a login window
3. 启动gdm
[root@server5 gdm]# /etc/init.d/xfs start
[root@server5 gdm]# gdm
[root@server5 gdm]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
...
udp 0 0 0.0.0.0:177 0.0.0.0:* 2805/gdm-binary
...
注:默认并没有启动X。
-
客户端登入
1. 客户端是 Linux 主机:
如果想要进行 XDMCP 提供的 X 接口的登入 Linux 主机时,在 Linux 底下可是容易的很~ 底下的流程是在『客户端』执行的喔~不是刚刚那部 XDMCP 所在的 Linux 主机啦!
0. 请务必要在 X Window 当中,进入 X Window 的方式有:[root@client ~]# startx
# 或
[root@client ~]# init 5
(1). 在 X Window 的画面当中,启用一个 shell ,然后输入:
[root@client ~]# xhost + 192.168.1.5
192.168.1.5 being added to access control list
# 假设我刚刚那部 Linux 主机的 IP 为 192.168.1.5
[root@client ~]# init 3 <== 关闭 X Server
(2). 在文字接口下输入:
[root@client ~]# X -query 192.168.1.5
# 进入 X Window 啰!
如果一切顺利的话,您应该就能够到 X Window 的画面底下去登入啰~
2. 客户端是 Windows 主机:
如果想要进行 XDMCP 提供的 X 接口的登入 Linux 主机时,在 Windows 底下就得要使用其它软件来支持了。例如:
X-Win32 ( http://www.starnet.com/evalkey/ )
Exceed ( http://www.hummingbird.com/products/nc/exceed/index.html?cks=y )
这里我用 X-Win32 来进行测试。正个运作流程是这样的:
(1)下载-安装-运行X-Win32(要注册,选择演示模式吧)-在X-Config里使用向导新建一个会话,写个名称,“类型”当然选择XDMCP啦-因为我们知道那部Linux主机的地址,选择“查询”即可-输入主机IP地址-完成。
(2) 在“共享会话”或“我的会话”里选择你刚刚建立的会话,是不是连接上了?呵呵````
填入你的用户名和密码,可爱的Gnome图形界面出来了吧!GOOD!
看,可爱的Gnome桌面被我们捉到了吧?!哈哈``````
- 结合 vncserver 来进行远程图形桌面连接
虽然 xdmcp 就已经很好用了,不过,就以传输速度上来讲,他真的是慢啊~~ 这个时候,我们可以利用 VNC (Virtual Network Computing) 这个好用的咚咚来进一步设定我们的 X Window 登入系统喔。
VNC 必须要透过 VNC Server 与 VNC client 软件的互相搭配,就可以进行比较快速一点的数据传输。 而 VNC 如果想要漂亮的一点的话,也是需要搭配 xdmcp 的啦~因为如果是纯粹使用 VNC 连接到 Xorg (或 XFree86) 那个简单的画面,真的是....有点不好用~
其实 VNC Server 会在主机多开一个程序在等待 Client 的登入要求, 等到 Client 登入之后,才去执行 Window manager 的启动。而这个 Window manager 的启动方式有很多种, 最常见的就是利用 Xorg 预设的 twm 这个窗口管理程序,他真的是不好看~
那怎么办?其实我们可以透过更改 VNC 的启动设定档:xstartup 来设定不同的 Window manager , 另外,我们也可以透过启用 kdm 或 gdm 这两个好用的 display manager 来代为管理 Window manager 呢~ 比较喜欢使用查询 (Query) XDMCP 的方式来启动 VNC ,而不是直接启动 startkde 这个程序~ 所以,底下我们就直接来设定可以连接到 xdmcp 上的 VNC Server 吧!
1. 参考上面所写修改 gdm.conf 与 Xaccess 文件,并启动 gdm 。
2. 设置你的 vnc password
[kevinlee@astro21 ~]$ vncpasswd
Password: <== 输入密码
Verify: <== 再输入一次
[kevinlee@astro21 ~]$ vi ./.vnc/xstartup
#如果存在此文件,把文件内容全部注释掉
3. 修改 /etc/sysconfig/vncservers 文件
[root@astro21 ~]# vi /etc/sysconfig/vncservers
# VNCSERVERS="1:myusername"
# VNCSERVERARGS[1]="-geometry 800x600"
VNCSERVERS="1:kevinlee"
VNCSERVERARGS[1]="-geometry 800x600 -query localhost"
#在最后添加两行如上# 意思是说,我们要启动一个 VNC 在 port 5900+1 即 5901 的意思
4. 启动 vncserver
[root@astro21 ~]# service vncserver start
Starting VNC server: 1:kevinlee [ OK ]# 此时在 /home/kevinlee/.vnc/ 里面应该会有几个文件你应该要注意的,
# 最重要的就是 astro21.astro.gz:1.log 这个文件,档名的由来是:
# username.hostname.domainname:[port number].log ,因为我们是启用 5901 ,
# 所以就有 :1.log 的附档名啦~务必看到里面没有错误才行喔~
# 如果发现找不到/usr/X11R6/lib/X11/xserver/SecurityPolicy 的错误,先略过不要紧
[root@astro21 ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:5801 0.0.0.0:* LISTEN 20502/Xvnc
tcp 0 0 0.0.0.0:5901 0.0.0.0:* LISTEN 20502/Xvnc
tcp 0 0 0.0.0.0:6001 0.0.0.0:* LISTEN 20502/Xvnc
tcp 0 0 :::6001 :::* LISTEN 20502/Xvnc
udp 0 0 0.0.0.0:32800 0.0.0.0:* 20502/Xvnc
udp 0 0 0.0.0.0:177 0.0.0.0:* 18399/gdm-binary
另外,实际上启动 VNC 的 script 是由 vncserver 这个指令所启用的, 你也可以直接利用某个身份直接下达:
[kevinlee@astro21 ~]$ vncserver :2
New 'astro21.astro.gz:2 (kevinlee)' desktop is astro21.astro.gz:2
Starting applications specified in /home/kevinlee/.vnc/xstartup
Log file is /home/kevinlee/.vnc/astro21.astro.gz:2.log
关闭:
[kevinlee@astro21 ~]$ vncserver -kill :2
Killing Xvnc process ID 21201
5. 客户端的连接
去http://www.realvnc.com 网站下载一个 vncviewer ,运行后输入 192.168.1.21:1 即可连接,然后输入 vncpassword,就会出现Gnome图形界面啦:
很不错吧! ^_^ 这样就能够在 Client 端登入 Linux 主机啰~ 而且还可以多人共享呢~真是棒~ ^_^。但是,如果您设定完毕之后, 在登录档老是出现这个咚咚: 『XDMCP fatal error: Manager unwilling Host unwilling』, 就是 /etc/X11/xdm/Xaccess 这个档案的设定需要变更了!
另外,有些朋友一定会觉得奇怪,那就是,为甚么我的 VNC 服务器的 server / client 端画面并不是同步的呢? 这是因为 Linux 本身提供多个 VNC server ,她们是各自独立的,所以当然就不会与 tty7 的画面同步了。 但是如果您想要与 Linux 的 tty7 同步的话,可以利用 VNC 释出的给 X Server 使用的模块来加以设定即可。 如果您是 FC4 这个 distribution 的话,恭喜您,系统预设已经将 vnc.so 这个模块释出了,您可以查阅 /usr/X11R6/lib/modules/extensions/vnc.so 这个文件,即可知道有没有 vnc.so 这个模块。如果您没有这个模块的话, 请参考 http://phorum.study-area.org/viewtopic.php?t=25713 这一篇文章的说明, 依序来设定吧!
[root@linux ~]# vi /etc/X11/xorg.conf (或 XF86Config) Section "Module" .... Load "vnc" EndSection # 在 Module 这个 section 当中加入 vnc 这个模块即可 Section "Screen" Identifier "Screen0" Device "Videocard0" Monitor "Monitor0" Option "passwordFile" "/root/.vnc/passwd" DefaultDepth 16 ...... EndSection # 假设您的 vnc 密码档案放置在 /root/.vnc/passwd 里头, # 这个时候就得要将密码文件内容写到 Screen 这个 section 当中了 |
此时给他重新启动一下 kdm 或者是重新进入 run level 5 的时候,您就会发现多了一个 port 5900 呢,嘿嘿,准备同步登入吧