Python 2.7 pygame初始化帧缓冲区或x服务器
我有一个类来检查合适的帧缓冲区,它工作得很好。一对计算机(大部分是嵌入式旧板)没有帧缓冲区,因此我删除了init(self):函数,并手动将其设置为在X下运行。这两种方法都适用于各自的系统,我只是厌倦了每次更改时移植它 以下是工作帧缓冲区代码:Python 2.7 pygame初始化帧缓冲区或x服务器,python-2.7,pygame,framebuffer,Python 2.7,Pygame,Framebuffer,我有一个类来检查合适的帧缓冲区,它工作得很好。一对计算机(大部分是嵌入式旧板)没有帧缓冲区,因此我删除了init(self):函数,并手动将其设置为在X下运行。这两种方法都适用于各自的系统,我只是厌倦了每次更改时移植它 以下是工作帧缓冲区代码: class wxdisplay : screen = None; def __init__(self): "Ininitializes a new pygame screen using
class wxdisplay :
screen = None;
def __init__(self):
"Ininitializes a new pygame screen using the framebuffer"
# Based on "Python GUI in Linux frame buffer"
# http://www.karoltomala.com/blog/?p=679
disp_no = os.getenv("DISPLAY")
if disp_no:
print "I'm running under X display = {0}".format(disp_no)
# Check which frame buffer drivers are available
# Start with fbcon since directfb hangs with composite output
drivers = ['fbcon', 'directfb', 'svgalib']
found = False
for driver in drivers:
# Make sure that SDL_VIDEODRIVER is set
if not os.getenv('SDL_VIDEODRIVER'):
os.putenv('SDL_VIDEODRIVER', driver)
try:
pygame.display.init()
except pygame.error:
print 'Driver: {0} failed.'.format(driver)
continue
found = True
break
if not found:
raise Exception('No suitable video driver found!')
size = (pygame.display.Info().current_w, pygame.display.Info().current_h)
print "Framebuffer size: %d x %d" % (size[0], size[1])
self.screen = pygame.display.set_mode(size, pygame.FULLSCREEN)class wxdisplay :
以下是非帧缓冲版本:
class wxdisplay :
pygame.init()
size = (1024, 768)
screen = pygame.display.set_mode(size)
print "Framebuffer size: %d x %d" % (size[0], size[1])
我想尝试初始化帧缓冲区,如果失败,尝试在控制台上运行它。我尝试过的每一件事,如果尝试过的或例外的都失败了
class wxdisplay :
def __init__(self):
# Try to use framebuffer, and use the local X server if not there
try:
screen = None;
"Ininitializes a new pygame screen using the framebuffer"
# Based on "Python GUI in Linux frame buffer"
# http://www.karoltomala.com/blog/?p=679
disp_no = os.getenv("DISPLAY")
print("disp_no " +disp_no)
if disp_no:
print "I'm running under X display = {0}".format(disp_no)
# Check which frame buffer drivers are available
# Start with fbcon since directfb hangs with composite output
drivers = ['fbcon', 'directfb', 'svgalib', 'xvfb', 'Xvfb']
found = False
for driver in drivers:
# Make sure that SDL_VIDEODRIVER is set
if not os.getenv('SDL_VIDEODRIVER'):
os.putenv('SDL_VIDEODRIVER', driver)
try:
print("Driver: "+driver)
pygame.display.init()
except pygame.error:
print 'Driver: {0} failed.'.format(driver)
continue
found = True
print("break")
break
if not found:
raise Exception('No suitable video driver found!')
size = (pygame.display.Info().current_w, pygame.display.Info().current_h)
print "Framebuffer size: %d x %d" % (size[0], size[1])
self.screen = pygame.display.set_mode(size, pygame.FULLSCREEN)
except:
print('No suitable Framebuffer found!')
pygame.init()
size = (1024, 768)
print "X server size: %d x %d" % (size[0], size[1])
self.screen = pygame.display.set_mode(size)
在以下情况下失败:
starting from __main__ call
disp_no localhost:11.0
I'm running under X display = localhost:11.0
Driver: fbcon
Driver: fbcon failed.
Driver: directfb
commandline read: python
commandline read: ./PiWxDisplay.py
~~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.2.10 |~~~~~~~~~~~~~~~~~~~~~~~~~~
(c) 2001-2008 The world wide DirectFB Open Source Community
(c) 2000-2004 Convergence (integrated media) GmbH
----------------------------------------------------------------
(*) DirectFB/Core: Single Application Core. (2012-05-20 13:17)
(!) Direct/Util: opening '/dev/fb0' and '/dev/fb/0' failed
--> No such file or directory
(!) DirectFB/FBDev: Error opening framebuffer device!
(!) DirectFB/FBDev: Use 'fbdev' option or set FRAMEBUFFER environment variable.
(!) DirectFB/Core: Could not initialize 'system_core' core!
--> Initialization error!
Driver: directfb failed.
Driver: svgalib
Driver: svgalib failed..
No suitable Framebuffer found!
X server size: 1024 x 768
Traceback (most recent call last):
File "./PiWxDisplay.py", line 366, in <module>
wxdisplay().start_screen()
File "./PiWxDisplay.py", line 66, in __init__
self.screen = pygame.display.set_mode(size)
pygame.error: No available video device
从主调用开始
disp_no localhost:11.0
我在X display=localhost:11.0下运行
司机:fbcon
司机:fbcon失败了。
司机:directfb
命令行读取:python
命令行读取:./PiWxDisplay.py
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DirectFB 1.2.10|~~~~~~~~~~~~~~~~~~~~~~~~~~
(c) 2001-2008全球DirectFB开源社区
(c) 2000-2004 Convergence(集成媒体)有限公司
----------------------------------------------------------------
(*)DirectFB/Core:单应用程序核心。(2012-05-20 13:17)
(!)Direct/Util:打开“/dev/fb0”和“/dev/fb/0”失败
-->没有这样的文件或目录
(!)DirectFB/FBDev:打开帧缓冲区设备时出错!
(!)DirectFB/FBDev:使用“FBDev”选项或设置帧缓冲区环境变量。
(!)DirectFB/Core:无法初始化“system_Core”Core!
-->初始化错误!
驱动程序:directfb失败。
司机:svgalib
驱动程序:svgalib失败。。
找不到合适的帧缓冲区!
X服务器大小:1024 X 768
回溯(最近一次呼叫最后一次):
文件“/PiWxDisplay.py”,第366行,在
wxdisplay().启动屏幕()
文件“/PiWxDisplay.py”,第66行,在__
self.screen=pygame.display.set_模式(大小)
pygame.error:没有可用的视频设备
我显然不完全理解如何正确初始化pygame。我怎么才能把它弄到手呢
您已将SDL\u视频驱动程序环境更改为仅检查fb设备 我建议在调用异常处理程序之前使用此函数:
os.putenv('SDL_VIDEODRIVER', 'x11')
或者取消设置SDL\u VIDEODRIVER环境变量,这样pygame.init()就不会认为它已经被处理了
请参阅:迟交的答案,但我希望我能早点尝试: 您可能需要是root用户才能使用帧缓冲区驱动程序。
(这对我的情况很有帮助:RaspberryPi 2没有运行X,但连接了屏幕。我现在可以通过SSH或直接在RPi上打开显示器)根据您的建议,我将“x11”添加到要尝试的驱动程序列表中。drivers=['fbcon','directfb','svgalib','xvfb','x11'],它在控制台(以前失败)和SSH会话中都能工作。谢谢杰出的很高兴听到这个消息。我只是在寻找与adafruit pygame scope钩子有关的其他东西时发现了你的问题,我自己也在寻找。。。但你的问题我已经过去了:)