嵌入式Linux中Kivy-KivyMD重启运行时无法读取config.ini的问题求助
问题
在嵌入式Linux环境中运行Kivy-KivyMD,通过rc5.d目录下的自定义脚本实现系统重启后自动启动指定Python文件。遇到的问题是:系统重启后程序首次运行时会忽略已修改的config.ini,但手动杀死进程后重新运行该文件,就能正常读取修改后的配置内容。请问如何让系统重启时程序可以正确读取config.ini?
启动脚本
case "$1" in start|"") cd /home/root/mykivydirect python3 main.py & ;; stop) ;; *) echo "Usage: guistart {start|stop}" >&2 exit 1 ;; esac exit 0
main.py代码
import os os.environ['KIVY_GL_BACKEND'] = 'sdl2' #os.environ['KIVY_KEYBOARD_MODE'] = 'dock' #os.environ['GRAPHICS_ROTATION'] = '180' #os.environ['GRAPHICS_SHOW_CURSOR'] = '0' from kivy.config import Config import os.path def get_config_file_name(): # return any file name here return os.path.join(os.path.expanduser('~/mykivydirect'), 'config.ini') #from kivy.config import Config Config.read(get_config_file_name())
解决方法
使用绝对路径定位配置文件:系统启动时的环境变量可能和用户登录后不同,
~的解析可能出现偏差。直接用绝对路径替换路径拼接逻辑,避免路径错误:
修改main.py中的get_config_file_name函数:def get_config_file_name(): return '/home/root/mykivydirect/config.ini'添加启动延迟:系统刚重启时,可能存在文件系统未完全挂载、环境未初始化完成的情况,导致配置文件读取失败。在启动脚本中添加延迟后再启动程序:
case "$1" in start|"") cd /home/root/mykivydirect sleep 5 # 延迟5秒,可根据实际情况调整 python3 main.py & ;; stop) ;; *) echo "Usage: guistart {start|stop}" >&2 exit 1 ;; esac exit 0指定Kivy配置文件路径:通过环境变量强制Kivy加载你自定义的配置文件,避免默认配置覆盖。在
main.py开头添加:os.environ['KIVY_CONFIG'] = '/home/root/mykivydirect/config.ini'检查配置文件权限:确保系统启动时运行脚本的用户(通常是root)对
config.ini有读取权限。执行以下命令检查并修改权限:ls -l /home/root/mykivydirect/config.ini # 如果权限不足,执行 chmod 644 /home/root/mykivydirect/config.ini使用Python绝对路径:嵌入式系统中可能存在多个Python版本,系统启动时的
PATH变量可能不包含用户登录后的路径。直接用Python的绝对路径调用,避免执行错误的解释器:
将启动脚本中的python3替换为实际路径,比如/usr/bin/python3:/usr/bin/python3 main.py &
内容的提问来源于stack exchange,提问作者Buket
相关产品推荐
相关产品推荐

