我正在尝试让 pygame 将 anything 发送到运行精简版 raspbian 的树莓派上的帧缓冲区 /dev/fb0。我通过 ssh 连接,图像应该显示在 HDMI 输出上。
我可以发送一些东西到 /dev/fb0 显示出来
sudo fbi -T 1 1.jpg
发送图像文件,我可以在显示器上看到
while true; do sudo cat /dev/urandom > /dev/fb0; sleep .01; done
发送白噪声。
如何将 pygame 连接到“/dev/fb0”?
我尝试了很多例子,但没有一个起作用。
例如这段代码给了我一个错误
import os, pygame, time
def setSDLVariables(driver):
print("Setting SDL variables...")
os.environ["SDL_FBDEV"] = "/dev/fb0"
os.environ["SDL_VIDEODRIVER"] = driver
print("...done")
def printSDLVariables():
print("Checking current env variables...")
print("SDL_VIDEODRIVER = {0}".format(os.getenv("SDL_VIDEODRIVER")))
print("SDL_FBDEV = {0}".format(os.getenv("SDL_FBDEV")))
setSDLVariables('fbcon')
printSDLVariables()
try:
pygame.init()
except pygame.error:
print("Driver '{0}' failed!".format(driver))
size = (pygame.display.Info().current_w, pygame.display.Info().current_h)
print("Detected screen size: {0}".format(size))
退货
pi@raspberrypi:~/pve_img $ sudo python3 pg.py
pygame 2.1.2 (SDL 2.0.14, Python 3.9.2)
Hello from the pygame community. https://www.pygame.org/contribute.html
Setting SDL variables...
...done
Checking current env variables...
SDL_VIDEODRIVER = fbcon
SDL_FBDEV = /dev/fb0
Traceback (most recent call last):
File "/home/pi/pve_img/pg.py", line 22, in <module>
size = (pygame.display.Info().current_w, pygame.display.Info().current_h)
pygame.error: video system not initialized
关于 2021 年使用帧缓冲区运行 pygame 有什么提示吗?
解决方案:
我已经使用 pip 安装了 pygame。
sudo python3 -m pip install pygame
卸载 pygame 和安装 pygame 的方式不同
sudo apt-get install python3-pygame
然后我可以将内容发送到屏幕上。示例
screen = pygame.display.set_mode(size )
clock = pygame.time.Clock()
for x in range(20):
screen.fill((0, 0, 0))
pygame.display.flip()
clock.tick(1)
screen.fill((200, 200, 0))
pygame.display.flip()
clock.tick(1)
安装适用于上述代码的版本。
对于任何想尝试这个的人: 虽然这可行,但在生产中使用起来太麻烦了。我们最终启动了 xserver 并直接启动 pygame(不显示桌面)——这会导致更少的问题,并且仍然允许启动到 pygame。