使用XDMCP来远程连接你的Linux图形

 

9月13日
使用XDMCP来远程连接你的Linux图形桌面!

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 呢,嘿嘿,准备同步登入吧

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值