树莓派4上Pygame 2.1.2无法调用fbcon驱动问题求助
问题描述
- 设备:树莓派4,外接HDMI显示屏(当前为7英寸,后续将更换为4英寸)
- 运行模式:系统启动至控制台模式,开发工作通过远程桌面完成
- 核心问题:
- 使用Pygame 1.9版本时,可通过fbcon驱动正常在显示屏输出内容
- 安装pygame_gui后,Pygame被自动升级至2.1.2版本,无法正常显示,报错信息如下:
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_FBDEV = /dev/fb0
Traceback (most recent call last):
File "/home/proto/pygameui.py", line 24, in
pygame.display.init()
pygame.error: fbcon not available - 尝试切换驱动为fbcon、directfb、svgalib、kmsdrm均无效
- 降级Pygame至1.9、pygame_gui至5.7版本后,普通Pygame图形功能恢复,但pygame_gui的GUI功能无法使用
解决办法
方法1:改用KMSDRM驱动适配Pygame 2.x(推荐)
Pygame 2.x基于SDL2开发,fbcon在SDL2中支持有限,KMSDRM是更适配树莓派4硬件的驱动方案:
- 在代码初始化前添加环境变量配置:
import os # 指定使用kmsdrm驱动 os.environ["SDL_VIDEODRIVER"] = "kmsdrm" # 指定树莓派的DRM设备 os.environ["SDL_KMSDRM_DEVICE"] = "/dev/dri/card0" import pygame pygame.display.init() - 确保树莓派启用KMS功能:
编辑/boot/config.txt文件,添加或修改以下配置:
保存后重启设备生效。dtoverlay=vc4-kms-v3d max_framebuffers=2
方法2:用虚拟环境隔离依赖版本
避免全局环境下的版本冲突,分别为不同版本的Pygame+pygame_gui创建独立虚拟环境:
- 创建并激活旧版本环境(用于普通Pygame图形):
python3 -m venv pygame19_env source pygame19_env/bin/activate pip install pygame==1.9.6 pygame_gui==0.5.7 - 创建并激活新版本环境(用于pygame_gui功能):
后续在对应环境中运行代码,配合方法1的KMSDRM驱动配置测试。python3 -m venv pygame2_env source pygame2_env/bin/activate pip install pygame==2.1.2 pygame_gui==0.6.0
方法3:编译带fbcon支持的SDL2和Pygame
如果必须依赖fbcon驱动,可重新编译SDL2并启用fbcon支持,再编译对应版本的Pygame:
- 安装编译依赖:
sudo apt-get install build-essential libfreeimage-dev libopenal-dev libpango1.0-dev libsndfile-dev libtiff5-dev libwebp-dev mercurial libfreetype6-dev libssl-dev libjpeg-dev libpng-dev libx11-dev libxcursor-dev libxext-dev libxi-dev libxinerama-dev libxrandr-dev libxss-dev libxt-dev libxv-dev libxxf86vm-dev libasound2-dev libdbus-1-dev - 克隆SDL2源码并编译(启用fbcon):
hg clone https://hg.libsdl.org/SDL cd SDL mkdir build && cd build ../configure --enable-video-fbcon make -j4 sudo make install - 重新编译安装Pygame:
pip uninstall pygame -y git clone https://github.com/pygame/pygame.git cd pygame python setup.py build sudo python setup.py install
内容的提问来源于stack exchange,提问作者Petr Osipov
相关产品推荐
相关产品推荐

