V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
libook
V2EX  ›  分享创造

在 WSL 中运行 GUI(如 IDEA)

  •  
  •   libook · 2020-07-28 14:29:39 +08:00 · 5708 次点击
    这是一个创建于 454 天前的主题,其中的信息可能已经有所发展或是发生改变。

    MacOS 平台上的应用程序还是比较齐全的,像有些 Linux 软件不提供 Windows 包、有些 Windows 软件不提供 Linux 包,但基本都会提供 MacOS 的包。

    不过有时候需要用 PC 来处理一些工作上的事情,需要用的软件不能全都很好地在 Windows 或 Linux 上运行,用 VirtualBox 、VMWare 等虚拟机仍然难以达到像 MacOS 在统一平台上使用所带来的便捷性。

    了解到很多人认为 VS Code 的 WSL 扩展功能非常实用,以至于一些人去给 JetBrains提建议让 IDEA 也有类似的 WSL 扩展能力,但显然这个功能短期内不会出现。

    我想起 Linux 中的 X 是可以走网络的,所以就像看看能否在 Windows 中跑 X Server 、在 WSL 中跑 X 应用程序,然后实现从 Windows 上直接显示 WSL 中 GUI 程序的界面。

    一开始我用了 Xming 来作为 X Server,但后来这个软件要求必须赞助才能下载,所以我换了 Cygwin 里的 xlaunch,这玩意用起来、看起来和 Xming 完全一样(我怀疑哪个才是原版),甚至依靠 Cygwin 背书感觉更靠谱。

    基本思路是:

    1. 在 Windows 中运行 X Server 。
    2. 在 WSL 中安装一个终端模拟器(我用的是 Terminator )。
    3. 在 WSL 中使用 Windows 的 X Server 地址来启动终端模拟器,于是就看到 Widnows 中显示出了这个终端模拟器的界面。
    4. 在 WSL 中安装一个支持 X 的、带有 GUI 的软件(比如基于 Java 的 IDEA )。
    5. 从步骤 3 显示出的终端模拟器里像在 Linux 发行版里一样启动这个 GUI 软件。最终在 Windows 上看到这个 GUI 。

    经验证完全可行,显示正常,无卡顿,而且打开的 GUI 界面能很好响应 Windows 中拖拽到左右边填充左右半边和拖拽到上边最大化的手势。

    我调好了 xlaunch 的配置、写了启动脚本、配置了快捷方式,能够实现在 Windows 里双击快捷方式直接打开 WSL 里的终端模拟器,以及在终端模拟器里运行任何 GUI 程序都直接在 Windows 里显示。把相关配置和使用方法发到了GitHub上,欢迎提 Issue 和 PR 。

    17 条回复    2020-08-26 13:46:51 +08:00
    bjzhou1990
        1
    bjzhou1990   2020-07-28 14:34:52 +08:00
    不光 GUI,声音都可以,wsl 刚出来的时候就玩过了
    Pagliacii
        2
    Pagliacii   2020-07-28 14:37:26 +08:00
    devcat
        3
    devcat   2020-07-28 14:38:16 +08:00
    wsl 刚出的时候,就可以通过 xming 等来输出 wsl 的 x 信号,但是我当时只跑通了简单的 x 程序,跑类似 xfce 这种 desktopevironment 失败了,最终就没怎么再折腾 wsl 的 gui 了
    libook
        4
    libook   2020-07-28 15:01:21 +08:00
    @devcat 其实想想,是不是没必要整个 Desktop 都搞出来,Windows 上的 X Server 有一种模式是无缝的,就是让 X 程序界面像普通 Windows 窗口界面一样和其他 Windows 窗口混在一起用。
    nannanziyu
        5
    nannanziyu   2020-07-28 15:37:16 +08:00   ❤️ 1
    MacOS 平台上的应用程序还是比较齐全的,像有些 Linux 软件不提供 Windows 包、有些 Windows 软件不提供 Linux 包,但基本都会提供 MacOS 的包。
    ------------------------------------------------------------------------------------------------
    ???
    deorth
        6
    deorth   2020-07-29 03:19:08 +08:00
    WSL2 自带图形
    tsdbg
        7
    tsdbg   2020-07-31 01:32:14 +08:00
    @deorth 自带了么?怎么玩?我前段时间才刚遇到 WSL2 自带神奇 DNS 导致 github 连不上,修改 DNS 导致无法设置 XServer 。
    codehz
        8
    codehz   2020-07-31 16:41:55 +08:00
    xming 还是有 bug 的。。。比如 vscode 那种自绘窗口装饰的,就会在最大化的时候直接全屏
    mrcn
        9
    mrcn   2020-08-01 01:43:48 +08:00 via Android
    用 vcxsrv 就行了 然后设置一个 DISPLAY 的环境变量。输入法是个麻烦。
    typetraits
        10
    typetraits   2020-08-01 10:16:23 +08:00
    WSL 里面能跑 KDE 吗
    mingl0280
        11
    mingl0280   2020-08-01 16:17:04 +08:00 via Android
    cygwin 的 xlaunch 不就是 vcxsrv 么……
    ClutchBear
        12
    ClutchBear   2020-08-18 18:34:01 +08:00
    没有合适的输入法
    libook
        13
    libook   2020-08-19 13:30:53 +08:00
    @ClutchBear 按照我的方法,因为是用的 Win10 上的 XServer,所以可以使用 Win10 的输入法。
    libook
        14
    libook   2020-08-19 13:32:28 +08:00
    @Pagliacii
    @mrcn
    @mingl0280
    任何能在 Win10 上跑的 XServer 理论上都是可以的,我只不过提供了一个现成的方案而已。
    libook
        15
    libook   2020-08-19 13:35:15 +08:00
    @typetraits
    @devcat
    因为我的需求只是想用那些具体的软件(毕竟写代码不依赖特定的 Desktop 环境),只要这些软件最终能兼容 Windows 自己的窗口管理器就好,所以没有考虑再把 Linux 上的 Desktop 环境搞出来。
    你们如果有这方面的兴趣可以自己 Hack 一下,发到 V2EX 分享给大家。
    mingl0280
        16
    mingl0280   2020-08-19 16:13:42 +08:00 via Android
    @libook 还真不是,XMing 之类的老 XServer 有可能打不开窗口,我之前被这个坑过
    libook
        17
    libook   2020-08-26 13:46:51 +08:00
    @mingl0280 我以前一直在这个方案上用 XMing,是没问题的,所以估计可能不是 XMing 完全用不了,具体得看看其他配置或环境是否有问题。我换 Cygwin 纯粹是因为 XMing 新版都需要捐助才能下载,从理论上来说,就是需要一个在 Windows 上跑的的 XServer,你只要找到一个可用的软件,成功在 Windows 上运行兼容 WSL 内的 XClient 的 XServer 就行。
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1046 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 21:04 · PVG 05:04 · LAX 14:04 · JFK 17:04
    ♥ Do have faith in what you're doing.