You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

嵌入式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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 23:18:33