细说Linux的图形界面系统XServer与VNC及其它

XServer相关概念

云计算的流行,使得远程桌面,云桌面更加大行其道。而习惯了windows操作系统的我们,通常没有明确地区分图形界面和操作系统本身,但对于搞远程运维,自动监控的同学来说,区分这些概念和相关软件,能帮助你我们更好理解X系统,更好诊断相应问题。本文简要介绍一下这些概念。
在这里插入图片描述
Linux的桌面环境是通过X Server(XFree86、Xorg),X Client(libX11),Window Manager(KDE、xfce、wm2)等服务提供的。

  • X-Window/X Protocol:是一套图形接口(协议)。不同于Windows已经将图形接口与操作系统完全融为一体的做法,Linux的图形接口是可选的。而X-Window就是这样的一种图形接口。这个图形接口是属于CS架构的(client/server)。X Server负责画面的绘制和显示,以及接收用户的输入并传到给X Client。X Client负责处理传递过来的用户输入并决定呈现数据,然后由X Server来进行绘制。这与通常的对于CS架构的理解是相反的,与用户直接沟通的其实是X Server。X-Window是一种协议,因此还需要具体的实现,例如Xfree86、Xorg,Xming和Xnest。

  • X11R6:X Protocol version 11 Release 6(X协议第11版第六次发行)。

  • Window Manager(WM):个人看法,每一个窗口程序可能就对应一个(或多个?)X Client,而WM就是管理这些窗口移动、窗口大小和重叠显示的管理程序,常见的WM有GNOME、KDE、XFCE。

  • VNC server
    vnc server是一个Perl脚本,帮我们封装VNC + X协议。常见的VNC服务器软件有vnc4server、TightVNC,RealVNC等。常见的VNC客户端有RealVNC Viewer、Ultra VNC等。

  • Xvnc
    Xvnc是一种X11 server,能独立运行,它已经包含了X server,无需系统安装X server库,但需要一个桌面端去操作它。
    启动Xvnc:

$ export DISPLAY=localhost:1.0
$ /usr/bin/Xvnc :1 -ac -auth "/root/.Xauthority" \
    -geometry "1200x700" -depth 8 -rfbwait 120000 \
    -rfbauth /root/.vnc/passwd 2> /root/.vnc/ServerDaemon.log &
$ /bin/sleep 10
$ /usr/bin/fvwm 2> /root/.vnc/fvwm.log &
  • x11vnc
    Xvnc 包含自己的XServer, x11vnc却不包含. x11vnc也是一种VNC server,它需要一个正在运行的X server,如Xvnc, 或 Xvfb。

  • 远程桌面:当你从另一台电脑上上想要通过图形化界面操作远程Linux时需要用到。常见的图形化远程桌面连接协议是RDP和VNC。Windows远程桌面用的就是RDP。RDP和VNC的区别可以参考VNC与RDP的区别。VNC主要传图像,适用于瘦客户端。RDP主要传指令,适用于低速网络。此外微软还有一项针对RDP的增强技术RemoteFX。

就X windows桌面来说,本来就没有不远程的,XServer和XClient放在一台电脑上就是本地桌面,通过SSH连接就远程了,没有本质区别。VNC是另一种模式,类似Windows下的RDP。以上两类的区别在于,后者是以桌面为单位进行远程操作的,连上就一个桌面。前者是以应用程序为单位的,可以在本地运行一个远程GUI应用程序——比如我可以在mac笔记本上通过X windows远程打开家里linux服务器上的nautilus文件管理器,里面显示的文件都是远程服务器上的。

XServer的安装

整体的安装:

yum groupinstall "X Window System"
yum groupinstall "GNOME Desktop"

实际生产情况下,我们不需要安装整个桌面程序,如果只是远程运维,可以只安装X11基础包:

yum install xorg-x11-xauth xterm

xterm是可选的,用来测试,远程GUI是否可用。一般安装步骤如下:

  1. 确保已安装基础X11软件包
  2. 确保将OpenSSH服务器配置为转发X11连接
  3. 在我们的工作站上配置本地X11服务器
  4. 配置我们的ssh应用程序以转发X11请求
  5. 使用简单的应用程序进行测试

noVNC

这里要单独介绍一下novnc。novnc提供了一种云桌面方案。noVNC 被普遍用在各大云计算、虚拟机控制面板中,比如 OpenStack Dashboard 和 OpenNebula Sunstone 都用的是 noVNC。
很多云计算场景的解决方案都采用集成novnc的形式去做各种定制化的应用。
noVNC通过在网页上html5的Canvas,访问机器上vncserver提供的vnc服务,需要做tcp到websocket的转化,才能在html5中显示出来。网页就是一个客户端,类似win下面的vncviewer,只是此时填的不是裸露的vnc服务的ip+port,而是由noVNC提供的websockets的代理,在noVNC代理服务器上要配置每个vnc服务,noVNC提供一个标识,去反向代理所配置的vnc服务。
下面是一个典型的novnc部署拓扑图:
在这里插入图片描述

搭建novnc

  1. 安装vncserver: yum install tigervnc -y
  2. 安装Node.js:https://nodejs.org/en/download/(用于执行Websockify.js)
  3. 下载novnc:http://github.com/kanaka/noVNC/zipball/master
    noVNC运行时执行的脚本为noVNC/utils目录下的launch.sh,配置及参数修改直接在lauch.sh中设置
  • –listen 后面加noVNC运行时的端口,默认为6080(⻅2.2.3)
  • –vnc 后面跟vnc会话的信息,如172.16.0.56:5901
  • –cert 指定证书(⻅2.2.4)
  • –web 用来查找vnc.html的目录.根据代码逻辑,在noVNC目录或者noVNC/utils目录下执行时都无需设置此参 数,web变量会自动在当前目录或者上一级目录查找vnc.html。
  • –ssl-only 限制只能用https进行vnc远程会话,此时http访问失效。装载安全证书后,此参数才会生效,否则 noVNC进程无法运行
  1. 安装Websockify:https://github.com/novnc/websockify/archive/master.zip, 启动:
nohup python /root/noVNC/utils/websockify --web /root/noVNC --target-config=/srv/nfs4/vnc_tokens 6080 >> /root/noVNC/novnc.log &

当然,最好是直接采用已有的docker镜像:

docker pull dorowu/ubuntu-desktop-lxde-vnc

相关软件

  • MobaXterm: 默认有X Window 服务,可以直接弹出GUI
  • vncviewer: 最常用的vnc客户端
  • xming: 开源X Server,搭配Putty使用。参见:http://www.straightrunning.com/XmingNotes/
  • UltraVNC:http://www.uvnc.com/(Windows环境下的VNC Server,还有TightVNC、TigerVNC、RealVNC等,其中RealVNC不能通过noVNC)
  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
VNC(Virtual Network Computing)是一种远程桌面协议,可以通过网络连接到远程计算机的图形界面。在Linux系统中,使用VNC可以让用户在不同的计算机上远程访问Linux计算机的桌面。 以下是在Linux上使用VNC的步骤: 1. 安装VNC服务器 首先在Linux系统上安装VNC服务器。在Ubuntu上,可以通过以下命令安装VNC: ``` sudo apt-get install tightvncserver ``` 2. 启动VNC服务器 启动VNC服务器之前,需要创建一个VNC连接密码。可以使用以下命令创建密码: ``` vncpasswd ``` 然后启动VNC服务器: ``` vncserver :1 ``` 这会在端口5901上启动一个VNC服务器。 3. 连接到VNC服务器 现在,可以在另一台计算机上使用VNC客户端连接到Linux计算机的VNC服务器。在Windows系统上,可以使用RealVNC或TightVNCVNC客户端。在Mac OS X系统上,可以使用Chicken of the VNC。 连接时需要输入Linux计算机的IP地址和端口号。例如,如果Linux计算机的IP地址为192.168.1.100,端口号为5901,则连接字符串应为: ``` 192.168.1.100:5901 ``` 连接成功后,就可以在VNC客户端上看到Linux计算机的桌面。可以在远程计算机上执行各种操作,就像在本地计算机上一样。 注意:连接VNC服务器时,需要确保防火墙允许VNC服务器的端口通过。默认情况下,VNC服务器使用TCP端口5900和5901。如果需要在其他端口上运行VNC服务器,请相应地配置防火墙。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北极象

如果觉得对您有帮助,鼓励一下

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值