使用SSH的X11 Forwarding远程执行GUI程序

前言

你知道如何将远程linux GUI程序的图形界面展示在本地Window中吗?大家都知道jdk自带的jvm监控工具jvisualvm,可以在本地打开jvisualvm,连接到远程linux服务器上的jvm,监控生产环境jvm的运行情况,包括线程,cpu,堆内存/永久代,gc等信息,貌似一切都很不错,但是jvisualvm工具有个限制,只有在监控本地的jvm才可以使用内存抽样功能,内存抽样功能能够清晰的显示每个类创建实例的个数以及所占内存的比率等信息,有些时候对排查问题很有帮助。所以,如果jvisualvm监控远程linux服务器上的jvm,我们是使用不了内存抽样功能的,本篇文章并不能教你解决本地监控能够使用内存抽样功能的问题,但是我们可以通过工具来绕开这一问题,达到使用内存抽样功能的目的。

X11 Forwarding

Linux下执行一个GUI程序通常需要两个部分来协调完成,X server与X client。X server是专门负责显示用户界面的,它管理你的显示器,键盘以及鼠标,通常你看到的桌面系统即是由它在背后驱动的,X client则负责程序的逻辑,如果需要使用用户界面,则通过给X server发送请求来完成。通常情况下,X server与X client都运行在同一台机器上,例如我们在Window上运行任何GUI程序都是这样的。但因为X系统当初设计成是通过socket在X server与X client之间通信的,所以它们也可以运行在不同的机器上。
X11 Forwarding就提供了一个方法,在远程机器上执行X client程序(如Eclipse),但是在本地机器上显示(即运行X server)。

环境安装

  1. 本地下载安装Putty
  2. 本地下载安装Xming

    Putty是一个和Xshell,SecureCRT类似的SSH Client,但是与Xshell不同的是,
    Putty和secureCRT支持X11 Forwarding功能,这里我们选择使用Putty。

    Xming类似一个远程桌面展示工具,可以实时展示远程linux服务器GUI图形界面,方便我们在本地操作的一种X server。

    Putty下载地址:http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
    Xming下载地址:http://sourceforge.net/projects/xming/
  3. 在远程linux服务器上安装xauth

    yum install xauth
  4. linux服务器配置ssh支持X11 Forwarding

    vim /etc/ssh/sshd_config
    加上如下配置:X11Forwarding yes
    ps:一般默认就是开启的则不用执行4,5步骤
  5. 重启sshd服务

    service sshd restart

具体使用

  1. 打开Xming
  2. 打开Putty并修改配置
    image
  3. 输入用户名/密码连接SSH服务器
  4. 进入jdk安装目录,执行./jvisualvm
    image
  5. 这个时候本地的Xming就会被唤醒,显示远程的图形界面
  6. 然后我们就可以像操作本地一样操作远程图形界面进行监控了
    image

参考链接

  1. http://courses.cms.caltech.edu/cs11/misc/xwindows.html
  2. http://en.tldp.org/HOWTO/XDMCP-HOWTO/ssh.html