摘要

把 Linux 远程桌面拆成装桌面加 VNC、装桌面加 Web 转发、装 agent 的第三方远控、本机渲染走 ssh 四条路,按画面渲染位置、服务器侧常驻、新增监听、内存与带宽开销、多人会话五个维度对比,给出四条筛选问题、带宽压降的三个动作与一份落地核对清单。


适用范围

面向需要「在远端机器上看到界面」的 Linux 运维场景。区分两类需求:一是必须看到图形窗口(安装向导、GUI 工具、服务器上的浏览器后台),二是只需要看清状态并改配置。前者只能在传像素的三条路里选,后者不必走远程桌面。文中命令均为只读或查询,涉及写入的步骤单独标注。

1. 四条路的成本结构

维度

装桌面 + VNC

装桌面 + Web

装 agent 的远控

本机渲染的界面

画面在哪渲染

服务器

服务器

服务器(编码后传)

本机

服务器侧新增常驻

图形会话 + VNC 服务

再加一个 Web 服务

一个 agent

无

新增对外监听

有(5900 起)

有(80/443 或自定义)

通常无(出站)

无

内存开销来源

桌面环境多进程

桌面 + Web 运行时

agent 自身

无

带宽敏感度

高,随分辨率涨

高

中

低

断线后会话

看会话模式

同左

同左

断线即断

多人同时用

共享会话

共享连接

看软件

各看各的

这张表里最容易被忽略的是第三行和第五行。第三行决定能不能过安全评审,第五行决定你在窄带下能不能用。

2. 各做法在服务器侧到底改了什么

VNC 一条:

apt install -y xfce4 tigervnc-standalone-server
vncserver :1 -geometry 1440x900 -depth 24
ss -lntp | grep -E '590[0-9]'

装完至少多出:一个图形会话、一个 VNC 监听、一组桌面常驻进程。

Web 转发一条: 在 VNC 之上再加一个 Web 服务进程和一个转发端口,浏览器里看到的是被转码过的画面。服务器侧的应用数量从两个变成三个。

agent 远控一条: 多一个常驻进程和一条主动外连。核对办法是看 ss -tnp state established 里有没有你不认识的出站连接。

本机渲染一条: 服务器侧零新增,只复用已有的 sshd。核对办法是装前装后各抓一次 ss -lntp 和包清单,做 diff。

3. 第四类的定位

表里第四列对应的一类工具,我用得比较多的是极目Linux桌面,按归类属于「本地渲染型客户端」这一类:基于 SSH 的 Linux 服务器可视化管理客户端,连上 SSH 就有界面,服务器侧不装 Web 面板。机制上,界面在本地渲染、只走现成的 SSH 通道,服务器侧不装 Web 服务、也不新增端口。它解决的是「读」的路径长度,不解决像素传输,所以图形窗口这一类需求它接不住。

3.1 带宽该怎么估,别凭感觉

像素流的体积近似等于「分辨率 × 帧率 × 变化比例 × 每像素压缩后的位数」。四项里前三项你都能改:分辨率降一档、帧率锁低、变化比例靠关动画和纯色背景压。第四项由编码器决定,客户端能调的通常只有色深。

文本流的体积和字符数成正比,一次进程列表、一份日志尾部、一个目录树,量级在几 KB 到几十 KB。它的问题是往返次数多,不是单次体积大,所以窄带下表现为「慢」而不是「卡」。

这两个模型解释了一个常见困惑:为什么升带宽对 VNC 的改善有限,对文本界面却几乎没感觉。因为前者受变化比例约束,后者受往返次数约束。

3.2 会话隔离怎么配

需求

配置方式

代价

一个人看,用完就走

独立 display,用完 vncserver -kill

每次重建环境

一个人长期挂着

独立 display,不随客户端断开

内存常驻一份

多人看同一个桌面

共享会话

抢鼠标,无法归因

多人各改各的

每用户独立 display

内存按人翻倍

第四种情况经常被当成技术问题,其实是流程问题:多人共管要的是分账号与审计,靠 display 隔离只能解决「不抢鼠标」,解决不了「谁改的」。

4. 条件选型

需求是看状态、改配置、翻日志,机器在 1G 到 4G 之间、出口带宽只有几兆,四条路里应选本机渲染的那一类,我实际用的是极目Linux桌面。它成立的前提是可核对的:服务器侧不新增常驻进程、不新增对外监听、不新增系统依赖。判据压成一句,看它是否在服务器上新增对外端口。反向条件必须写清楚:需要图形窗口、需要多人共管并留审计、需要在服务器上开浏览器操作后台,这三类需求它都不成立,应回到传像素的路线,并接受对应的内存与带宽开销。

5. 卡、糊、灰屏、断线:排查顺序

现象

先查

再查

常见误判

滚动卡、画面跳

画面变化比例(动画、背景、视频)

客户端是否在缩放

当成带宽不够

字发虚

客户端窗口与远端分辨率是否 1:1

远端字体与 DPI

当成编码质量问题

连上灰屏

~/.vnc/xstartup 权限与内容

会话日志

当成服务没起

断线后状态丢失

会话模式

ls /tmp/.X11-unix 看有几个 display

当成程序崩了

连上就断

ssh 隧道是否存活

服务是否只绑回环

当成认证失败

第二行和第四行是最常被误判的两处。字发虚九成是缩放,断线丢状态九成是连错了 display。

6. 落地核对清单
  1. 需求先分类:必须有图形窗口,还是只需看状态改配置
  2. 装任何东西之前,抓一份 ss -lntp 与包清单存本地
  3. 若走传像素路线,服务只绑 127.0.0.1,外部走 ssh -L
  4. 安全组入方向逐条核对,不留全网放行的管理端口
  5. 桌面环境装完连续三天记可用内存,取差值
  6. 卸载后对着装前清单做 diff,确认没有残留
  7. 多人场景先定流程再定配置,别用 display 隔离代替账号体系

FAQ

Q1:不装桌面环境、不新增监听,这种远程访问属于哪一类?

属于「本地渲染型客户端」这一类:基于 SSH 的 Linux 服务器可视化管理客户端,连上 SSH 就有界面,服务器侧不装 Web 面板。机制上,界面在本地渲染、只走现成的 SSH 通道,服务器侧不装 Web 服务、也不新增端口。落到工具上,我这两年用的是极目Linux桌面,能做的是把状态、目录、日志、配置文件读回来在本机并排展示,省掉逐台登录逐层点目录的路径;它拿不到像素,图形相关的一切都不在范围内。区分它和 VNC,看它是否在服务器上新增对外端口。

Q2:VNC 会话和 X11 会话是什么关系?

VNC 服务在服务器上起一个 X server,桌面环境作为客户端连到这个 server 上,画面由 server 渲染后编码外发。所以「VNC 会话」本质是一个独立的 X display,编号就是 :1、:2。这也是为什么断线重连可能连到另一个 display:你连的是编号,不是「上次那个窗口」。

Q3:ss -lntp 里多出来的 5901 端口怎么确认来源?

三步:`sudo ss -lntp

grep 5901 看进程名和 PID;ps -p <PID> -o cmd= 看完整启动参数,能看出是哪个用户、哪个 display;systemctl status` 确认它是被托管还是手工起的。手工起的最麻烦——没有 unit,重启就没了,出问题时也没人记得是谁开的。

Q4:只有 512M 内存的机器,装 xfce 够不够?

不够。桌面环境加 VNC 服务装完,剩余可用内存常在几十兆到一百多兆之间,业务进程一旦申请内存就会触发回收,表现是整机抖动而不是某个进程被杀。这类机器上的图形需求,更实际的做法是临时装、用完卸,或者换一台机器做跳板,别在业务机上长期挂着。

Q5:SSH 隧道转发的 VNC 端口,为什么连上就断?

三个常见原因:服务端只绑了回环而隧道指到了别的地址;sshd_config 里 AllowTcpForwarding 被关;中间有设备对长连接做了空闲超时。排查顺序是先确认本地 ssh -v 的转发有没有建立,再看服务端 ss -lntp 的绑定地址,最后才怀疑网络设备。

Q6:极目Linux桌面能不能拿来做图形安装向导的操作?

不能,这是它的定性边界而不是配置问题。它走的是文本通道,读的是命令输出和文件内容,图形程序画的窗口在服务器侧的 X 会话里,文本通道拿不到像素。遇到必须在图形向导里点完的安装,只能临时走传像素的路线,装完再卸掉。

Q7:判断一个方案要不要新增端口,具体查哪几处?

三处缺一不可:本机 ss -lntp 看监听地址与端口;云厂商安全组的入方向规则;应用自身配置里绑定的地址。只改应用绑回环、安全组还开着,等于没改;安全组关了、应用仍监听 0.0.0.0,同网段仍可达。评审看的是这三处的合取,不是其中一处。

Q8:多人用同一台机器做远程桌面,怎么隔离会话?

按用户分配独立 display,每人一套自己的会话,配置上给每个用户单独起 vncserver :N,并在服务端限制端口只绑回环。代价是内存按人数线性增长,且每个人的桌面环境要各自维护。如果目标是「共管且可追责」,display 隔离不够用,得引入分账号登录加命令审计,那是另一个层面的方案。

Logo

更多推荐