html tool

2012年6月29日星期五

vnc远程控制linux/windows方法




来源地址:http://bbs.ylmf.net/forum.php?mod=viewthread&tid=1931147



VNC,全称为Virtual Network Computing,它是一个桌面共享系统。它的功能,类似于windows中的远程桌面功能。VNC使用了RFB(Remote FrameBuffer,远程帧缓冲)协议来实现远程控制另外一台计算机。它把键盘、鼠标动作发送到远程计算机,并把远程计算机的屏幕发回到本地。

  VNC技术与平台无关,VNC Viewer可以和VNC Server在不同的操作系统上。VNC几乎支持所有的操作系统,也支持Java,甚至可以通过支持Java的浏览器来访问VNC Server。多个VNC客户端可以同时连接到一个VNC Server上。

  VNC最初由AT&T开发的,它的源代码是开源的。

  1.首先需要配置VNC密码,密码在使用客户端连接服务器时使用。

  注意:VNC密码保存在用户的主目录中,每个用户都可以设置自己的密码。因此,请使用你的用户名(尽量不要使用root)运行下列命令:

  1.vncpasswd

  然后输入密码。

  接下来就可以启动VNC server了。在启动VNC server时,需要为你的server指定一个display参数。你可以把display理解为一个桌面,每个用户都可以有自己的桌面。VNC客户端 在连接时,可以指定连接到哪个桌面上。在系统中,display号不能重复,也就是说,如果有用户已经建立了名为“:1”的display,另外一个用户 就不能再使用“:1”了,他可以使用“:2”。
[popexizhi:测试了一下,这个命令在启动vncserver之后依然可以使用,用来修改vnc的登录密码也是可以的。是否重启之后才生效吗?这个倒是没有测试重启前的效果。这里插一句这里修改的密码在~/.vnc/passwd中查看此密码是密文,嘻嘻,这个不错,不过好奇这个密文是什么加密的?

  启动VNC server的命令是:

  vncserver < display >

  例如:

  vncserver : 1
[popexizhi:这里测试的结果是使用 vncserver 不添加后缀参数可以可以启动,不过看到启动的是全部配置的用户。]
  2.配置一下防火墙
[popexizhi: 这个没有测试过,自己拿到的服务器中没有配置这个内容的。]
  允许VNC客户端连接VNC server。VNC server监听的端口从5900开始,display :1的监听5901,display :2监听5902,以此类推。CentOs的防火墙缺省是不允许连接这些端口的,所以需要使用下面的步骤打开防火墙(需要root权限):

  vi /etc/sysconfig/iptables

  找到下面的语句:

  -A RH-Firewall-1-INPUT -j REJECT –reject-with icmp-host-prohibited

  在此行之前,加上下面的内容:

  -A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport 5900:5903 -j ACCEPT

  这句话的含义是,允许其它机器访问本机的5900到5903端口,这样,display:1, display:2, display:3的用户就可以连接到本机。

  然后使用root身份重新启动防火墙:

  /sbin/service iptables restart

  好了,现在就可以运行客户端软件,连接到VNC server上了。
[popexizhi:首次启动vncserver的连接时,不知什么原因提示失败,本来是想重启vncserver的,但是现在想来是歪打正着重启了一下没有任何配置限制的防火墙,就是/sbin/service iptables restart ,重启后,再启动vncserver就可以了,可能是什么不知道的位置,启动了别的内容,重启防火墙,将那个关闭了。我猜想的,自己也不知道。]

  3.VNC客户端

  VNC客户端软件很多,在linux下有vncviewer,KDE还提供了一个krdc(它的菜单项就是”Remote Desktop Connection”,远程桌面连接)。

  在window也有不少vnc客户端,你可以到http://www.realvnc.com/ 去下载一个,安装就可以用了。

  假设VNC server的IP地址是192.168.1.1,display是:1。在VNC viewer的server栏中输入:“192.168.1.1:1 ”,然后连接。OK,你可以看到自己的桌面了。以后不管你什么时候关闭自己的本地PC机都不怕了,只要server不关机,你只要连接到VNC server,你就可以看到你前一天关闭本地PC机时的桌面还保持着原样。
[popexizhi: linux 中我用的默认是有这个客户端的就没有下载,倒是windows的下载了一个,地址如下:http://www.realvnc.com/download/vnc/latest/ ]

  不过…这个桌面怎么这么丑?!

  原来vncserver默认使用的窗口管理器是twm,这是一个很简陋的窗口管理器,你可以把你的桌面改成GNOME或KDE。

  方法是,进入你自己的home目录,然后编辑这个文件:.vnc/xstartup,下面是这个文件的内容:

  # !/ bin / sh

  # Uncomment the following two lines

  for normal desktop:

  #unset SESSION_MANAGER

  #exec / etc / X11 / xinit / xinitrc

  [

  - x / etc / vnc / xstartup ] && exec / etc / vnc / xstartup

  [ - r $HOME / .Xresources ] && xrdb $HOME / .Xresources

  xsetroot – solid grey

  vncconfig – iconic &

  xterm – geometry 8 0×24 + 10 + 10 – ls – title “ $VNCDESKTOP Desktop “ &

  #twm &

  gnome – session &

你可以把像上面这样把”twm &”这一行注释掉,然后在下面加入一行”gnome-session &”,或者是”startkde &”,分别启动GNOME桌面和KDE桌面。
[popexizhi:这两个桌面我都测试了一下,不错,嘻嘻,都和直接用没有太多的区别。]

  如果server重启了,那你就需要重新运行一次vncserver命令来启动VNC server,这很麻烦。有没有更好的方法呢?

  有!我们可以把VNC server启动成后台服务。执行如下步骤:

  首先要允许VNC server在系统启动过程中被启动。这可以通过“系统设置–>服务器设置–>服务”菜单来配置,把vncserver一项选上就可以了。

  如果使用命令行的话,以root身份运行以下两条命令:

  1.cd / etc / rc5 . d

  2.mv K35vncserver S35vncserver

  然后编辑/etc/sysconfig/vncservers,以下是文件内容:

  # The VNCSERVERS variable is a list of display:user pairs.

  #

  # Uncomment the line below to start a VNC server on display : 1

  # as my ’myusername’ (adjust this to your own). You will also

  # need to set a VNC password ; run ’man vncpasswd’ to see how

  # to do that.

  #

  # DO NOT RUN THIS SERVICE if your local area network is

  # untrusted! For a secure way of using VNC , see

  # .

  VNCSERVERS

  = “ 1:user1 2:user2 3:user3 “

  VNCSERVERARGS [ 1 ] = “ -geometry 1024×768 “

  VNCSERVERARGS [ 2 ] = “ -geometry 1024×768 “

  VNCSERVERARGS [ 3 ] = “ -geometry 800×600 “
[popexizhi:这个自己当时吃了一个亏,第一我直接给root加的,但是user却没有写这个,每次测试启动都抱这个用户不存在,这个最后是手动修改的;还有个问题是这个passwd时是如何指定用户名的自己没有弄明白?!!
第二个问题,是这里的“-geometry 1024×768 ”自己的文件中还有一堆的其他local !@!@#¥¥#%¥#%,在后面,是什么自己也记不清了,稍等,我用vim调整的,我还原一下试试去,找到了,我的是如下:
VNCSERVERARGS[1]="-geometry 800x600 -nolisten tcp -nohttpd -localhost"
当时没有调整,如何启动远程都是连接不上,但是使用手动vncserver 启动就可以连接上,这个问题我最后感觉是这样的参数是在本地启动的意思,但是没有细查,改成“-geometry 1024×768 ”就ok了,这里要继续去go的两个问题:
a.关于-localhost的使用是否是本地才可以使用
b.手动vncserver不使用这个配置文件的参数吗?
]
  解释一下这个文件:

  VNCSERVERS这一行是配置在系统启动时启动几个VNC server,上面的例子里运行了三个VNC server,其中user1在display :1,user2在display :2,user3在display :3。

  VNCSERVERARGS这三行,分别为VNC server 1, 2, 3配置启动参数,上面的例子里对user1和user2使用屏幕分辨率1024×768,对user3使用800×600。

  其它支持的参数请使用“man vncserver”命令查询。

  编辑好这个文件后,保存,然后以root身份运行:

  /sbin/service vncserver start

  这样user1, user2, user3的vncserver就启动了。

  以后每次系统重启时,都会自动启动这三个用户的vncserver。

  注意:上面三个用户必须已经使用vncpasswd命令设置过vnc密码,不然他的vncserver启动会失败!

  使用VNC View远程访问Linux,总是没有办法切换出SCIM输入法,研究了很久,终于让我找到了解决 方法 。

  1)修改.vnc/xstartup文件,在最后一行加入:scim -d,意思为打开SCIM输入法

  2)使用VNC View访问Linux系统以后,修改scim输入法的快捷键,因为默认打开输入法的快捷键为ctrl+space,与本地机器上切换输入法的快捷键冲 突,系统 会先接收到本地的命令,所以没办法使用默认快捷键打开输入法。将打开SCIM输入法的快捷键修改为Ctrl+Alt+Space。

[popexizhi:《后记》安装vnc的初衷是想在服务器上打击虚拟机软件,测试用的,现在vnc安装后,好像.6的版本太低,要升级系统版本否则v-box不可以安装,
关于这个部分分析如下:
[thinking]
本来想在.6上搭建虚拟环境,但现在看来,.6的os版本是redhat 3,现在可都是4,5,6了,virtualbox的最低版本支持到redhat4.
自己现在的选择是,
1.在44服务器上搭建环境,.6上安装别的内容
2.升级.6的系统版本到可以支持的内容上(.6上跑着的其他的应用不知是否会被升级系统内核影响,这个可以尝试,但有风险,风险大小要评估一下再考虑)
3.在.6上寻找别的虚拟机软件支持的使用(这个可以长期考虑,加入[next])

当前计划使用1方案继续

而vnc的配置过程倒是只是可以告一段落了,所以总结一下。ok了:),发现自己要做只是三次以上,才对这个过程有轻车熟路的feel体验,记录一下,为以后使用吧!]

没有评论:

发表评论