Linux远程桌面(1)-Linux to Linux(转)

[转载]

原文链接http://blog.sina.com.cn/felonwan


Linux的远程桌面应该分两个部分吧,首先是Linux客户机连Linux服务器,接着是windows客户机连Linux服务器,还有现在用平板电脑连远程桌面。Linux客户机连Windows服务器其实没啥可说的,rdesktop和termianl server比起windows自带的“远程桌面连接”,不说好很多,至少是毫不逊色的。

我们知道,Windows的非服务器版可以支持远程桌面,不过远程一登录,原来机子上要是有人在用,就会被注销;而Windows服务器版是默认只支持两个用户,对多用户远程登录也支持,要付费的,或者就只能享受4个月的的试用,再或者就是自己破解了。

自由而免费的Linux任意版本都是可以自己配置的,因此远程桌面想怎么登就怎么登,只要机器性能允许,甚至同一用户登无数个都可以的。Linux系统大部分在网络上做服务器,一般服务器是不开图形界面的,一方面是性能和稳定性的考虑,另一方面是管理这些服务器的人技术能力比较强,所以大概是不太用图形界面管理服务器的。不过现在Linux的桌面用户越来越多,也就有越来越多像笔者这样的普通用户,喜欢用图形界面登录到Linux机器。

下面文中会提供方案很多,但总而言之,从用户使用的便捷易用来看,还是比较 推荐NX:
如果你要登录当前已经打开的图形窗口,可以用Splashtop,但是它的Linux客户端显示效果太差,甚至不于用平板电脑的效果;
如果不想使用已经登录的窗口(单用户多登录或多用户登录),请使用NX。

我将从最基础的X服务器讲起,先讲不借助其它客户端软件,而仅仅用X服务器来登录远程服务器的方式,再讲使用安全简单方便的SSH协议支持的X转发,接下来是XDMCP协议,这部分中间介绍一些开源软件客户端,然后是使用SSH结合XDMCP的安全远程登录,再接下来是使用SSH+Xephyr的无需DM的登录方式, 再然后 是VNC协议方式(可以登录已经打开的界面,但是效率比较低,且安全性不好,最好配合ssh隧道 使用), 最后 是简单介绍界面最友好、功能最全面的闭源个人免费软件Splashtop和NX,

由于我日常用的就是Ubuntu,下面的有些例子都是以Ubuntu例,不过Linux原理都是一样的,希望对所有用户都有所帮助。
1.    Linux PC连Linux PC

1.1  Remote X
我们现在用的桌面Linux系统一般都是默认装了X窗口系统(X Window System)的。X窗口系统设计的最初,就考虑了网络的情况,它的客户端(X Client,根据 http://www.faqs.org/docs/Linux-mini/Remote-X-Apps.html#s1的解释,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是比较容易伪造的,所以这个东西很不安全。

看别人的帖子中根本没有A步,当然,我也试了没有第A步的,结果是一样的不成功。
由于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)

1.2  SSH的X转发
最简单最安全的方式要属SSH的X转发,而且用它可以实现后面的XDMCP转发。如果SSH是配好了无密码访问,这个更是爽得很啦。
ssh -X 用户名@服务器IP
这个时候就可以运行服务器上有图形界面的程序了。我用过直接gnome-panel,它会菜单替代成远程服务器的菜单,但是窗口选择器里会有你自己机器上正在运行的程序,这个就可以看很多事了。
(最好不要gnome-session,可能会出问题哟)

如果你只执行一条命令,还可结合ssh可以远程执行命令的功能直接开某个程序,比如:
ssh -X 用户名@服务器IP -n gnome-panel

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

1.3  XDMCP
全称是X Display Manager Control Protocol,也就是X显示管理器控制协议。
服务器如果是最新的gdm,修改 /etc/gdm/gdm.shemas,改含 xdmcp/Enable那段中的 false为true,然后重启gdm就可以了。(老版的在/etc/gdm/gdm.conf)

而对于客户端,就有很多选择了
1.3.1  X命令登录
以X做客户端,由于现在的桌面用户装X窗口系统基本都是默认的,所以我们可以说等于什么也不用装,只用命令就可以远程图形界面连接到服务器上:
sudo X :1 -query 服务器IP

这个正是利用了前面说到的X服务器的功能,在其它控制台新开一个图形界面去显示远程服务器的图形界面。

当然,我们采用其它图形客户端,也是可以的了。这些客户端一般是会开一个窗口,而不是在其它控制台去建一个显示界面。

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

1.3.3  Xephyr
其实Xephyr比Xnest更好,它支持OpenGL的,所以远程桌面要是有3D特效、还有3D游戏都是能在Xephyr窗口中显示的,而Xnest不行。Xephyr有很多开发者在用,因为可以当成一个桌面模拟环境来用,测试各种窗口管理器、图形界面。
安装:
sudo  apt-get install xserver-xephyr
用法与Xnest是类似的:
Xephyr :1 -query -reset -terminate 服务器IP

1.4.  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)


1.5.   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的方式可能更好些。

1.6.    VNC
VNC协议是截取当前桌面的图形,传送给远程客户端,效率上不是很好,时常在局域网里都会卡;另外它会显示给当前在用的这个帐户的用户在干什么,而且两个人对鼠标和键盘都有控制权,会有冲突。
不过当你需要的就是对当前已经打开的图形界面进行操作时,这种方式无疑就很有用了。

Ubuntu下默认带有vnc服务器——vino-server,在 系统-->系统管理-->远程桌面 里设置它,注销(重启gdm)就行了。
而客户端也是默认有的,系统-->互联网-->远程桌面查看器 就是了。

VNC是不太安全的。 笔者使用过,密码只能8位,开了之后放着就忘了,然后某天晚上SSH上去的时候发现vino-server占用CPU100%,估计是被入侵了,直接关机,以后就把它关了。

推荐使用x11vnc,初级用法挺简单:
x11vnc -display :0 -passwd *****
就能登录当前的:0图形界面了(一般情况下默认的图形界面)。
ssvncviewer remotehost

使用ssh隧道来加密更安全:
ssh -t -L 5900:localhost:5900 user@remotehost 'x11vnc -localhost -display :0' &
ssvncviewer localhost:5900


1.7 使用商业软件:Splashtop和NX

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

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

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

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

另外,Teamviewer的下载页面


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

去下面的网址下载:
服务器端安装nxclient,nxnode,nxserver三个软件包。
客户端只安装nxclient就可以了。

nxclient是有图形界面的,很容易使用,就不多说了。而nxserver安装后就立刻启动,而且每次开机会自动启动,所以什么都不用操心。(当然,你要改设置就得操心了。)

它是可以保持图形界面在服务器上运行的,这个功能是挺好的。但是也要注意,如果你不想要这样的时候,确定你不是关掉它(Disconnet)而是结束这个会话(Terminate)。
设置中看还有支持多媒体的选项,但是我设置了,只能听到远程服务器用户登录或注销的声音。

关于开源的FreeNX和NeatX,可以参考:
http://freenx.berlios.de/
https://code.google.com/p/neatx/



其它的事
A 我使用X服务器显示远程图形界面时遇到的错误:
直接用export DISPLAY的方式,或用1.6中的Xephyr改成Xnest,错误提示都是:
无法打开显示器(cannot open display: myip:x)
权限问题?

而用sudo X :n vtp在第p个控制台开显示器号为n的图形界面,
然后ssh -X usrname@hostname -n gnome-session --display myip:n
则告诉我:
No protocol specified
xterm Xt error: Can't open display: myip:n
没有指定协议!
测试了一下,本地的是可以用X命令开的这个号为n的显示界面的,完全就是和默认的界面定价的一个界面。
这样看来,gnome-session --display myip:n,这样的命令需要指定一个网络传输的协议?
但是用Xephyr开的显示窗口是可以的,这是怎么回事,它指定了协议?
ssh -X又用了什么协议,它怎么能把东西放到当前的显示界面?

B. Linux中远程服务器上的音视频查看的问题
NX设置中虽然还有支持多媒体的选项,但是我选上后,仍然只能听到远程服务器用户登录或注销的声音。声音部分感觉本来在linux系统中似乎就比较混乱,把远程播放器的声频信息带到当前机器中,然后再通过当前的系统的设备播放出来,这对Linux是不是一个比较困难的事情?但是目前Windows好像是支持传输声音的,这是说目前在这个方面Linux确实不足么?
其实nautilus支持sftp协议,把远程服务器的目录挂载到机器上,就可以在本地图形界面下播放远程服务器上的音乐和视频,在远程桌面中做这个事也不是特别需要,至少对我而言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值