pygame.error: 没有可用的视频设备

19

我有这个设置:

 $ python -V
Python 2.7.2+
 $ python -c "import pygame; print pygame.__version__"
1.9.1release

当我运行pygame脚本时,我遇到了这个错误:

Traceback (most recent call last):
  File "/home/santosh/tmp/pygameHelloWorld.py", line 8, in <module>
    windowSurface = pygame.display.set_mode((500, 400), 0, 32)
pygame.error: No available video device

我正在使用Ubuntu,使用apt-get安装了pygame。此外,我还安装了pygame wiki页面中提到的所有依赖项。


3
请记住,pygame是建立在C库SDL之上的,因此如果出现与SDL相关的“无可用视频设备”错误消息,请尝试通过谷歌搜索找到一些额外的步骤来解决。 - Mark Hildreth
2
在设置显示模式之前,我们能看到pygameHelloWorld.py中的一些代码吗?你是否首先调用了pygame的init函数? - Haz
此外,pygame.display 的文档建议不要向 set_mode 函数传递深度值。我不认为这会导致你的问题,但你是否尝试过只调用 pygame.display.set_mode((500,400))? - Haz
1
像Mark建议的那样,我认为这可能是SDL的问题,而不是Pygame的问题。您尝试运行任何其他依赖于libsdl的应用程序了吗? - Haz
你说你已经从链接的页面安装了所有依赖项,但我没有看到SDL。SDL是否已安装? - David Jay Brady
显示剩余5条评论
8个回答

28

如果你正在UNIX系统上运行Pygame,比如Linux服务器,请尝试使用DummyVideoDriver

import os
os.environ["SDL_VIDEODRIVER"] = "dummy"

3
我不再收到错误信息,但程序卡住了。这是终端中显示的全部内容:pygame 1.9.6 来自pygame社区的问候。https://www.pygame.org/contribute.html - Paul
1
这并没有解决问题,将其设置为“DUMMY”。这是规避潜在问题的一种方法。 - Derek_P

6

根据类似的经验,最可能的问题是您的SDL软件包之一存在问题。请尝试运行以下命令。

import pygame
pygame.init()
pygame.display.list_modes()

如果你得到了一个空列表,那肯定是因为包的问题。尝试重新安装它们。
可能相关:
- SDL初始化失败,原因是:没有可用的视频设备 - 在Ubuntu 12.04 LTS中,SDL初始化失败,原因是:没有可用的视频设备
链接1: 链接2:

4
  1. 我遇到了 pygame.error: video system not initialized 错误。
  2. 编译时出现了sdl.c:1:17: fatal error: SDL.h: No such file or directory,这不是我预期的错误,因为我已经通过包管理器安装了SDL*,所以没有配置错误的可能性。
- Santosh Kumar
@SantoshKumar 这只是一个简单的错误,你的包含目录是否在路径中? - iKlsR
我添加了但是没有任何反应。 - Santosh Kumar
1
当您通过软件包管理器安装SDL时,您安装的是v1.2还是v2.x? - Haz
视频系统未初始化仅因您从未调用pygame.display.init()。然而,如果您的问题与我的类似,那可能是因为我正在Ubuntu虚拟机中进行此操作,您实际上将从此命令获得非空列表。 - trevorKirkby
显示剩余2条评论

2

这个问题可能只影响Windows XP。尝试在你的代码中添加以下内容之一:

import os
os.environ['SDL_VIDEODRIVER']='windib'

或者

import os
os.environ['SDL_VIDEODRIVER']='windlib'

祝你好运。


你安装了正确的GPU驱动程序吗?如果你正在使用台式机,则需要安装随其CD一起提供的驱动程序,而不仅仅是Windows建议的那些。这就是我所能建议的了。 - Remolten
这是一台非常老的CRT显示器,我不认为有任何驱动程序随此显示器附带。 - Santosh Kumar

0
我在尝试在Jupyter笔记本中呈现OpenAI gym时遇到了这个错误。按照fushan的回答成功地让它停止了报错,但只呈现了一张黑色的图片。通过查看https://wiki.libsdl.org/FAQUsingSDL,我发现可以使用directfb作为渲染器。代码最终如下:
import os
os.environ["SDL_VIDEODRIVER"] = "directfb"

0
猜测一下 - DISPLAY 环境变量是否被设置并/或库需要它,但是没有可用的?如果您在未提供 -X 选项的情况下通过 ssh 连接到运行此程序的 Linux 机器上,则可能会出现这种情况。

0

我用以下三个命令解决了这个问题:

sudo apt-get update

sudo apt-get dist-upgrade

sudo apt-get install libsdl1.2debian:i386

0

在Linux上,你可以使用x11解决这个问题。

确认你的SDL是带有x11支持构建的,否则你需要在添加一些库之后自行构建:

sudo apt install xorg-dev libx11-dev libgl1-mesa-glx

也许 xorg-dev 已经安装了 libx11-dev

从源代码构建 SDL 并享受它


4
请勿仅仅将某个工具或库作为答案发布。至少在答案本身中演示它是如何解决问题的。参见这里 - Yunnosch
在我的先前回答中添加了细节。 - Francesco

0

请尝试以下方法:

import pygame
from pygame.locals import *
pygame.init()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接