• CentOS使用VNC查看X11图形界面窗口

    上篇文章《CentOS在SSH中运行GUI图形界面程序》提到了怎么在SSH中转发X11窗口,但是在实际应用过程中,特别是网络不好的时候,往往会发现SSH的X11转发速度很慢。而如果我们能在服务器中启动一个VNC服务,通过连接服务器提供的VNC来查看窗口内容,则在网络不好时仍能有比较流畅的远程窗口界面。

    我的CentOS服务器是通过SSH连接,而且没有安装图形窗口的,即Headless System。因此我决定使用x11vnc和Xvfb两个轻量级的应用来实现我的需求。其中,x11vnc是一个VNC服务程序,本身就比较轻量级,因此对于只需要运行一两个图形界面窗口程序的轻量级需求就更加贴切了。我们知道,在Linux中显示窗口,首先要创建一个display服务。而Xvfb就是一个轻量级的,不产生实际屏幕输出的虚拟display服务程序。因此整个方案的原理是,Xvfb创建display,x11vnc连上去并转换成vnc协议。

    首先,安装必要组件:

    yum install xorg-x11-xauth xterm libXi libXp libXtst libXtst-devel libXext libXext-devel

    接着安装x11vnc,脚本如下:

    wget http://softlayer-ams.dl.sourceforge.net/project/libvncserver/x11vnc/0.9.13/x11vnc-0.9.13.tar.gz

    tar zxf x11vnc-0.9.13.tar.gz

    cd tar zxf x11vnc-0.9.13

    ./configure --prefix=/usr/local/blog.creke.net/x11vnc

    make

    make install

    然后我们通过yum来安装Xvfb,脚本如下:

    yum install Xvfb

    然后通过x11vnc的一条简单的命令就可以很简单地把Xvfb也使用进来了,如下:

    /usr/local/x11vnc/bin/x11vnc -rfbport 12345 -passwd 连接密码 -create -forever

    运行起来后,用vnc客户端链接服务器12345端口,输入正确的密码就可以看到终端窗口了。而在终端中启动窗口程序,也能够在VNC中直接显示出来了。如果希望在登出SSH后窗口还能用,则可以在screen中运行上面的脚本。如果希望多个人能够同时连进VNC,可以加上“-shared”参数。具体的详细参数说明参阅x11vnc参数说明文档