Linux 远程桌面 VNC server

2009-12-23 Sa , ,
Linux服务器系统一般都运行在Runlevel 3下,图形界面资源消耗比较多,但是有些时候,图形界面下配置相对简单,如配置打印服务器,如果在命令行下可能要写很多配置文件,但图形界面下仅仅需要点几下鼠标就可以实现,还有些软件如Oracle11g安装也要求有图形界面支持,服务器一般放置在机房,进机房接显示器不太现实,这时候就需要VNC来帮忙了.
标准的linux发行版一般有两个vnc相关的软包,一个是客户端程序(vnc),一个是服务端程序(vnc-server),在这里以RHEL 5.3为例
系统登陆用户都可以为自己启用VNC远程桌面,直接执行vncserver命令以启动vncserver,首次运行时会提示设置密码.
# vncserver
You will require a password to access your desktops.
Password:
Verify:
xauth:  creating new authority file /root/.Xauthority
New 'localhost.localdomain:1 (root)' desktop is localhost.localdomain:1
Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/localhost.localdomain:1.log
系统会依次为每个用户分配display_no,默认从数字1开始,如:user1首先执行vncserver命令,系统将会为其分配显示号1,后面的用户运行vncserver后,得到的显示号依次为2…n,vncserver也会监听相应的端口,标准vnc客户端连接监听端口始于{5900 + display_no},基于web的客户端连接端口始于{5800 + display_no},vncserver将会依次打开,注意iptables 里要允许这些流量通过.
默认情况下VNC客户端登陆后只能看到VNC Server内置的twm图形管理器,实在是有点丑,要想使用Gnome或kde桌面还必须取消$HOME/.vnc/xstartup 文件中的两行配置的注释
unset SESSION_MANAGER
exec /etc/X11/xinit/xinitrc
按以上的设置,系统重启后vnc服务就关闭了,要想系统重启还能启用相应用户的远程桌面,就必须要配置文件中指定,并且将vncserver服务设置成随机启动
chkconfig vncserver on
编辑vnc配置文件/etc/sysconfig/vncservers
加入以下配置,如果要启用多个用户的VNC桌面,注意显示号不能重复.
VNCSERVERS="n:username"
VNCSERVERS[n]="-geometry 800x600"
n:username,阿拉伯数字'n'是标识,vnc中称之为display_no,用于后面的参数指定和相应VNC应监听的连接端口(VNC客户端连接{5900 + n},WEB客户端连接{5800 + n}),username为用户名,表示username用户的桌面.
配置参数
-nolisten tcp 阻止使用X Window,因为我们就是要使用图形界面,所以去掉了这项
-nohttpd 阻止来自基于WEB的VNC客户端连接,如浏览器
-localhost 只允许本地VNC连接,vnc安全性较低,所以默认只允许本地连接,所有要在公网上使用VNC,最好有一个安全连接来保证,如SSH/×××

其它相关命令
vncpasswd 修改vnc桌面登陆密码,vncpasswd默认修改 $HOME/.vnc/passwd 中密码,当然root用户也可以指定文件来修改指定用户的vnc密码.例如,vncpasswd /home/user1/.vnc/passwd
vncviewer Linux下的VNC客户端,windows下常用的是RealVNC
vncserver的其它参数,看下面的帮助,这里用的较多的是vncserver -kill :display_no,结束指定显示号的远程桌面[display_no前有个':'号]
# vncserver --help
usage: vncserver [:<number>] [-nohttpd] [-name <desktop-name>] [-depth <depth>]
                 [-geometry <width>x<height>]
                 [-pixelformat rgbNNN|bgrNNN]
                 <Xvnc-options>...
       vncserver -kill <X-display>
 
 
服务器如果设置了防火墙,那么需要开一些端口,这样才能在服务器开启防火墙的时候,也能够连接VNC服务器。由上面红色字的部分我们可以得出,如我们在客户端用VNC client等工具连接,我们只需要开放5900+n(n是显示号,我们在输入vncserver的时候,最后启动就能显示出来------主机名:n)
iptables设置为:
iptables -I INPUT -p tcp --dport 5900:590*  -j ACCEPT(n为你最大的VNC连接号)
service iptables save