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环境变量:
要是你用的是Windows 11的WSL2,也可以直接试试export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2}'):0.0export DISPLAY=:0 - 设置完后用
echo $DISPLAY确认变量有没有生效,再运行你的代码试试
2. 检查conda环境的依赖是否完好
虽然之前能运行,但说不定环境里的某些依赖悄悄损坏了:
- 先激活你的conda环境:
conda activate 你的环境名称 - 重新安装Kivy及相关依赖,确保版本兼容:
或者用pip重装试试:conda install kivy -c conda-forgepip 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
相关产品推荐
相关产品推荐

