You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kivy在Windows WSL2环境运行失败求助:无法获取窗口

解决WSL2中Kivy无法获取Window的问题

我完全懂你现在的郁闷——昨天用Miniconda在CMD里还能好好跑的Kivy棋盘代码,今天一模一样的操作居然就报[CRITICAL] [App ] Unable to get a Window, abort.错误,代码连一行都没改,这种偶发的环境问题真的很磨人。我整理了几个最可能的排查方向,你可以跟着一步步试:

1. 先检查X服务器的连接状态

Kivy在WSL2里跑必须靠Windows端的X服务器来渲染窗口,大概率是这个连接出问题了:

  • 先确认你用的X服务器(比如VcXsrv、X410)有没有正常启动,启动时一定要勾选**"Disable access control"**(这个选项是关键,不然WSL2根本连不上)
  • 打开WSL2的终端,重新设置DISPLAY环境变量:
    export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0
    
    要是你用的是Windows 11的WSL2,也可以直接试试export DISPLAY=:0
  • 设置完后用echo $DISPLAY确认变量有没有生效,再运行你的代码试试

2. 检查conda环境的依赖是否完好

虽然之前能运行,但说不定环境里的某些依赖悄悄损坏了:

  • 先激活你的conda环境:
    conda activate 你的环境名称
    
  • 重新安装Kivy及相关依赖,确保版本兼容:
    conda install kivy -c conda-forge
    
    或者用pip重装试试:
    pip install --upgrade kivy kivy-deps.sdl2 kivy-deps.glew
    

3. 确认Windows防火墙没挡着X服务器

有时候Windows防火墙会误拦截WSL2和X服务器的通信:

  • 打开Windows防火墙的「允许应用通过防火墙」设置,找到你的X服务器(比如VcXsrv),把私有和公共网络的权限都勾上
  • 也可以临时关闭防火墙试一下,如果能正常运行,再去给X服务器配置专门的防火墙规则

4. 更新WSL2到最新版本

WSL2本身的旧版本bug也可能导致这类问题:

  • 在Windows的CMD里运行wsl --update把WSL更到最新版
  • 更新完后执行wsl --shutdown重启WSL,再打开终端运行代码

5. 用Windows原生环境临时排查

如果上面的方法都不行,你可以跳过WSL2,直接在Windows的Miniconda Prompt里运行代码:

  • 激活对应的conda环境,直接执行python 你的代码文件名.py
  • 如果能正常运行,说明问题肯定出在WSL2和X服务器的连接上,再回到第一步仔细检查X服务器的配置细节

内容的提问来源于stack exchange,提问作者user13998224

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 16:42:50