Linux的远程桌面主要分两个部分:Linux客户机连Linux服务器和Windows客户机连Linux服务器,还有现在用平板电脑连远程桌面。Linux客户机连Windows服务器比较简单没啥可说的,rdesktop和termianl server比起windows自带的“远程桌面连接”,不说好很多,至少是毫不逊色的。我们知道,Windows的非服务器版可以支持远程桌面,不过远程一登录,原来机子上要是有人在用,就会被注销;而Windows服务器版是默认只支持两个用户,对多用户远程登录也支持要付费的,或者就只能享受4个月的的试用,再或者就是自己破解了。自由而免费的Linux任意版本都是可以自己配置的,因此远程桌面想怎么登就怎么登,只要机器性能允许,甚至同一用户登无数个都可以的。Linux系统大部分在网络上做服务器,一般服务器是不开图形界面的,一方面是性能和稳定性的考虑,另一方面是管理这些服务器的人技术能力比较强,所以不太用图形界面管理服务器的。不过现在Linux的桌面用户越来越多,喜欢用图形界面登录到Linux机器,尤其是跨平台远程登录Linux桌面环境使用的需求越来越多。

下文中会提供很多方案,我将从最基础的X服务器讲起,先讲不借助其它客户端软件,而仅仅用X服务器来登录远程服务器的方式,再讲使用安全简单方便的SSH协议支持的X转发,接下来是XDMCP协议,这部分中间介绍一些开源软件客户端,然后是使用SSH结合XDMCP的安全远程登录,再接下来是使用SSH+Xephyr的无需DM的登录方式,再然后是VNC协议方式(可以登录已经打开的界面,但是效率比较低,且安全性不好,最好配合ssh隧道使用),最后是简单介绍界面最友好、功能最全面的闭源个人免费软件Splashtop和NX。由于我日常用的就是Ubuntu,下面的有些例子都是以Ubuntu例,不过Linux原理都是一样的,希望对所有用户都有所帮助。

Linux连Linux

Remote X 

我们现在用的桌面Linux系统一般都是默认装了X windows 系统。X windows系统设计的最初,就考虑了网络的情况,它的客户端(X Client,就是通常的图形应用程序)和服务器端(X Server)是分开的。你机器上X服务器上执行的是本地的还是远程的图形界面,是没有分别的,只是后者要通过网络协议传输到本地。SSH协议、XDMCP协议以及VNC协议都是传输数据的网络协议,远程服务器上的X Client(比如说gdm)把它的输出通过网络协议传送到客户机上,客户机上的X Server在本地接收(并显示)图形界面。


我们先说在本机上多开几个图形界面吧,不是当前界面下建图形窗口,而是在其它控制台下创建图形界面,简单总结下是这样的:


A.   在第p个控制台开个编号为n的图形界面(需要root权限): X :n vtp


B.  设置DISPLAY变量: export DISPLAY=localhost:n


C.  现在你运行的图形应用程序就会在第p个控制台上的图形界面上运行了;


查看第p个控制台,按Ctrl+Alt+Fp切换(p=1~12),一般Linux系统默认1~6是文字界面,7~12是图形界面。


那么,为什么不能在本地控制台下多开个图形显示界面,用于执行远程服务器的图形界面呢?


翻了几个帖子,与在本地几乎是类似的:


A.   在客户机上第p个控制台开个编号为n的图形界面(需要root权限): X :n vtp


B.   在客户机上执行:xhost + 服务器IP;


C.   远程登录到服务器:ssh 或才telnet等都可以;


D.   设置远程服务器的DISPLAY变量:export DISPLAY=客户机IP:n ;


E.   然后在远程服务器运行xterm之类图形应用程序,就会在客户机上显示。


这种方式是比较古老的了,B 是用xhost作ip控制,据说ip是比较容易伪造的,所以这个东西很不安全。


由于Ubuntu是Debian一系的,于是把客户机/etc/X11/xinit/xserverrc中的-nolisten tcp去掉,同时还把gdm的配置文件/etc/gdm/gdm.schemas中的security/DisallowTCP关健字的值改为true了,重启X。SSH到服务器后,export DISPLAY=客户机IP:0.0,可以在从当前的这个会话中显示远程图形应用程序,和下面要说的ssh -X的效果似乎一样了。但是自己用sudo X :1 vt12开的界面还是没法显示远程图形应用程序,而且这样的配置按参考的网页上的说法,也是有安全风险的,还是改回去了。


所以,对于这个Remote X,我还是没完全搞定,但是这个东西是最基础的原理,明白多少得说多少。(按照网页上的说法,我觉得问题可能出在权限问题上,接下来要研究下.Xauth和.Xauthority)


SSH的X转发

最简单最安全的方式要属SSH的X转发,而且用它可以实现后面的XDMCP转发,如果SSH是配好了无密码访问,这个更是爽得很啦。


ssh -X 用户名@服务器IP  #这个时候就可以运行服务器上有图形界面的程序了;

我用过直接gnome-panel(最好不要gnome-session,可能会出问题哟),它会菜单替代成远程服务器的菜单,但是窗口选择器里会有你自己机器上正在运行的程序,这个就可以看很多事了。如果你只执行一条命令,还可结合ssh可以远程执行命令的功能直接开某个程序,比如:ssh -X 用户名@服务器IP -n gnome-panel

我不知道OpenSSH是不是不支持开一个窗口或在其它控制台开一个图形界面去执行远程的图形界面,要是那样的话,我们就可以不用不怎么安全的XDMCP协议了(在相对安全的局域里,追求速度的时候还是能用到的)。


XDMCP

全称是X Display Manager Control Protocol,也就是X显示管理器控制协议。

服务器如果是最新的gdm,修改/etc/gdm/gdm.shemas(老版的在/etc/gdm/gdm.conf),改含xdmcp/Enable那段中的false为true,然后重启gdm就可以了。

而对于客户端,就有很多选择了


X命令登录

以X做客户端,由于现在的X Windows系统基本都是默认安装的,所以我们可以说等于什么也不用装,只用命令就可以远程图形界面连接到服务器上:

sudo X :1 -query 服务器IP ,这个正是利用了前面说到的X服务器的功能,在其它控制台新开一个图形界面去显示远程服务器的图形界面。当然我们采用其它图形客户端也是可以的了。这些客户端一般是会开一个窗口,而不是在其它控制台去建一个显示界面。

使用Xnest

sudo apt-get install xnest  然后“终端服务客户端”(也就是tsclient,装了gnome这一套东西应该是默认就有的)里看到xdmcp协议是可以选的了,填IP,连接再选用户填密码就可以了;在客户机中命令行下也可以使用:Xnest :1 -query -reset -terminate 服务器IP (reset 和terminate不要也可,最好加上)

Xephyr

其实Xephyr 比Xnest 更好,它支持OpenGL的,所以远程桌面如果有3D特效还有3D游戏都是能在Xephyr 窗口中显示的,而Xnest不行。Xephyr 有很多开发者在用,因为可以当成一个桌面模拟环境来用,测试各种窗口管理器、图形界面。


安装:

sudo  apt-get install xserver-xephyr  用法与Xnest是类似的:

Xephyr :1 -query -reset -terminate 服务器IP

SSH+XDMCP

XDMCP 好像密码是明文传送?那么采用ssh的X转发,转发服务器本地的XDMCP协议到客户机,这样就实现了安全的XDMCP远程登录。由于X命令是要root权限,以及前面的用export DISPLAY的方法把远程服务器图形界面传递到本地显示有问题,这里就只有用其它客户端的办法了。这样的话,需要远程服务器安装 Xephyr 或 Xnest。


客户机:ssh -X 用户名@服务器IP 登录到远程服务器;然后在远程服务器上执行:Xephyr :1 -query localhost  Xnest :1 -query localhost ;

也可以直接把登录和执行放一起:ssh -X 用户名@服务器IP -n Xephyr :1 -query localhost  (或Xnest :1 -query localhost)。

SSH+Xephyr

Xephyr 本来是用来给虚拟机使用的一个软件,能在本机上开多个窗口用来测试各种界面,不用Ctrl+Alt+Fn切换来切换去的。除了部分开源的NX,我发现使用开源软件最简单的远程登录方式(在SSH配置好的情况下),应该是下面这种 SSH+Xephyr 的方式了,服务器只要配好SSH,其它的都在客户机中进行:


Xephyr -fullscreen -host-cursor -reset -terminate -ac :2 > grl.log" &
ssh -X usrname@hostname -n gnome-session --display=myip:2   
#myip写的是自己的IP地址;


写到脚本里面,使用起来很方便,这是笔者目前最喜欢的方式。喜欢它的主要原因是:不用输密码(SSH已经配置好了密钥,不用密码;如果再用XDMCP协议,就还会有个登录界面,要输密码),也是在当前图形界面下开一个图形窗口的方式,不用切换控制台了。相对于NX,它是开源的。给Xephyr 写个界面,结合 ssh,应该可以做个很好的Linux远程客户端。


但是这种方式,不是通过gdm这样的窗口管理器登录,有时会出些小问题,比如说桌面右键用不了什么的,特别可能在Ubuntu这种系统,很多软件默认配置为了用户的易用性已经做过很多集成的话。事实上ssh+Xephyr+XDMCP的方式可能更好些。


VNC

VNC协议是截取当前桌面的图形,传送给远程客户端,效率安全性都不是很好,时常在局域网里都会卡;另外它会显示给当前在用的这个帐户的用户在干什么,而且两个人对鼠标和键盘都有控制权,会有冲突。不过当你需要的就是对当前已经打开的图形界面进行操作时,这种方式无疑就很有用了。Ubuntu下默认带有vnc服务器vino-server,在 系统-->系统管理-->远程桌面 里设置它,注销(重启gdm)就行了。而客户端也是默认有的,系统-->互联网-->远程桌面查看器 就是了。


推荐使用x11vnc,初级用法挺简单:

x11vnc -display :0 -passwd ***** 就能登录当前的:0图形界面了(一般情况下默认的图形界面)。


使用ssh 隧道来加密更安全:


ssh -t -L 5900:localhost:5900 user@remotehost 'x11vnc -localhost -display :0' &


ssvncviewer localhost:5900


Splashtop和NX

Splashtop及TeamViewer

之前我一直觉得NX是Linux下最好的远程桌面软件,虽然是闭源的。但是现在情况有所改变,随着平板电脑的兴起,出现了一些远程桌面软件,笔者接触到的有TeamViewer和Splashtop,它们在效率上可能比NX更好,支持的其它系统的客户端也比较全,甚至平板电脑使用Linux远程桌面,还能听音乐、看电影。

Teamviewer和Splashtop一样,两者都是商业软件,但是都对个人用户免费。它们都是要注册一个帐户,然后你需要在联网的情况下登录这个帐户,就可以看到你的多台PC。随便你走到哪儿,只要安装并打开了它们的服务器的PC都可以看到,你可以选择登录自己想要使用的PC。这种多台PC的管理要通过这些私有软件的官方服务器,给安全性带来一定问题。要是像Owncloud那样,能自己架设一个管理服务器,而不用通过它们官方的服务器,无疑还是有点意思的,这样的开源版本无疑可以作为一个努力方向。不过像邮件服务一样,有了强大免费的gmail之类的提供商,这年头个人谁还自己去架设自己的邮件服务器。


Splashtop是用python结合原生库来做,效率要高一点,而TeamViewer中间有用到wine,就笔者的使用体验来说,确实网络传输效率没这么高。所以笔者更推荐Splashtop,虽然目前而言Teamviwer支持的Linux系统更多,而Splashtop只支持Ubuntu 12.04以后的版本。


Splashtop的服务器版本叫Splashtop Streamer,客户端版本有很多,普通用户选择个人版本就可以了。Splashtop已经开始在Ubuntu的应用中心集成了。不过Splashtop的Linux版客户端目前还是beta版,最多只支持1024x768的分辨率,用起来远不如平板电脑版本的好!!!

NoMachine NX

虽然比不上Splashtop,NoMachine NX 界面很友好,使用上比Splashtop简单的、功能也比较完整。相对于Splashtop,它是老牌的Linux远程桌面软件,NoMachine公司的NX的免费个人版本可供使用,甚至还有一个开源的NX协议的实现FreeNX、NeatX。NX协议比VNC协议效率要高不少,所以远程桌面也很流畅(虽然达不到splashtop能看电影的那种程度)。它有开源的替代版本NeatX和FreeNX,也使用了SSH进行加密(也可以选不加密),不过它采用的私有的SSH系统。


网址下载:http://www.nomachine.com/select-package.php?os=linux&id=1


服务器端安装nxclient,nxnode,nxserver三个软件包,客户端只安装nxclient就可以了。


nxclient 是有图形界面的,很容易使用,就不多说了。而nxserver安装后就立刻启动,而且每次开机会自动启动,所以什么都不用操心。它是可以保持图形界面在服务器上运行的,这个功能是挺好的。但是也要注意,如果你不想要这样的时候,确定你不是关掉它(Disconnet)而是结束这个会话(Terminate)。设置中看还有支持多媒体的选项,但是我设置了,只能听到远程服务器用户登录或注销的声音。


关于开源的FreeNX和NeatX,可以参考:


http://www.vpsee.com/2009/09/remote-access-to-ubuntu-desktop/ http://freenx.berlios.de/


https://code.google.com/p/neatx/

Windows连Linux 

VNC


VNC是由AT&T试验室开发,是一款优秀的远程控制工具软件,后来以GPL授权的形式开源。经过几年的发展,现在的VNC已经不单指某个软件,而是一类软件的通称。VNC的原理就是不停的对窗口界面截屏,再将图像传输给客户端,同时VNC服务器端接管服务器端的键盘、鼠标控制权,客户端可以通过服务器端操纵键盘鼠标。比较类似Windows下的pcAnywhere。

先讲Windows端,下述的两个VNC可以用同一个客户端连接。在Windows平台上,客户端我选择了RealVNC。RealVNC包括了一整套的服务器端与客户端,如果只安装客户端是不需要注册码的,其客户端程序名为vncviewer.exe,这是个绿色软件,你可以从安装目录下拷贝到其他电脑中运行。

下面介绍Linux下常用的两个VNC软件。


Vino


VINO是Gnome中集成的一个VNC软件,安装Gnome环境时默认安装,点击“系统”-“首选项”-“远程桌面”就打开了其配置窗口。选中“允许其他人查看您的桌面”后VINO就会启动服务器端进程vino-server,同时它监听TCP 5900端口。如果不选中“允许其他用户控制您的桌面”,客户端则只能观看不能操纵。
VINO的模式与下面介绍的XVNC有很大不同,我觉得VINO其实是“Windows下的远程协助”,因为客户端显示的桌面与Linux端本地显示器中显示的桌面一样,如果你操纵客户端中的鼠标,Linux的显示器也能看到鼠标在跑。如果你在Windows下安装过VNC服务器端,效果就是这个样。
另外,VINO的带宽占用真是变态,就算是一进桌面什么都不打开无操作的情况下,带宽也要占到4-5Mbps(桌面1280×1024,色彩24),如果有操作会占到8-12Mbps。所以,VINO不适合做为服务器的日常远程管理,比较适合做为Linux下的远程协助和远程教学,也就是说你遇到一个问题,求助高手,而高手可以手把手的教你,你可以直接观看屏幕学习,或者做故障重现,你在本地做故障或Bug重现,而工程师可以远程观看。


XVNC


XVNC 就是大家所熟悉的vnc或vncserver,是由RealVNC公司开发的开源版的VNC软件。




1、XVNC安装


安装Linux时,可以从安装包中选中。若没有安装,可以从安装盘中找到。服务器的组件名叫 vnc-server。请执行 rpm -q vnc-server 这个指令查看是否安装;假如服务器未被安装,请用这个指令来安装它:yum install vnc-server。




2、启动vncserver


在终端中输入: vncserver :1 -geometry 1280x1024 –depth 24  # :1指1号窗口,-geometry指窗口分辨率,-depth指色彩数;也可以简单的指定: vncserver :1  #使用RealVNC的客户端,窗口分辨率与色彩数可以在客户端指定;
当你第一次启动vncserver时,会要求指定密码,该密码是VNC客户端连接时要输入;窗口可以从0开始指定,如果Linux本地端已经启用图形环境,则必须从1开始指定,因为窗口0被X11占用。




3、配置xstartup


XVNC默认采用twm做为图形环境,如果你安装了KDE或Gnome也可以启动。
vi ~/.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 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
twm &
 
最后一行twm &表示启动twm,修改成gnome-session & 即启动Gnome,修改成startkde & 即启动KDE。
如果Linux本地端已经启用Gnome或KDE图形环境,当VNC客户端连接服务器后,可能会只显示灰屏,没有正常启用图形环境。查看~/.vnc下的日志时会提示错误:You are already running a session manager。这时还需要修改 xstartup 文件中的: 
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc
去掉这两行前的#,再重启vncserver。如果Linux本地端是init 3模式,则不需要修改这两行。一般vnc客户端连接服务器时显示的界面是英文的,主要是中文环境还没有装入,而且没有中文输入法,这是可以在 # exec /etc/X11/xinit/xinitrc 行后添加下面内容:
export LANG=zh_CN.UTF-8  注:启用中文环境 
scim –d                                     注:加载scim输入法
 


4、关闭 vncserver


vncserver –kill :1  注:关闭窗口1,以此类推关闭窗口2就为:2,当所有窗口都关闭vncserver服务就关闭了。


5、VNC客户端使用


XVNC不仅支持vncview等客户端程序,还支持浏览器控制。浏览器直接输入地址 http://IP:5800,就会启动Java客户端连接。
窗口0占用TCP 5900端口(VNC客户端),TCP 5800端口(浏览器);
窗口1占用TCP 5901端口(VNC客户端),TCP 5801端口(浏览器);
窗口2、3以此类推;
 


6、开机自启动vncserver


上面的操作都是要先登录Linux端,然后手动启动vncserver服务后,才能使用VNC连接。如果你想开机自启动vncserver服务,必须这样做。先按上面的步骤启动一次 vncserver,确保密码和xstartup文件都建立了。然后, vi /etc/sysconfig/vncservers,添加如下内容:
VNCSERVERS="1:root 2:zhang 3:li"  
注:1、2、3代表窗口,比如root用户用窗口1,zhang用户用窗口2,这里的用户是指Linux中的正规的用户帐户
VNCSERVERARGS[1]="-geometry 640x480 –depth 24"  
注:为root用户指定分辨率和色彩数,这里的[1]指上面的“1:root”
VNCSERVERARGS[2]="-geometry 640x480 –depth 16" 
 注:为zhang用户指定分辨率和色彩数 
VNCSERVERARGS[3]="-geometry 800x600"
注:上面的这三行可以不添加,由vnc客户端自行控制分辨率和色彩。


上面的root、zhang、li用户必须确保密码和xstartup文件都建立了,你可以分别登录先执行一次vncserver :1。最后执行 /sbin/chkconfig vncserver on指令。
  


7、VNC安全


XVNC的数据传输都是明文的,因涉及服务器的管理,使用明文是不可接受的。我们可以使用SSH加密VNC数据。
首先,开启Linux端的SSH服务。
第二,在Windows端下载一个SSH telnet工具,推荐的有PuTTy,SecureCRT。
第三,启用SSH隧道。


下面以SecureCRT为例,PuTTy操作类似。先建立一个连接到Linux端的普通SSH会话。在该会话选项中“端口转发”中,添加“本地端口转发属性”。在“本地”中输入一个端口,这里选择了5901,也可以选择5801或其他端口,只要不与本地的服务相冲突,这个本地端口与Linux中vncserver监听的窗口端口无关,在“远程”中输入5901,这个端口是Linux端的vncserver监听的端口,这里是启动窗口1,如果启动窗口2则这里要输入5902,确定。设置完后在SecureCRT中启动与Linux的SSH会话,正确登录Linux后打开vncviewer,在VNC服务器栏位中输入:localhost:5901 (这里的端口就是上面指定的本地端口,而非Linux端的端口),因为这里要连接的是本地的SecureCRT启动的SSH隧道。在VNC运行过程中SecureCRT不能关闭。这样,在Linux端的防火墙就可以只开放SSH端口,关闭掉有关VNC的所有端口。


8、结论


XVNC是一个非常好的日常用服务器管理工具,你可以根据你的网络带宽调整画质,如果你的带宽偏小,可以调小分辨率与色彩数,XVNC无操作时基本没有数据,如果是800×600分辨率,最差画质,它只会占几百Kb甚至十几Kb的带宽,这一点上非常适合做服务器管理。


XManager


XManager是一个简单易用的高性能的运行在Windows平台上的X-Server软件,而Gnome和KDE就是X-Client,Linux下的X-Server则为Xorg。它能把远端Unix/Linux的桌面无缝地带到你的Windows上,甚至当你的电脑是在内网或防火墙后,你也能通过SSH协议安全的运行远端的X应用程序。特点包括: 
-可通过Xcongfig工具设置多个Xmanager设置; 
-支持多用户的Windows终端环境; 
-支持多个IP地址; 
-支持本地资源数据库; 
-通过热键转换键盘映射; 
-支持多窗口下的Windows打印功能等。 


XManager的原理


X-Window并没有规定X-Server与X-Client必须工作在同一台电脑上,所以X-Server可以工作于不同的电脑,而XManager就是Windows平台下的X-Server。XManager与X-Client之间用XDMCP协议相连,Linux端的响应由显示管理器(又叫登录管理器,Gnome的显示管理器为GDM,KDE的显示管理器为KDM,另还有XDM、WDM等)管理,所以Linux端必须启动显示管理器(启动Gnome或KDE)。


Linux 端的配置


开机后就要启动显示管理器。打开 /etc/inittab文件,将 runlevel 变为5,即修改为id:5:initdefault: 如果原来就是5,则不用修改。系统的显示管理器由displaymanager文件管理,此处仅为确定开机后启动显示管理器。


1、配置GDM


适用于Linux默认图形环境为Gnome,默认安装了GDM;
方法1:


编辑 /etc/gdm/custom.conf,添加如下内容:
[daemon]
RemoteGreeter=/usr/libexec/gdmgreeter  
注:与下面的[greeter]项一起达到“远程登录界面与本地登录界面相同”功能,若没有此行及[greeter]项添加的行则登录界面为简洁型;
[security]
AllowRemoteRoot=true  
注:允许root用户远程登录
[xdmcp]
Enable=true  
注:允许远程登录本地,xdmcp默认端口177,此处没有显示的加入Port=177;
[greeter]
Browser=true  
注:见[daemon]项
方法2:


在终端中运行 gdmsetup 或点击菜单中的“登录屏幕”,打开图形化界面。可以调整“远程”和“安全”两项;


2、配置KDM


适用于Linux默认图形环境为KDE,虽然可以同时安装GDM和KDM,但默认只启动只能选其一。
修改 /etc/X11/xdm/Xaccess
#*                  #any host can get a login window
这一行开头的#去掉;
修改 /etc/X11/xdm/xdm-config 的最后一行,在 DisplayManager.requestPort: 0 前面加上一个!号,注释掉该行;
修改 /etc/sysconfig/displaymanager 文件,更改以下内容:
DISPLAYMANAGER_REMOTE_ACCESS=”yes”  
注:允许远程桌面连接
DISPLAYMANAGER_ROOT_LOGIN_REMOTE=”yes” 
注:允许root用户远程连接


3、安全


开放防火墙中的 UDP 177端口,若已禁用防火墙,则可跳过此项。
方法1(适用于终端):


在 /etc/sysconfig/iptables 文件中加入: 
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 177 -j ACCEPT 
方法2(适用于X-Window):


在"系统"->"管理"->"安全级别和防火墙"中"防火墙选项"下的“其它端口"中添加 UDP 177端口。


4、重启服务


生效前必须重启进程,第一种,直接重新启动Linux系统,第二种,重启显示管理器gdm-restart(GDM),重启防火墙service iptables restart。如果Gnome和KDE都安装了则远程登录后可在会话中选择其中一种环境。


Windows 上的设置


在Windows系统里下载 XManager 3,然后安装打开 ,就可以看你的局域网中的Linux了,如果是广域网上的Linux,可以新建一个XDM Indirect的连接。双击打开,输入Linux的管理员账号密码既可。 另外为安全起见,XDMCP可以跑在SSH上,选择Secure XDMCP方法即可。


总结


此方案的缺点也很明显,X-Window是一种尽可能完美的显示方案,它没有可以根据网络带宽进行调整的功能,所以它会尽可能的占用带宽。


XRDP


远程桌面基于RDP协议,相对于 VNC 的好处应该是:联机的过程中有加密、可设定登入时的分辨率、方便切换输入法、操作起来似乎比 VNC 还流畅;在Linux下,如果纯粹只要有 Viewer 的功能可安装 "rdesktop",如果要同时有 Viewer 及 Server 的功能请安装 "xrdp",开源远程桌面 rdp server,利用xrdp远程登陆linux系统,以下介绍 xrdp。
其实 xrdp 是一个 Linux 远程桌面的 "中继程序",为何说 xrdp 是 "中继程序" 呢?因为它还是借用了 VNC 的模块 (libvnc.so),并且 xrdp 除了可以让你用远程桌面联机存取 Linux 桌面之外,还能透过它来登入其它 Windows 的远程桌面、VNC Server,以及任何也有安装 xrdp 的主机。并且是允许你用不同账号进行 "多重登入",这在 Windows 的系统只有 Windows Server 才支持。
所以,Linux下安装了 xrdp 等于是安装了:RDP Server (允许多重登入)+RDP Viewer+XRDP Viewer+VNC Viewer。


安装 xrdp


系统要有 gcc, pam-devel, openssl-devel: yum install gcc pam-devel openssl-devel
然后到 http://xrdp.sf.net 下载 xrdp 的原始档 xrdp-v0.6.0.tar.gz 并安装:
tar -xzvf xrdp-v0.6.0.tar.gz
cd xrdp-v0.6.0
./bootstrap
./configure
make
make install


xrdp 的配置文件


相关配置文件放在 "/etc/xrdp/",该目录下的xrdp.ini和sesman.ini比较重要:
xrdp.ini 关键部分在globals
[globals]
bitmap_cache=yes                 #位图缓存
bitmap_compression=yes     #位图压缩
port=3389                              #监听端口
crypt_level=low                     #加密程度(low为40位,high为128位,medium为双40位)
channel_code=1            
sesman.ini 档案关键部分,在 [Globals] 中的这一行: 
[Globals]
ListenAddress=127.0.0.1       #监听ip地址(默认只允许从本机连结,如果要从别的主机进行操作,可改成 "0.0.0.0")
ListenPort=3350                   #监听端口(默认即可)
EnableUserWindowManager=1     #1为开启,可让用户自定义自己的启动脚本
UserWindowManager=startwm.sh
DefaultWindowManager=startwm.sh
[Security]
AllowRootLogin=1             #允许root登陆
MaxLoginRetry=4               #最大重试次数
TerminalServerUsers=tsusers          #允许连接的用户组(如果不存在则默认全部用户允许连接)
TerminalServerAdmins=tsadmins  #允许连接的超级用户(如果不存在则默认全部用户允许连接)
[Sessions]
MaxSessions=10                 #最大会话数
KillDisconnected=0            #是否立即关闭断开的连接 (如果为1,则断开连接后会自动注销)
IdleTimeLimit=0                 #空闲会话时间限制(0为没有限制)
DisconnectedTimeLimit=0       #断开连接的存活时间(0为没有限制)
[Logging]
LogFile=./sesman.log         #登陆日志文件
LogLevel=DEBUG               #登陆日志记录等级(级别分别为,core,error,warn,info,debug)
EnableSyslog=0                 #是否开启日志
SyslogLevel=DEBUG          #系统日志记录等级


启动 xrdp


指令:/etc/xrdp/xrdp.sh start
开机启动,编辑 /etc/rc.d/rc.local 加上: /etc/xrdp/xrdp.sh start


登入 xrdp


启动 xrdp 之后,你的 Linux 主机基本上已经具备了接受远程桌面联机的功能,其 Port 为 3389,请用 Windows 的 "远程桌面" 进行联机。
联机后,首先会看到 xrdp 的登入窗口,你可以选择:
sesman-Xvnc:使用 xrdp 内建的 libvnc.so 模块登入本机,本机不需启动 VNC Server;
console:登入本机的 VNC Server;
vnc-any:登入其它已经启动 VNC Server 的主机;
sesman-any:登入其它有安装 xrdp 的主机;
rpd-any:登入其它已经启动远程桌面 (RDP Server) 的 Windows 计算机或主机;
sesman-X11rdp:应该是连结本机端由 X Server 提供的 RDP,但目前 Linux 的桌面应该还没有具备这样的功能;

以 " sesman-Xvnc" 选项登入 Linux 桌面后,预设是使用 KDE 桌面,但其操作接口是英文的,这些设定都与 "/etc/xrdp/startwm.sh" 这个脚本文件有关。如果要改成中文环境,请编辑 /etc/xrdp/startwm.sh,在程序的第二行加入:export LANG=zh_TW.UTF-8,这样就可以了。