Linux远程桌面的选择

2023-05-16

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,这样就可以了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux远程桌面的选择 的相关文章

  • 查找并删除超过 x 天的文件或文件夹

    我想删除超过 7 天的文件和文件夹 所以我尝试了 17 07 14 email protected cdn cgi l email protection find tmp mindepth 1 maxdepth 1 ctime 7 exec
  • 由于 abi::cxx11 符号导致的链接问题?

    我们最近收到一份报告 因为GCC 5 1 libstdc 和双 ABI http gcc gnu org onlinedocs libstdc manual using dual abi html 它似乎Clang 不知道 GCC 内联名称
  • 如何使用 VSCode 调试 Linux 核心转储?

    我故意从我使用 VSCode 编写的 C 应用程序生成核心转储 我不知道如何调试核心转储 有没有人愿意分享这方面的经验 更新 我相信我现在已经可以使用了 我为核心文件创建了第二个调试配置 我需要添加指向生成的转储文件的 coreDumpPa
  • 如果输入被重定向则执行操作

    我想知道如果我的输入被重定向 我应该如何在 C 程序中执行操作 例如 假设我有已编译的程序 prog 并且我将输入 input txt 重定向到它 我这样做 prog lt input txt 我如何在代码中检测到这一点 一般来说 您无法判
  • 打印本周星期一的日期(在 bash 中)

    我想获取本周星期一的 YYYYMMdd 格式的日期 例如 今天是 20110627 从明天到周日 我仍然想打印周一 今天 的日期 然后下周重复这个过程 monday date dmonday Y m d last monday date d
  • Linux下单个目录下文件过多会怎样?

    如果一个目录中有大约 1 000 000 个单独的文件 大部分大小为 100k 其中没有其他目录和文件 是否会以任何其他可能的方式降低效率或产生缺点 ARG MAX 会对此提出异议 例如 rm rf 在目录中时 会说 参数太多 想要执行某种
  • Linux >2.6.33:可以使用 sendfile() 来实现更快的“猫”吗?

    必须将大量大文件连接成一个更大的单个文件 我们目前使用 cat file1 file2 output file but are wondering whether it could be done faster than with that
  • 命名互斥体的 Mono 替代方案

    在 Windows NET 上 命名的互斥体可用于同步多个进程 不幸的是 Mono 在 Linux 上不太支持这一点 他们的发行说明 http www mono project com Release Notes Mono 2 8 Shar
  • 如何在 Linux 中向热敏打印机发送 ESC/POS 命令

    我正在尝试在热敏打印机上发送 ESC POS 命令 但每当我发送它们时 热敏打印机都会将它们打印为文本 而不是作为命令执行它们 我在 prn 文件中编写这些命令 每当我执行 lp 命令来打印文件时 这些 prn 文件也会被打印 但作为文本
  • grep 彩色线条

    我编写了一个简单的 PHP shell 脚本 它解析文件并输出某些元素 它产生大量的输出 采用不同的 bash 颜色 绿色表示正常 黄色表示警告 红色表示错误等 在开发过程中我想过滤掉一些行 例如 所有包含红色文本的行 我可以使用grep
  • 如何在 Ubuntu/Linux 发行版中安装 Tesseract-OCR 3.03?

    我和一个朋友有兴趣为 CV 项目训练 tesseract OCR 引擎 我们尝试使用一些包装器 例如 PyTesser 和 pyocr 但结果目前不如我们需要的那么准确 因此 我们希望尝试训练超立方体以更好地实现我们的目的 即识别食品标签上
  • 删除 Python 中某些操作的 root 权限

    在我的 Python 脚本中 我执行了一些需要 root 权限的操作 我还创建并写入文件 我不想由 root 独占所有 而是由运行我的脚本的用户独占所有 通常 我使用以下命令运行脚本sudo 有办法做到上述吗 您可以使用以下方式在 uid
  • Flex 的远程版本误解了我的规则

    我使用 flex 和 bison 编写了一个小汇编程序 可以在我的机器 ubuntu 10 10 上构建并运行正常 现在其他人正在尝试在 arch linux 上构建它 并且他们安装的 flex 产生了不同的 lex yy c 这是不匹配的
  • 在Linux中创建可执行文件

    我计划做的一件事是编写 非常简单的 Perl 脚本 并且我希望能够在不从终端显式调用 Perl 的情况下运行它们 我明白 要做到这一点 我需要授予他们执行权限 使用 chmod 执行此操作非常简单 但它似乎也是一个稍微费力的额外步骤 我想要
  • 即使使用 rvm pkg install zlib 后也无法加载此类文件 -- zlib

    我使用 rvm 安装了 zlib 包和 ruby 1 9 3 但是每当我尝试安装时 它说宝石cannot load such file zlib 我用来安装的命令是 rvm install 1 9 3 rvm pkg install zli
  • 我们可以在 Bash 脚本中使用 PHP 吗?

    我有一个 bash 脚本abcd sh bin sh for i in seq 8 do ssh w i uptime ps elf grep httpd wc l free m mpstat done pid sleep 1 kill 9
  • python 可以检测它运行在哪个操作系统下吗?

    python 可以检测操作系统 然后为文件系统构建 if else 语句吗 我需要将 Fn 字符串中的 C CobaltRCX 替换为 FileSys 字符串 import os path csv from time import strf
  • 有没有办法只安装mysql客户端(Linux)? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有没有不需要安装整个mysql db安装包的Linux mysql命令行工具 我想做的是从服务器 1 应用程序服务器 执行将在服务器 2
  • SVN 不断提示我输入密码并拒绝缓存我的凭据

    环境 Eclipse Indigo Ubuntu 11 04 Subclipse 1 6 SVN 客户端 Subclipse RabbitVCS 我通过 svn ssh 连接 我的网址如下所示 svn ssh 我的名字 我的域名 路径 我可
  • 为什么 proc/ID/maps 有多个共享库条目

    我正在查看嵌入式Linux下的proc ID maps 我注意到一些共享库在进程的内存映射中出现了几次 为什么会这样呢 40094000 400d9000 r xp 00000000 b3 09 723 system lib libc so

随机推荐

  • [树的直径/并查集/最小生成树/最小瓶颈生成树]Exercise Week6 A+B+C+D

    目录 A 树的直径 氪金带东题意样例思路总结代码 B 并查集 戴好口罩 xff01 题意样例思路总结代码 C 最小生成树 掌握魔法 东东题意样例思路总结代码 D 最小瓶颈生成树 数据中心题意样例思路总结代码 A 树的直径 氪金带东 题意 实
  • [差分约束/拓扑排序/kosaraju缩点]Exercise Week8 A+B+C

    目录 A 差分约束 区间选点 题意样例样例输入 xff1a 样例输出 思路总结代码 B 拓扑排序 猫猫向前冲题意样例样例输入 xff1a 样例输出 xff1a 思路总结代码 C SCC缩点 区间选点 题意样例样例输入 xff1a 样例输出
  • [大模拟]Test Week8 二阶魔方

    目录 大模拟 东东玩二阶魔方题意d样例样例输入 xff1a 样例输出 思路总结代码 B 模拟 ST串题意样例样例输入 xff1a 样例输出 xff1a 思路总结代码 大模拟 东东玩二阶魔方 题意d 东东有一个二阶魔方 xff0c 即2 2
  • [大模拟]Test Week14 猫睡觉问题

    目录 大模拟 猫睡觉问题题意样例样例输入 xff1a 样例输出 思路总结代码 大模拟 猫睡觉问题 题意 众所周知 xff0c TT家里有一只魔法喵 这只喵十分嗜睡 一睡就没有白天黑夜 喵喵一天可以睡多次 xff01 xff01 每次想睡多久
  • [区间DP/状压DP]Exercise Week12 A~E

    目录 A 水 找数题意样例样例输入 xff1a 样例输出 思路总结代码 B BFS 逃离题意样例样例输入 xff1a 样例输出 xff1a 思路总结代码 C DP 扫楼题意样例样例输入 xff1a 样例输出 思路总结代码 D 区间DP 最长
  • 新的开始( [USACO08OCT]打井Watering Hole)

    新的开始 newstart pas c cpp 题目描述 话说小 FF 在经历了上次 寻找古代王族遗产 的探险后 xff0c 成为了世界上最伟大的探险 家并拥有了一大笔财富 当然他不能坐吃山空 xff0c 必须创造财富 xff01 xff0
  • UOS配置本地APT源和外部软件包

    root 64 skill PC mount dev sr0 mnt mount mnt WARNING device write protected mounted read only root 64 skill PC vi etc ap
  • [二分答案] 洛谷P1873 砍树

    目录 题意样例样例输入 xff1a 样例输出 思路总结代码 题意 伐木工人米尔科需要砍倒M米长的木材 这是一个对米尔科来说很容易的工作 xff0c 因为他有一个漂亮的新伐木机 xff0c 可以像野火一样砍倒森林 不过 xff0c 米尔科只被
  • [区间DP]洛谷P1063 能量项链

    目录 题意样例样例输入 xff1a 样例输出 思路总结代码 题意 样例 样例输入 xff1a 4 2 3 5 10 样例输出 710 思路 1 经典区间DP题 算是合并石子的变种 只不过由一个点变成了一个区间 不过我们也可以用结构体存储 当
  • Linux命令行初接触-1 操作文件和目录

    操作文件 amp 目录 1 通配符含义常用通配符常用字符类类型匹配范例 2 mkdir 创建目录3 cp 复制文件和目录工作方式常用选项 4 mv 移动和重命名文件工作方式常用选项 5 rm 删除文件和目录工作方式常用选项注意事项 6 ln
  • 机器学习入入入入门(1)机器学习基本概念、引出深度学习

    机器学习入入入入门 xff08 1 xff09 0 前言1 基本步骤2 基本概念2 1 Hyperparameters2 2 local minima 3 linear model3 1 基础概念 4 piecewise linear cu
  • 深度学习蒟蒻入门——从0安装pytorch(CPU版)

    从0安装pytorch 1 检查自己的电脑有没有GPU2 安装CPU版的pytorch3 测试pytorch 1 检查自己的电脑有没有GPU 首先打开任务管理器 xff0c 选择性能栏 然后滑到最下 xff0c 看是否有GPU一项 xff0
  • 系统学习iOS动画 —— Stroke和路径动画

    这是要完成的动画 xff1a 先添加需要的代码 xff0c 这里需要将storyboard的ViewController换成TableViewController xff0c 将Under Top Bars 和 Under Bottom B
  • 不知道这些网站还做什么程序员呀!

    今天我就来总结一些程序员必备的网站 xff0c 囊括开源项目 解决bug 技术分享 一线资源和自我提升的网站 xff0c 希望能对广大程序猿有所帮助 xff0c 赶紧给我收藏起来 xff0c 下次刷不到了可别说我没提醒你 我们首先来看一下国
  • (音视频开发)WebRTC进阶流媒体服务器开发-多人互动架构

    一 xff1a 多人互动架构方案 xff08 一 xff09 WebRTC回顾 xff0c 两层含义 xff1a 1 WebRTC是google开源的流媒体客户端 xff0c 可以进行实时通讯 xff0c 主要应用于浏览器之间进行实时通讯
  • 10种linux下磁盘快照方式恢复系统

    导读大家都知道windows系统有一个磁盘快照的功能 xff0c 在windows2003中系统恢复开始依赖于一个叫做硬盘快照服务 Volume Snapshot Service 的服务 xff0c 他能够自动创建系统快照 包括正在使用的文
  • ubuntu安装go开发环境

    一 为ubuntu20 04更新源 给root用户设置密码 xff1a 命令 xff1a sudo passwd root 备份原来的源 xff0c 命令 xff1a sudo cp etc apt sources list etc apt
  • 如何修复Ubuntu中包缓存文件被毁问题

    导读今天 xff0c 我尝试更新我的 Ubuntu 18 04 LTS 的仓库列表 xff0c 但收到了一条错误消息 xff1a E The package cache file is corrupted it has the wrong
  • 1002 A+B for Polynomials (25分) 详解+易错点

    注意点 xff1a 系数为0 xff0c 则不输出 xff0c 例 xff1a 其中 1和1相加为0 xff0c 则在输出时避免这一项 xff0c 而且要注意结果的K值 xff0c 不要包括这一项 xff0c 思路 xff0c 利用结构体存
  • Linux远程桌面的选择

    Linux的远程桌面主要分两个部分 xff1a Linux客户机连Linux服务器和Windows客户机连Linux服务器 xff0c 还有现在用平板电脑连远程桌面 Linux客户机连Windows服务器比较简单没啥可说的 xff0c rd