openbmc kvm vnc client connection
1. VNC 介绍:
VNC(Virtual Network Computing,虚拟网络计算) 是一种远程桌面协议(RDP 的替代方案),允许用户通过网络控制另一台计算机的图形界面。其核心特点是 跨平台、开源、基于帧缓冲(Frame Buffer),广泛用于远程管理、IT 支持、嵌入式设备(如 OpenBMC)等场景。
1.1 VNC 工作原理:
- 服务端(Server):运行在被控制的设备上(如 OpenBMC 的 KVM 功能),实时捕获屏幕画面,通过 RFB(Remote Framebuffer)协议 传输给客户端。
- 客户端(Viewer):接收画面并发送键盘/鼠标事件到服务端(如 TightVNC、TigerVNC)。
- 编码(Encoding):压缩屏幕变化数据以节省带宽(如
Tight
、ZRLE
)。
1.2 VNC 主要组件:
组件 | 作用 |
---|---|
RFB 协议 | 定义数据传输规则(类似 HTTP 用于网页)。支持版本:RFB 3.3、3.7、3.8 等。 |
服务端 | 如 libvncserver (OpenBMC 使用)、TigerVNC Server 、RealVNC Server 。 |
客户端 | 如 TightVNC、TigerVNC、noVNC(网页版)。 |
编码方式 | 决定数据如何压缩传输(影响速度和画质)。 |
1.3 VNC 工作流程:
- 握手阶段
- 协商协议版本(如 RFB 3.7)。
- 选择认证方式(无密码、VNC 密码、TLS 加密等)。
- 初始化
- 客户端请求屏幕分辨率、像素格式(如 32bpp RGB)。
- 服务端发送第一帧画面(通常为
Raw
编码)。
- 交互阶段
- 客户端发送鼠标/键盘事件。
- 服务端只发送屏幕变化的区域(通过
Tight
、Hextile
等编码压缩)。
2. VNC 客户端:
2.1 VNC 客户端分类及各客户端所支持的编码类型:
- 在 OpenBMC over VNC 的环境下,除了 TightVNC 外,还有许多其他客户端可供选择,每个客户端支持的编码(Encoding)方式有所不同。
2.1.1 Desktop/终端客户端
客户端 | 特点 | 支持的编码方式 |
---|---|---|
TightVNC | 轻量级,专为 Tight 优化,兼容性较好 | Tight ,ZRLE ,Hextile ,RRE ,Raw ,CopyRect |
RealVNC | 商业化产品,支持加密连接 | Tight (TightVNC 变种),ZRLE ,Hextile ,Raw ,CopyRect |
TigerVNC | 高性能,常用于科研/HPC 环境 | Tight ,ZRLE ,Hextile ,RRE ,Raw ,CopyRect (支持 JPEG 压缩) |
UltraVNC | Windows 重点优化,支持插件扩展 | Tight ,ZRLE ,Ultra (专有),Hextile ,Raw |
Vinagre (GNOME) | Linux GTK 客户端,轻量 | Tight ,Hextile ,Raw |
Remmina | Linux 多协议远程桌面工具 | Tight ,ZRLE ,Hextile ,RRE ,Raw |
2.1.2 Web/无客户端方案
客户端 | 特点 | 支持的编码方式 |
---|---|---|
noVNC (Web) | HTML5 Canvas + WebSocket 代理 | Tight (默认),Raw (需服务端支持 WebSocket) |
Guacamole | 基于 HTTP/Web 的远程桌面网关 | 依赖后端 VNC 代理(如 TigerVNC) |
2.2 不同编码格式之间的关系:
- 不同编码对用不同的压缩算法,其对带宽,cpu 占用率都有不同的影响。
Encoding | 压缩算法 | 适用场景 | 是否通用 |
---|---|---|---|
Tight (最优) | zlib + JPEG(可调) | 适合高色深(24/32bpp)、高带宽 | ✅ 大多数现代客户端支持 |
ZRLE | RLE + zlib | 适合低动态变化画面(如终端) | ✅(TigerVNC、RealVNC) |
Hextile | 分块压缩 | 中等压缩率,兼容性好 | ✅(几乎所有客户端) |
RRE | 简单区域编码 | 低 CPU 开销,适合静态图 | ✅(老旧客户端) |
Raw | 无压缩 | 完全兼容,但带宽高 | ✅(任何客户端) |
CopyRect | 屏幕复制 | 优化重复区域(如窗口拖动) | ✅(必须支持) |
3. KVM 基于VNC所支持的编码方式:
- 以aspeed ast 芯片举例:目前KVM 支持rfbEncodingAspeed 和rfbEncodingTight
- 通常采用全帧或增量帧方式,即标准Tigh 编码
- 采用Tight 编码的方式也主要是为了尽可能兼容各类vnc client
4. VNC Client 连接openBMC KVM:
4.1 修改软件打开VNC 服务:
-
如修改ip 为0.0.0.0 ,允许任何IP 可连接该VNC kvm服务;
-
编译软件确认监听socket:
netstat -tuln | grep -E "5900”
-
ifconfig -a 查看BMC ip
4.2 安装tightvnc 客户端并连接该IP kvm
备注:TigerVNC 客户端也是类似。
-
从官网下载客户端,选择tightviewer 客户端
-
安装并打开tightVNC 客户端,输入IP 进行连接
-
TightVNC 客户端显示远程KVM 界面: