在 Windows 上使用 Rocket Exceed TurboX (ETX) 的 multi-window 模式连接 Linux 桌面(如 xfce4 + LightDM)时,许多用户会困惑:为什么 Windows 本地应用的 GUI 窗口会与来自 Linux 的 GUI 窗口在同一屏幕层次上混合显示、相互遮挡?
这种现象根本上不是 LightDM 或 xfce4 的问题,而是 X11 图形系统的客户端/服务器架构与 Windows 窗口管理器结合的原理性行为。本文将深入解释这一机制。
[!NOTE] 参考资料来源:
🚀 核心原理:X11 客户端/服务器架构
X Window System 基本概念
X Window System (X11) 是 UNIX/Linux 传统的网络透明图形系统,采用独特的客户端/服务器模型:
关键术语 (常被误解):
| 组件 | 运行位置 | 职责 |
|---|---|---|
| X Server | 用户的本地计算机(如 Windows + ETX) | 管理显示器、键盘、鼠标;渲染窗口 |
| X Client | 远程 Linux 服务器(或本地) | GUI 应用程序(如 gedit、xfce4-terminal) |
[!IMPORTANT] 容易混淆的点: 在 X11 中,”Server” 指的是显示端(你坐在前面的机器),而 “Client” 是应用程序。这与传统 C/S 架构的命名正好相反!
X11 工作流程
sequenceDiagram
participant App as X Client<br/>(Linux 应用)
participant Net as 网络
participant XSrv as X Server<br/>(ETX on Windows)
participant Display as 显示器/鼠标
App->>Net: 发送绘图指令<br/>("画窗口于 X,Y")
Net->>XSrv: 传输 X11 协议命令
XSrv->>Display: 渲染窗口到屏幕
Display->>XSrv: 用户点击鼠标
XSrv->>Net: 发送输入事件
Net->>App: 传递鼠标点击
核心特点:
- 协议驱动: X11 传输的是绘图指令(如 “在坐标 (100,200) 绘制一个 300x400 的窗口”),而不是像素数据
- 网络透明: 客户端和服务器可以在不同机器上,通过网络通信
- 分布式渲染: 实际的图形渲染由 X Server 完成
🪟 ETX Multi-Window 模式的实现机制
ETX 充当 X Server 的角色
在 ETX multi-window 模式下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
┌─────────────────────────────────────┐
│ Windows 10/11 操作系统 │
│ ┌───────────────────────────────┐ │
│ │ Rocket ETX │ │
│ │ (充当 X Server) │ │
│ │ │ │
│ │ ┌─────┐ ┌─────┐ ┌─────┐ │ │
│ │ │Win1 │ │Win2 │ │Win3 │ │ │ ← 每个 Linux 应用
│ │ └─────┘ └─────┘ └─────┘ │ │ 对应一个独立的
│ └───────────────────────────────┘ │ Windows 窗口
│ │
│ 本地 Windows 应用: │
│ ┌─────┐ ┌─────┐ │
│ │Edge │ │Word │ │
│ └─────┘ └─────┘ │
└─────────────────────────────────────┘
窗口创建过程
当远程 Linux 应用(如 gedit)启动时:
- 发送 X11 请求:
gedit向 ETX (X Server) 发送 “创建窗口” 的 X11 协议命令 - 本地窗口创建: ETX 在 Windows 上调用
CreateWindow()等 Win32 API,创建一个真正的 Windows 原生窗口 - 窗口系统管理: 这个窗口被注册到 Windows Desktop Window Manager (DWM) 中
- Z-order 共享: 所有窗口(无论来自 Linux 还是 Windows)共享同一个窗口堆叠顺序 (Z-order)
为什么看起来像”重叠/混合”
在传统远程桌面方案(RDP/VNC)中:
1
2
3
4
5
6
7
8
9
┌──────────────────────┐
│ 本地 Windows │
│ ┌────────────────┐ │
│ │ RDP 窗口 │ │ ← 远程桌面被封装在
│ │ ┌──────────┐ │ │ 一个单一容器内
│ │ │ Linux 桌面│ │ │
│ │ └──────────┘ │ │
│ └────────────────┘ │
└──────────────────────┘
ETX multi-window 模式完全不同:
1
2
3
4
5
6
7
8
9
10
11
12
┌────────────────────────────────┐
│ Windows Desktop │
│ │
│ ┌──────┐ ┌───────┐ │
│ │gedit │ │ Edge │ │ ← Linux 和 Windows
│ │(Linux)│ │(Win) │ │ 窗口处于同一层级
│ └──────┘ └───────┘ │
│ ┌─────────┐ │
│ │Terminal │ │
│ │(Linux) │ │
│ └─────────┘ │
└────────────────────────────────┘
技术原因:
- 每个远程应用都是独立的 Windows 窗口 - 不是在虚拟桌面里整体截图
- 共享同一窗口管理器 - 所有窗口由 Windows DWM 统一管理 Z-order
- 原生窗口行为 - Linux 应用的窗口可以:
- 最小化到 Windows 任务栏
- 使用 Alt+Tab 切换
- 拖动到不同显示器
- 与本地窗口相互遮挡
🔍 与其他方案的对比
远程显示技术对比
| 技术方案 | 传输内容 | 窗口呈现 | 本地/远程窗口关系 |
|---|---|---|---|
| VNC | 像素帧缓冲 | 单一容器窗口 | 完全隔离 |
| RDP | 渲染指令+像素数据 | 单一桌面窗口 | 完全隔离 |
| X11 Forwarding | X11 协议命令 | 独立原生窗口 | 混合层级 ✓ |
| ETX Multi-Window | X11 协议命令 | 独立原生窗口 | 混合层级 ✓ |
模式对比:Single vs Multi-Window
| 特性 | Single Window (Desktop) | Multi-Window (Seamless) |
|---|---|---|
| 显示方式 | 整个 Linux 桌面在一个窗口内 | 每个应用是独立窗口 |
| 窗口管理器 | 远程 Linux WM (如 xfwm4) | 本地 Windows DWM |
| 任务栏集成 | 无(远程桌面内有自己的面板) | 完全集成到 Windows 任务栏 |
| 窗口混合 | 不会混合 | 会混合 ✓ |
| 适用场景 | 需要完整 Linux 桌面环境 | 只用特定 Linux 应用 |
🧠 为什么容易产生困惑
常见误解
误解 1: “这是 ETX 的 Bug”
实际: 这是 X11 multi-window 模式的设计特性。官方文档明确说明:
When using the Native window manager, remote Linux application windows are managed by the local Windows operating system.
— Rocket ETX Documentation
误解 2: “应该像 VNC 那样隔离”
实际: Multi-window 模式的目标就是无缝集成,而非隔离。如果需要隔离,应使用 Single Window (Desktop) 模式。
误解 3: “X Server 应该在 Linux 上”
实际: 在 X11 架构中,X Server 在显示端。当你用 ETX 连接 Linux 时:
- ETX (Windows) = X Server
- Linux 应用 = X Client
直观类比
想象你用 WSLg 在 Windows 11 上运行 Linux GUI 应用:
1
2
# Windows 11 + WSL2
wsl -e gedit
此时 gedit 会弹出一个窗口,看起来就像 Windows 原生应用,可以与 Edge、VS Code 等窗口自由叠放 —— 这就是 X11 multi-window 模式的工作原理!
✅ 技术验证
X11 架构验证
根据 Wikipedia - X Window System:
The X Window System is a network-transparent windowing system that was designed at MIT. X provides the basic framework for a GUI environment: drawing and moving windows on the display device and interacting with a mouse and keyboard.
关键点:
- ✓ X11 是网络透明的
- ✓ X Server 管理显示设备
- ✓ X Client 发送绘图指令而非像素数据

ETX Multi-Window 模式验证
根据 Rocket ETX 官方文档:
In Multiple window mode, each remote application appears in its own window on your Windows desktop. The Native window manager setting allows the local operating system to manage these windows.
关键点:
- ✓ 每个远程应用是独立窗口
- ✓ 使用本地操作系统的窗口管理器
- ✓ 这是官方设计行为,而非故障

🎯 实用建议
何时使用 Multi-Window 模式
适用场景:
- ✅ 主要在 Windows 工作,偶尔需要特定 Linux 工具
- ✅ 希望 Linux 应用与 Windows 应用无缝协作
- ✅ 需要在多个显示器间自由移动窗口
- ✅ 希望减少 Alt+Tab 的层级深度
示例用例:
1
2
3
4
5
6
7
8
9
10
11
Windows 主力环境:
- Outlook (邮件)
- Edge (浏览器)
- Excel (数据分析)
Linux 辅助工具:
- Cadence Virtuoso (IC 设计)
- Synopsys VCS (仿真)
- GNU Octave (科学计算)
→ 所有窗口在同一桌面上自由混合
何时使用 Single Window 模式
适用场景:
- ✅ 需要完整的 Linux 桌面环境
- ✅ 希望远程桌面与本地桌面完全隔离
- ✅ 使用大量 Linux 原生工具和工作流
- ✅ 需要远程桌面的多工作区(Workspace)功能
配置建议
如果希望隔离远程窗口,修改 ETX Profile:
1
2
Window Mode: Single Window
Launch Command: xfce4-session
如果希望无缝集成,使用默认:
1
2
Window Mode: Multiple Window (Advanced)
Window Manager: Native
📊 总结
核心结论
出现本地 Windows 应用 GUI 和远程 Linux 应用 GUI “重叠/混合显示” 的原因:
- X11 架构: ETX 在 Windows 上充当 X Server,Linux 应用是 X Client
- 独立窗口映射: 每个 Linux 窗口被转换为一个真实的 Windows 原生窗口
- 共享窗口管理器: 所有窗口由 Windows DWM 统一管理,自然会相互遮挡
[!IMPORTANT] 这不是 Bug,而是 X11 multi-window 模式的工作机制
技术要点
| 概念 | 说明 |
|---|---|
| X Server | 运行在显示端 (Windows + ETX) |
| X Client | 应用程序 (Linux GUI 软件) |
| 传输协议 | X11 绘图指令,非像素流 |
| 窗口创建 | ETX 调用 Win32 API 创建原生窗口 |
| 窗口管理 | Windows DWM 统一管理 Z-order |
快速诊断
如果你不希望窗口混合,不是去修复 LightDM 或 xfce4,而是:
✅ 正确做法: 在 ETX Profile 中切换到 Single Window (Desktop) 模式
❌ 错误做法: 尝试修改 X11 配置或桌面环境设置
🔗 参考资料
官方文档
-
X Window System - Wikipedia
X11 架构和客户端/服务器模型的权威说明 -
Rocket Exceed 产品页面
Rocket Software 官方产品介绍 -
ETX Multi-Window Mode Configuration
官方配置文档,说明 Native window manager 的行为 -
Z-order - Window Features (Win32 apps)
Microsoft 官方文档,解释窗口 Z-order (堆叠顺序) 概念
相关技术
-
WSLg - Running GUI Apps
Windows Subsystem for Linux 的图形应用支持,使用类似的 X11 转发机制 -
Seamless Remote Linux Desktop in Windows
第三方教程,解释无缝模式的工作原理
浏览器研究记录
本文的技术细节通过以下浏览器研究验证:
💡 扩展阅读
如果你想深入了解 X11 窗口系统和远程显示技术,推荐:
- 学习 X11 协议基础 (Xlib, XCB)
- 了解 Wayland 协议 (下一代显示服务器协议)
- 研究 RDP/VNC 的帧缓冲传输机制
- 探索 WSLg 的 Weston + RDP 后端实现
对于 ETX 多会话灰屏问题的解决方案,可参考我之前的文章:
RHEL 8/9 下 Xfce 桌面在 ETX 多会话中出现灰屏问题的解决方案