树莓派带Pygame与GPIO的Python3脚本开机自启动问题
问题描述
我尝试让以下Python3脚本在树莓派开机时自动启动:
import RPi.GPIO as GPIO import time import pygame GPIO.setmode(GPIO.BCM) GPIO.setup(12, GPIO.OUT) GPIO.output(12, GPIO.LOW) pygame.init() pygame.font.init() FONT1 = pygame.font.SysFont("Arial", 24) screen = pygame.display.set_mode([480, 320], pygame.FULLSCREEN) pygame.display.set_caption("EXMATRIKULATOR") running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if event.type == pygame.MOUSEBUTTONDOWN: mouse = pygame.mouse.get_pos() if 30 <= mouse[0] < 60 and 30 <= mouse[1] < 60: GPIO.output(12, GPIO.LOW) if 90 <= mouse[0] < 120 and 30 <= mouse[1] < 60: GPIO.output(12, GPIO.HIGH) if 450 <= mouse[0] < 480 and 0 <= mouse[1] < 30: running = False screen.fill((255, 255, 255)) pygame.draw.rect(screen, (255, 0, 0), (30, 30, 30, 30)) pygame.draw.rect(screen, (0, 255, 0), (90, 30, 30, 30)) pygame.draw.rect(screen, (255, 0, 0), (450, 0, 30, 30)) screen.blit(FONT1.render("X", False, (0, 0, 0)), (458, 3)) pygame.display.flip() pygame.quit() GPIO.cleanup()
该脚本手动运行完全正常,但无法开机自启动。我已尝试多种开机自启方案,使用的是3.5英寸TFT触摸屏(搭载goodtft的LCD-show驱动),在rc.local中添加sudo python /home/pi/Desktop/pyscript.py后,触摸屏失效,移除后恢复正常;且添加该命令后开机时会出现登录提示,未添加时无此情况。此外,我已在~/.bashrc中设置alias python=python3,确保脚本使用Python3运行。
请问如何实现带有GUI和GPIO控制的Python脚本在树莓派开机后自动启动并正常显示?
解决方案
方案一:桌面环境Autostart(推荐,适配带桌面的树莓派)
rc.local在桌面会话加载前执行,此时触摸屏驱动和显示环境未完全就绪,会导致故障。Autostart能确保脚本在用户桌面会话加载完成后运行:
- 创建用户自启动目录:
mkdir -p ~/.config/autostart
- 在该目录下创建
.desktop配置文件:
nano ~/.config/autostart/pygui-script.desktop
- 粘贴以下内容(替换脚本路径为你的实际路径):
[Desktop Entry] Type=Application Name=EXMATRIKULATOR Exec=python3 /home/pi/Desktop/pyscript.py Terminal=false Hidden=false
- 保存退出(按
Ctrl+O回车,再Ctrl+X)。
开机后桌面加载完成时,脚本会自动运行,继承当前用户的显示和触摸屏驱动环境,不会出现失效问题。
方案二:Systemd服务(适合无桌面或高稳定性需求场景)
如果树莓派无桌面环境,或需要脚本意外退出后自动重启,可使用systemd服务:
- 创建服务配置文件:
sudo nano /etc/systemd/system/pygui-script.service
- 粘贴以下内容(替换
User=pi为你的用户名,ExecStart为脚本绝对路径):
[Unit] Description=GPIO and GUI Autostart Script After=graphical.target [Service] User=pi Environment=DISPLAY=:0 Environment=XAUTHORITY=/home/pi/.Xauthority ExecStart=/usr/bin/python3 /home/pi/Desktop/pyscript.py Restart=always RestartSec=5 [Install] WantedBy=graphical.target
- 重新加载systemd并启用服务:
sudo systemctl daemon-reload sudo systemctl enable pygui-script.service
该配置确保服务在图形环境启动后运行,通过设置DISPLAY和XAUTHORITY环境变量让pygame能正确访问显示设备,Restart选项可在脚本意外退出时自动重启。
额外注意事项
- 避免用
sudo运行脚本:将用户加入gpio组即可获取GPIO权限,执行sudo usermod -aG gpio pi,重启后生效。普通用户运行脚本可避免sudo导致的环境变量缺失问题。 - 用绝对路径:确保脚本路径为绝对路径,避免相对路径导致找不到脚本。
内容的提问来源于stack exchange,提问作者schokokek
相关产品推荐
相关产品推荐

