You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows 11 23H2更新后WSL X11转发失效的修复方法

Windows 11 23H2更新后WSL X11转发失效的修复方法

碰到Windows更新后WSL的X11转发突然失效,确实挺头疼的!结合你的描述和社区里的解决方案,给你整理几个靠谱的修复步骤,你可以挨个试试:

一、先更新WSL和XServer到最新版本

Windows 23H2的网络适配可能对旧版WSL或VcXsrv不友好,先做基础更新:

  • 打开管理员权限的Windows终端,执行:
    wsl --update
    wsl --shutdown
    
    等WSL更新完成后再重新启动。
  • 确保你用的VcXsrv(也就是XLaunch)是最新版本,直接去微软商店或者官方渠道更新就行,旧版本的权限控制逻辑可能和23H2冲突。

二、修正DISPLAY变量的配置

你之前用resolv.conf里的nameserver来设置DISPLAY,但23H2更新后WSL的虚拟网络IP可能发生了变化,这个值不一定是Windows主机的真实IP了,换两种更稳定的设置方式:

方式1:用WSL自带的环境变量(推荐)

Windows 11 22H2及以上版本的WSL自带了WSL_HOST变量,直接用它来设置DISPLAY更靠谱:
打开~/.bashrc,把原来的X11配置替换成:

# WSL自动获取Windows主机IP
export DISPLAY=$WSL_HOST:0.0
export LIBGL_ALWAYS_INDIRECT=1

保存后执行source ~/.bashrc生效,再跑echo $DISPLAY,应该会显示你的Windows主机局域网IP(比如192.168.x.x:0.0)。

方式2:更精准的IP提取

如果WSL_HOST没生效,试试用hostname -I提取WSL能访问的Windows主机IP:

export DISPLAY=$(hostname -I | awk '{print $1}'):0.0
export LIBGL_ALWAYS_INDIRECT=1

同样执行source ~/.bashrc生效后测试。

三、检查VcXsrv的关键配置和防火墙

你的XLaunch配置里有个很容易忽略的点,必须开启禁用访问控制,否则WSL的请求会被拦截:

  • 重新打开XLaunch,在Extra settings步骤,一定要勾选Disable access control(这个是核心!23H2更新后默认权限更严格)
  • 检查Windows防火墙:找到VcXsrv的规则,确保它允许通过私有网络访问,如果之前没开,手动添加允许规则。
  • 另外,XLaunch的Display值可以改成0试试,有时候-1会导致识别问题。

四、改用WSL内置的X11转发(无需VcXsrv)

如果你不想再折腾VcXsrv,Windows 11 22H2+的WSL已经支持自动X11转发,不用额外装XServer:

  1. 先关闭所有WSL实例:wsl --shutdown
  2. 打开管理员权限的PowerShell,执行:
    reg add HKLM\Software\Microsoft\Windows\CurrentVersion\Lxss /v DefaultX11Forwarding /t REG_DWORD /d 1
    
  3. 重新打开WSL,直接运行GUI应用(比如xcalc)试试,这时候不需要手动设置DISPLAY,系统会自动处理转发。

你可以先从更新和修正DISPLAY变量开始试,这两个是最常见的解决方法,应该能解决你的问题!

备注:内容来源于stack exchange,提问作者nullromo

火山引擎 最新活动