在 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: 传递鼠标点击

核心特点:

  1. 协议驱动: X11 传输的是绘图指令(如 “在坐标 (100,200) 绘制一个 300x400 的窗口”),而不是像素数据
  2. 网络透明: 客户端和服务器可以在不同机器上,通过网络通信
  3. 分布式渲染: 实际的图形渲染由 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)启动时:

  1. 发送 X11 请求: gedit 向 ETX (X Server) 发送 “创建窗口” 的 X11 协议命令
  2. 本地窗口创建: ETX 在 Windows 上调用 CreateWindow() 等 Win32 API,创建一个真正的 Windows 原生窗口
  3. 窗口系统管理: 这个窗口被注册到 Windows Desktop Window Manager (DWM) 中
  4. 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)  │                │
│      └─────────┘                │
└────────────────────────────────┘

技术原因:

  1. 每个远程应用都是独立的 Windows 窗口 - 不是在虚拟桌面里整体截图
  2. 共享同一窗口管理器 - 所有窗口由 Windows DWM 统一管理 Z-order
  3. 原生窗口行为 - 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 发送绘图指令而非像素数据

X11 架构图

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.

关键点:

  • ✓ 每个远程应用是独立窗口
  • ✓ 使用本地操作系统的窗口管理器
  • ✓ 这是官方设计行为,而非故障

ETX Multi-Window 文档


🎯 实用建议

何时使用 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 “重叠/混合显示” 的原因:

  1. X11 架构: ETX 在 Windows 上充当 X Server,Linux 应用是 X Client
  2. 独立窗口映射: 每个 Linux 窗口被转换为一个真实的 Windows 原生窗口
  3. 共享窗口管理器: 所有窗口由 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 配置或桌面环境设置


🔗 参考资料

官方文档

  1. X Window System - Wikipedia
    X11 架构和客户端/服务器模型的权威说明

  2. Rocket Exceed 产品页面
    Rocket Software 官方产品介绍

  3. ETX Multi-Window Mode Configuration
    官方配置文档,说明 Native window manager 的行为

  4. Z-order - Window Features (Win32 apps)
    Microsoft 官方文档,解释窗口 Z-order (堆叠顺序) 概念

相关技术

浏览器研究记录

本文的技术细节通过以下浏览器研究验证:


💡 扩展阅读

如果你想深入了解 X11 窗口系统和远程显示技术,推荐:

  • 学习 X11 协议基础 (Xlib, XCB)
  • 了解 Wayland 协议 (下一代显示服务器协议)
  • 研究 RDP/VNC 的帧缓冲传输机制
  • 探索 WSLg 的 Weston + RDP 后端实现

对于 ETX 多会话灰屏问题的解决方案,可参考我之前的文章:
RHEL 8/9 下 Xfce 桌面在 ETX 多会话中出现灰屏问题的解决方案