首页 > 解决方案 > 是否有针对从 WSL 运行的慢速 X11 服务器的解决方法?

问题描述

我最近将一个 GitHub 存储库克隆到我的 Windows 10 PC 中。由于代码主要使用 C++,因此必须对其进行编译和构建才能生成工作的 GUI。
为此,我使用了 WSL,它允许我编译、构建和运行(使用 CMake),但由于 WSL 没有自己的显示器,我不得不使用 X11 程序(VcXsrv)进行可视化。最后一个似乎使界面变得相当慢,因为 FPS 指示器永远不会超过 15,而且我被告知本机构建工作在 60 FPS。

我想知道是否有一个简单的解决方法,我可以从 WSL 中尝试以使其更快,因为我的另一个选择是尝试学习 Visual Studio。

在 WSL Ubuntu 20.04 中运行的代码是:

git clone --recurse-submodules https://github.com/nmwsharp/vector-heat-demo.git
cd vector-heat-demo
mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j4
export DISPLAY=localhost:0
./bin/vector_heat /path/to/your/mesh.obj 

在 Windows 方面,我使用 VcXsrv 设置:多个窗口,显示 0,不启动客户端,禁用本机 opengl,来自this answer

标签: user-interfacewindows-subsystem-for-linuxx11

解决方案


慢的原因是wsl1的架构。见下文。

比较 WSL1 和 WSL2

  • 在 WSL1 中,Linux 内核是一种模拟,有一个软件层将 linux 系统调用映射到 Windows 系统调用(这意味着您在访问设备时会浪费一些时间),这将导致您的情况下的低 FPS。
  • 在 WSL2 中,微软创建了一个管理程序win10并在其microsoft linux kernel上运行(您的 ubuntu、debian、...在其之上运行),这意味着WSL2由于跳过了该翻译层而更快(更多信息可以在这里找到:差异 WSL1 & WSL2
  • 我还创建了一个如何使用它的指南,X11 请参见此处(对我有用)

VSCode 连接到 WSL

  • 它只是用于编码而不是用于运行您的 gui
  • 在这种情况下,您的 WSL 中会启动一个无头 VSCode(服务器)。您的 Windows 上的 VSCode 将连接到此实例(这意味着您将拥有 linux 文件系统 +gcc toolchain可用。
  • 来自微软的 VSCode 远程 WSL 文档

推荐阅读