将 WSL 图形输出到 Windows

本身要实现思路很简单,xorg 就行,网上教程大把大把1,更多是要说明为什么要这么做

具体步骤

  1. Windows 安装 vcxsrv
  2. Windows 运行 vcxsrv(建议选择 Multi Windows,并且打勾 Disable access control)
  3. WSL 安装 xorg
  4. ~/.bashrc里设置DISPLAY
  5. 用到的时候会自动在 Windows 里弹出窗口

这里可以写一个自启动脚本自动运行 vcxsrv -multiwindow -clipboard -wgl -ac

为什么要这么做?

一提到这个问题,很自然的就会想到,明明有虚拟机以及别的办法来解决图形界面的问题,为什么还要这么做?

首先虚拟机确实是一个很好的选择,完整的 Linux 体验。
我曾经尝试过 Manjaro 结合 hyper-v 增强模式2,总得来说虽然高分屏很难受,但是体验上还是可以接受的(换个屏幕,或者调下字体大小,调下缩放比)(当然,但就高分屏体验上,比 Windows 要差,更不用提 Mac 了)
但是真的有必要使用完整的 Linux 么?

实际上,使用 Linux 进行开发,主要是贪图包管理和各种优秀的命令
在 Windows 上有 chocolatey 和 scoop,chocolatey 必须管理员权限,而且个人认为安装位置的很混乱,scoop 每次都要 update(不过倒也不算缺点)
而 Linux 上,实际上不经配置,能直接安装的包并不多,比如很多人都会教你如何在 Ubuntu 上安装 Python3.8 、Node.js …… 实际上体验也并不是这么好
相对而言,这时使用 Arch Linux 就有相对更好的体验,起码有 AUR 的存在,基本上名字输对,大部分用得到的东西都能快速安装

而各种优秀的命令,大部分都是由移植的,再不济也可能可以自己写,而且 PowerShell 有可能本身就能实现

所以来说,但就是运行完整 Linux 本身是没必要的,甚至来说即使在 WSL 中,也没必要使用完整的桌面环境,只有某些情况下不得不使用图形界面时,可能要考虑怎么办

在这种情况下,使用上面的思路只将一个程序的窗口投到 Windows 还是有必要的
而且测试了下,包括 pygame 的按键检测都是能正常使用的,基本上应该能覆盖大部分简单情况
(实际上如果更复杂的情况,可能 WSL 都不能用,应该单独物理机装对应的系统了)

参考文章


  1. 知乎 — WSL 使用指南——04 安装桌面环境 ↩︎

  2. 知乎 — 在Windows 10的Hyper-v上安装Manjaro虚拟机 ↩︎