在 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 应用程序(如 geditxfce4-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 多会话中出现灰屏问题的解决方案