WSL GUI 使用小技巧

han7 2026-07-10 14:34 1

前言


各位使用 Windows 的佬友们肯定和我一样,在 Windows 里运行 Agent 各种不得劲,用 WSL 运行 Agent 各种图形化工具的体验又很差。此文就和大家分享一下个人使用 WSL GUI 程序的小技巧,让大家蹬得更爽。


环境说明



  • Window 11。

  • WSL 版本:最新的 Release 或 PreRelease 版均可。

  • 子系统:ArchLinux。如下文有在子系统中安装软件包的命令则仅适用于 ArchLinux,用 Ubuntu/Fedora 的佬友请自己找对应的包。


1. X11 程序 RDP 窗口优化


当我们在 WSL 中运行一个 X11 协议的 GUI 程序时,Windows 中会出现一个带白色边框的程序窗口,这个白色边框真的非常讨人厌。我们可以通过修改 WSLG 相关项目的源代码,然后构建自己的 WSLG 镜像,将白色边框消除。


我自己编译了一个可以 直接下载使用的镜像。下载后在 $HOME/.wslconfig 中添加 systemDistro=<mirror_path> 配置 ,重启 WSL 即可生效。


# 配置示例,改成自己的镜像路径
[wsl2]
systemDistro=C:\\wslg_custom\\wslg_v1.0.71_fix1.0.vhd

这个 WSLG 镜像做了如下改动:



  • X11 窗口边框调整

    • 点击左上角标题栏图标可在浅色/深色间切换,默认为深色。

    • 替换了标题栏的图标。

    • 消除左、下、右三处的白色边框。



  • Alt+F12 在"标题栏模式"和"无边框模式"之间切换,默认为"标题栏模式"。

  • Alt+F11 在窗口化和最大化之间切换。

  • Alt+鼠标左键 拖动调整窗口大小。

  • Alt+鼠标右键 拖动移动窗口。

  • 支持从 Windows 剪贴板粘贴图片到 WSLg 窗口。

  • 修复了 RDP 剪贴板偶尔导致程序崩溃的 bug


如果你想自己修改编译,请查阅项目的 README.md。


2. 硬件加速图形渲染



参考:https://wiki.archlinuxcn.org/wiki/在 WSL 上安装 Arch Linux#硬件加速渲染



前提:



  • 独显和核显都支持硬件加速,建议 Windows 尽量安装最新的显卡驱动

  • Windows 宿主机已开启 3D 加速,默认都是开了的,可以在 系统>屏幕>显示卡>高级图形设置,开启 硬件加速 GPU 计划


在 WSL 子系统中,安装相关的包:


# ArchLinux
sudo pacman -S mesa-utils vulkan-dzn vulkan-icd-loader
# 要运行 32 位应用程序则还需安装 lib32-vulkan-icd-loader

# Ubuntu
# sudo apt install -y mesa-utils

在 .bashrc 或 /etc/profile 中加入环境变量:


export GALLIUM_DRIVER=d3d12
export LIBVA_DRIVER_NAME=d3d12

验证是否生效,在子系统终端中执行:


glxinfo | grep "OpenGL renderer"


  • 若输出包含 OpenGL renderer string: D3D12 等字样,说明硬件图形加速已成功开启。

  • 若输出包含 llvmpipe,则是 CPU 软件渲染,启用失败。


若 openGL 在英特尔 GPU 上依然使用 llvmpipe 软件渲染,则需要为 libedit 创建符号链接:


ln -s /usr/lib/libedit.so /usr/lib/libedit.so.2

3. 设置应用的显示协议与缩放率


目前 WSLG 在高分辨率屏幕下使用 Wayland 协议显示的图形界面 bug 还比较多,我更推荐使用 X11 协议。但 Wayland 目前已经是 WSLG 的默认协议了,所以我们在启动程序时需要手动指定 X11 协议。下文介绍各类常见应用程序如何指定 X11 协议运行并设置高分屏缩放率。


3.1 Tauri 程序


以 cc-switch 为例,指定使用 X11 协议、缩放倍率 150%,启动命令如下:


GDK_BACKEND=x11 GDK_DPI_SCALE=1.5 cc-switch

3.2 Chrome/Electron 程序


Chrome 内核提供了 force-device-scale-factor 参数可以指定缩放率,例如:


# codex-desktop
codex-desktop --force-device-scale-factor=1.5
# VSCode
code --force-device-scale-factor=1.5
# 谷歌浏览器
google-chrome-stable --force-device-scale-factor=1.5

可以通过 --ozone-platform=x11/wayland 参数指定协议,但我发现上面这几个应用默认的显示协议表现就挺好的,所以不必指定了。


3.3 GTK 程序


可以用 GDK_SCALE=2 GDK_DPI_SCALE=0.75 程序命令 来启动。



  • GDK_SCALE 只能整数倍放大

  • GDK_DPI_SCALE 可以对逻辑 DPI 进行小数倍调整


3.4 其他:JetBrains IDEA


在 IDEA VmOptions 中添加配置


# 强制使用 X11
-Dawt.toolkit.name=XToolkit
# 强制使用 Wayland
#-Dawt.toolkit.name=WLToolkit

然后在 IDEA Settings 中将程序缩放调整至与 Windows 系统一致,例如 150%。


4. 输入法安装


WSL 图形界面是一个 RDP 远程窗口,不能使用 Windows 的输入法,所以需要在子系统中安装一个输入法。以下是在 ArchLinux 中安装 Fcitx5 + 拼音输入法的教程。


4.1 安装输入法


安装 fcitx5 输入法框架与拼音输入法引擎


sudo pacman -S fcitx5-im fcitx5-chinese-addons
# fcitx5-im 包含了 fcitx5 本体、fcitx5-configtool、fcitx5-gtk、fcitx5-qt 四个包,其他系统请自行查找

4.2 添加输入法配置


在 /etc/profile 中添加如下配置


export LC_CTYPE=zh_CN.UTF-8
export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx
export SDL_IM_MODULE=fcitx
export GLFW_IM_MODULE=ibus
# 如果你了解 Linux 系统各种可配置环境变量的文件,你也可以放到你认为合适的文件中。

4.3 配置 fcitx5


使用 fcitx5-configtool 图形界面配置,在左侧输入法中添加【拼音】输入法即可。其他配置自行研究。


fcitx5-configtool

4.4 启动 fcitx5


执行以下命令启动输入法,然后打开某个程序(例如 VSCode),按一下输入法切换快捷键,就可以输入中文了。


nohup fcitx5 --disable=waylandim --disable=wayland -d >/dev/null 2>&1 &


  • tips:许多程序启动命令都不会自动转到后台,可以像这条命令一样,用 nohup 让其在后台执行,避免程序因终端关闭退出。


5. 配置中文语言环境


5.1 设置中文语言环境


为避免程序界面中文乱码,建议将语言环境与字体设置为中文:



  1. 执行 locale 命令查看当前系统语言配置,如果 LANG=zh_CN.UTF-8 就不用继续配置

  2. 编辑 /etc/locale.gen 文件,将以下配置放开
    en_US.UTF-8 UTF-8
    zh_CN.UTF-8 UTF-8


  3. 执行 sudo locale-gen 生成语言环境缓存

  4. 执行 echo $LANG 查看是否是 zh_CN.UTF-8,如果不是可以在 $HOME/.bashrc$HOME/.zshrc 等文件中添加 export LANG=zh_CN.UTF-8


5.2 设置默认中文字体



  1. 通过仓库或离线手动安装字体文件,此处不赘述

  2. 修改系统默认字体。添加配置文件 ~/.config/fontconfig/fonts.conf/etc/fonts/local.conf,内容如下:
    <?xml version="1.0"?>
    <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
    <fontconfig>
    <!-- 设置默认 sans-serif 字体 -->
    <match target="pattern">
    <test qual="any" name="family"><string>sans-serif</string></test>
    <edit name="family" mode="assign" binding="same">
    <string>更纱黑体 UI SC</string><!-- 这里设置成自己想要的字体 -->
    </edit>
    </match>
    <!-- 设置默认 serif 字体 -->
    <match target="pattern">
    <test qual="any" name="family"><string>serif</string></test>
    <edit name="family" mode="assign" binding="same">
    <string>更纱黑体 UI SC</string><!-- 这里设置成自己想要的字体 -->
    </edit>
    </match>
    <!-- 设置默认 monospace 字体 -->
    <match target="pattern">
    <test qual="any" name="family"><string>monospace</string></test>
    <edit name="family" mode="assign" binding="same">
    <string>Maple Mono NF CN</string><!-- 这里设置成自己想要的字体 -->
    </edit>
    </match>
    </fontconfig>



6. 使用 Windows 默认软件打开子系统中的文件目录


在子系统的 $HOME/.bashrc$HOME/.zshrc 中添加如下函数


# 使用 Win start 命令打开路径/文件
function o() {
linuxPath="${1:-.}"
winPath=$(wslpath -w "$linuxPath")
/mnt/c/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -Command "start $winPath"
}

然后打开一个新的终端窗口:



  • 执行 oo .,就会用 Windows 文件浏览器打开当前目录

  • 执行 o <path> ,就会用 Windows 文件浏览器打开指定目录

  • 执行 o AGENTS.md,就会使用默认 Markdown 编辑器(例如 Typora)打开文档。o <其他类型文件> 的行为与此类似,打开什么软件取决于 Windows 的文件类型关联。


结尾


本文仅是抛砖引玉,欢迎大家多多指正并分享自己的小技巧。

最新回复 (19)
  • 繁星之子卡萨蒂亚 07-10 14:36
    1

    原来WSL是可以运行GUI应用的吗?? 我之前把Agent全换到windows本机环境就是因为WSL里用不了浏览器(只能用无头的)

  • han7 楼主 07-10 14:40
    2

    完全可以的,直接在终端里执行程序命令就可以运行了。比如我这个就是 WSL 的 chrome 窗口:

  • 繁星之子卡萨蒂亚 07-10 14:41
    3

    卧槽太强了 我之前还想着单独弄个Linux的PC 现在不用了 马上开始研究

  • han7 楼主 07-10 14:44
    4

    周末有时间可以照着我的帖子折腾试一试哟,很好玩的。我也是牢 Linux 用户了,甚至坚持用 Linux 工作了两年,但 wine 企微太难用了,最后我还是迁回了 Windows,于是就有了这些 WSL 的折腾记录。

  • 繁星之子卡萨蒂亚 07-10 14:45
    5

    OKOK 我之前是因为买了steamdeck所以折腾上Linux了 (Steamdeck正好就是archlinux)(不过我感觉日常使用好像还是ubuntu没那么折腾的样子) - 感觉linux即使是GUI也比Windows舒服很多,尤其是是字体渲染方面。。 不知道为什么Windows的字体渲染就那么蛋疼

  • Waterfox 07-10 14:46
    6

    可以的

    可以跑niri嵌套版本,很爽,看起来就和真的linux桌面一样(还是有瑕疵)

  • han7 楼主 07-10 14:47
    7

    这篇帖子只提到了 WSL 图形界面程序的使用技巧,属于是进阶玩法。大家如果有 WSL 入门的基础问题也可以提问 ^-^

  • han7 楼主 07-10 14:49
    8

    嵌套一整个桌面环境进去用起来反而没有每个程序独立的 RDP 窗口舒服,非必要不建议折腾。如果是多个显示器、显示器分辨率也不一样,弄起来比较麻烦。

  • BinJun_Lee 07-10 14:50
    9

    gui透传好像最普通的ubuntu也能直接支持吧,但是还是和原生或纯的虚拟机差点意思,我先前在上面编qt桌面程序直接编崩了


    佬友这相当于是优化体验吗

  • 繁星之子卡萨蒂亚 07-10 14:51
    10

    我感觉居然可以独立RDP窗口这个太神了==

  • sund 07-10 14:53
    11

    同样痴迷于通过 WSL 体验原生 Linux ,不过很多图形化应用还是有问题。比如 PyCharm 最大化后,窗口化时的阴影还会留在原地。更恼火的就是输入法问题了 ^-^ 配置了半天,在 chrome 里能用了,PyCharm 里还是用不了。读英文终究不如中文流畅

  • han7 楼主 07-10 14:53
    12

    嗯,只是优化下使用体验。但说实话我觉得展示效果比虚拟机更流畅,不过稳定性不如虚拟机,偶尔会崩溃的。但是对于需要同时使用 Win 和 Linux 日常开发完全是足够且能够忍受的。

  • han7 楼主 07-10 14:55
    13

    你这个问题就是我提到的 Wayland 问题。参照 3.4 的技巧,使用 X11 启动就可以了,非常流畅,和 Windows 体验没差别。

  • sund 07-10 14:58
    14

    周末在家将严肃根据佬的方法配置一遍 ^-^

  • han7 楼主 07-10 14:58
    15

    如果你非要用 Wayland 协议的话,也有一个办法,就是把这个阴影效果禁用掉。这个也可以在 jetbrains vm options 中配置


    -Dsun.awt.wl.Shadow=false

    至于输入法,也是可以正常使用的,不知道你哪里配错了,可以照着我的配置试试看。

  • xdai555 07-10 23:03
    16

    使用 Windows 默认软件打开子系统中的文件目录



    感谢分享,这个功能对我很有用,以前总是觉得打开麻烦 WSL 里面的路径麻烦,但从没想过用这个方式解决 ^-^

  • iMoonway 07-10 23:11
    17


    • 独显和核显都支持硬件加速



    竟然能图形加速^-^,我以为WSL只能计算加速。原来用Ubuntu的桌面,软件渲染直接卡爆了。^-^

  • Lin Kinhan 07-11 00:44
    18

    我和你需求有点有点像但又好像不太一样,因为我的设备是公司配的电脑,12代i7和3070显卡,内存只有16G(8*2),DDR5,内存完全不够用也不想投钱升内存,现在内存价格逆天,win11的内存管理简直是灾难,再跑个wsl的gui就更不够用了

    说下我目前的方案

    1、直接整机装PVE



    • 后装KDE plasma作为主桌面

    • 按官方文档开启zram+swapfile混合压缩,LRU


    2、装一个win11虚拟机



    • 公司要求保留oem正版,折腾了一阵弄好

    • 内存给6G(最小4G+2G共享),系统内再给12G磁盘缓存

    • 远程桌面用SPICE,试过RDP、VNC最后还是SPICE体验最好,但这玩意每次都要去下载一个文件来连,巨麻烦,因此写一个脚本放桌面直接双击打开

    • 用smb作为文件共享手段


    3、装一个Debian13



    • 作为主力开发,同时也作为跑AI写代码的沙箱环境

    • LXC容器,共享宿主的独显来跑模型

    • 缺点和win的wsl一样,没有桌面环境,解决方案和佬的方案一样,装一个桌面环境用RDP连

    • 为了降低内存使用,我装的是openbox,要用什么图像化软件现装一个,但这个GUI只能说能用,要说体验还是算了吧

    • 直接mount宿主目录到lxc容器作为共享目录,再装个轻量化文件管理软件

    • 目前桌面应用只有xterm,IDEA,cursor,codex app(你没看错是桌面应用,基于mac重打包的开源项目)


    4、其他



    • 装了一个跑一些容器的纯linux的VM

    • 还装了一个immortal,作为旁路由,作用是科学


    5、目前问题



    • 用来连RDP的软件是remmina,连多个桌面是经常不定时闪退

    • 都是win11都是bug,但相对linux桌面环境来说简直降维打击,我这套桌面环境简直不忍直视,各种问题不断,让我以前觉得linux都是大神没什么bug的感觉基本改观了,或许linux就是不太时候作为助力桌面


    6、后续优化



    • 打算直接装一个桌面版debian13的VM,不走lxc,也用spice的方式去连,需要跑模型时再启动lxc容器,为什么不显卡直通VM?因为笔记本电脑HDMI副屏占用了独显

    • 没准最后还是要回归win11

  • han7 楼主 07-11 00:48
    19

    举一反三。你还可以用 Windows Terminal 或其他 Windows 上的终端直接打开 Linux 路径。把这些东西全部封装成脚本,然后在 VSCode 或者 JetBrains 这种 IDE 里,调用封装好的外部脚本,直接一键在 Windows 软件中打开 Linux 文件。

* 帖子来源Linux.do
返回