使用嵌入式Linux系统开发产品时,如果应用程序使用Qt开发,经常会碰到系统启动完毕,需要程序自动运行的情况。
网上提供的思路大多都是在/etc/init.d/rcS中添加启动脚本,这种方法测试之后发现并不能让程序自动启动。经过本人测试,以下方法可以很好的解决这个问题。
首先编写一个脚本relay.sh,将这个脚本和Qt的程序放在同一个文件夹下
#!/bin/bash
source /etc/profile
cd /home/linaro/bin
./QtApp &
在这个脚本中,/etc/profile中有Qt环境变量的配置,如果不需要配置环境变量,source /etc/profile这一步可以省略。
以下是profile中Qt环境变量的配置,profile中原文件内容这里就不贴出来了
export QTDIR=/usr/local/Qt-5.9.9
export set QT_QPA_FONTDIR=$QTDIR/lib/fonts
#export QT_QPA_PLATFORM_PLUGIN_PATH=$QTDIR/plugins/
export set LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
#export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
#export QWS_MOUSE_PROTO=/dev/input/event0
export set QT_QPA_FONTDIR=$QTDIR/lib/fonts/truetype/wqy
有了这个脚本后,进入/etc/xdg/autostart这个目录,这个目录中有很多desktop结尾的文件,在这里创建一个以desktop结尾的文件,文件内容如下:
[Desktop Entry]
Version=1.0.0
Name=Relay Protection App
Exec=sudo /home/linaro/bin/relay.sh
Type=Application
NotShowIn=GNOME;KDE;Unity;MATE;
StartupNotify=false
其中Exec就是需要执行的脚本,这里我用了sudo使用root来运行relay.sh脚本,不加sudo也是可以的。