首页 > 编程学习 > 细说Linux的图形界面系统XServer与VNC及其它

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

发布时间:2022/11/14 2:06:33

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)
Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式