自从给项目组每个人开了一个 Xen VPS 后麻烦就不断,一会儿要求加硬盘, 一会儿要求加内存,还有人想在上面跑图形桌面,完全不顾 VPSee 的业余时间:(,昨晚简单测了一下多个 Ubuntu 9.04 桌面系统同时运行在一个服务器上(用 Xen 虚拟化)的情况,速度还可以,比想像的要好。主要时间都浪费在配置上,比如配置 FreeNX、VNC 等,网上教程都不全,用了不少时间排错。这里介绍 Mac 通过网络远程访问 Ubuntu 桌面的常用三种方法,最好的方法应该是用 FreeNX,安全而且速度快:
X11
这是最简单最方便的方法,不需要在 Ubuntu 端做任何配置,不过在 Mac 端必须已装有 X11,在 Terminal 上敲(把 ubuntu 换成对应的服务器 IP 地址或域名):
$ Xnest -geometry 1280x800 :1 & DISPLAY=:1 ssh -X ubuntu gnome-session
FreeNX
上面用 X11 forwarding 的方法虽然很简单,在局域网内用用还可以,如果想在 Internet 上连一个远程桌面的话就不合适了,速度很慢。FreeNX 有安全、速度快、功能强等优点,尤其适应网络环境恶劣的情况。按照 Ubuntu 的一篇帮助文档:FreeNX执行如下步骤:
$ sudo vi /etc/apt/sources.list
deb http://ppa.launchpad.net/freenx-team/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/freenx-team/ppa/ubuntu jaunty main
$ sudo apt-key adv --recv-keys \
--keyserver keyserver.ubuntu.com 2a8e3034d018a4ce
$ sudo apt-get update
$ sudo aptitude install freenx
$ sudo /usr/lib/nx/nxsetup --install
下载一个 Mac NX 客户端连接服务器报错,查看日志后发现 authenticate 没通过,怀疑是 SSH keys 问题:
The NX service is not available or the NX access was disabled on host 172.X.X.X.
在 NX 服务器端修改 sshd_config 文件:
$ sudo vi /etc/ssh/sshd_config
AuthorizedKeysFile /var/lib/nxserver/home/.ssh/authorized_keys2
$ sudo /etc/init.d/ssh restart
在 NX 客户端把 /var/lib/nxserver/home/.ssh/client.id_dsa.key 文件拷贝到客户端后,用 NX 客户端工具导入。NX 客户端再次连接 FreeNX Server,依然报错,不过错误信息变了:
NX> 103 Welcome to: ubuntu user: root
NX> 105 listsession –user=”root” –status=”suspended,running” –geometry=”1440x900x32+render” –type=”unix-gnome”
mktemp: cannot create temp file /tmp/nxserver_tmp.rQAHzfLbK: Permission denied
/usr/bin/nxserver: line 273: $TMPFILE: ambiguous redirect
…
显然是 /tmp 权限问题,这个问题很容易解决:
$ sudo chmod 777 /tmp
再次连接,终于看到了 Ubuntu 桌面,如果你不需要太高的安全性,到这里就可以结束了,enjoy it.
上面的连接使用的是默认的 SSH Keys,会带来安全隐患,如果需要更高的安全性可以用自己定制的 SSH Keys,重新配置:
$ sudo dpkg-reconfigure freenx-server
上面命令会弹出对话框,选择 ”Create new custom keys” 后,会在 /var/lib/nxserver/home/custom_keys/ 下创建一个 client.id_dsa.key 文件,把这个文件拷贝到 NX 客户端,然后在客户端导入这个 Key 文件就可以正常连接 FreeNX 服务了。如果 key 通过了认证,可以在服务器端和客户端删除这个 key 文件。
VNC
还有一种古老的方法就是使用 VNC,和 FreeNX 相比VNC 速度较慢,因为 FreeNX 是将 X Window 的数据压缩后传输到远程客户端显示,而 VNC 则是直接截取屏幕后传输过去,在较差的网络中这种延迟和速度差异很明显。先在 Ubuntu 上装一个 VNC Server:
$ sudo apt-get install vnc4server
$ vncserver :1 -geometry 1024x768 -depth 16
然后在 Mac 上装一个 VNC Viewer(推荐 Chicken of the VNC)就可以连上 Ubuntu,不过这个时候看到的是 X Window 界面,不是 Ubuntu 桌面,在 X Window 中手动启动 Ubuntu 桌面:
$ gnome-session &
如果不想每次都手动的话,在当前用户目录根目录下修改 ~/.vnc/xstartup:
$ vi ~/.vnc/xstartup
# twm &
gnome-session &
$ sudo shutdown -r now
$ vncserver :1 -geometry 1024x768 -depth 16
重新启动 Ubuntu 并打开 VNC Server 服务,用 VNC 客户端连接就可以看到 Ubuntu 图形桌面了。