systemd 开机启动Qt带gui程序

需求:

  systemd开机启动我的带gui的qt程序,当程序被关闭或者崩溃后可以马上重启。

问题:

如果按照正常的正确配置无法启动,发现不带gui的可以成功启动。(qt中main函数中用QApplication的无法启动,QCoreApplication的可以启动)。

环境:

统信 银河麒麟 (amd64和arm64架构)

解决方案1

1、编写linux启动器文件(.desktop文件)放到/etc/xdg/autostart目录下。

[Desktop Entry]
Categories=Utility;Application;
Exec=qt应用的绝对路径,或者启动qt应用脚本文件的绝对路径
Name=trustofdsignservice
Type=Application

这个方案不是以服务的方式启动应用程序,所以如果需要守护进程就需要自己写。

解决方案2

步骤:

需要的文件:

1、要启动的应用文件,以及他依赖的库等

2、启动脚本文件1(XXX1.sh)用于启动应用程序。

3、Unit配置文件(XXX.service),这个最后放到/etc/systemd/system/目录下。

4、脚本文件2(XXX2.sh)用于配置启动环境。

5、linux启动器文件(.desktop文件)

4和5步是为了在用户登录后,系统以登录的用户权限执行这句命令  xhost +,其实也有其他简单办法,但是我需要将所有操作都在安装时完成,即打包后,安装在任何一台机器上后不需要其他操作,就可以实现开机自动启动。所以用这个方法。 

文件详情

1、启动脚本1

#!/bin/bash
while [ true ]
do
/bin/sleep 1
processNum=`ps -fe | grep Qt程序名称 | grep -v grep | wc -l`
        if [ $processNum -eq 0 ];then
                export DISPLAY=:0
                xhost +
                Qt程序名称绝对路径 &
        else
                /bin/sleep 1
        fi
done

2、Unit配置XXX.service文件

[Unit]
Description= XXXXX
 
[Service]
Type=sismple
ExecStart=要执行程序的绝对路径
Restart=always
RestartSec=5

 
[Install]
WantedBy=multi-user.target

3、脚本文件2

#!/bin/bash
xhost +

4、linux启动器文件(.desktop文件)

[Desktop Entry]
Categories=Utility;Application;
Exec=脚本2的绝对路径
Name=trustofdsignservice
Type=Application

放置文件

1、qt应用程序、脚本文件1和脚本文件2,可以按照自己的需求放置。只要相互调用的绝对地址正确就可以了。

2、Unit配置XXX.service文件放到/etc/systemd/system/目录下。

3、linux启动器文件(.desktop文件)放到/etc/xdg/autostart目录下。

执行命令

打开终端执行以下命令   

 xhost +
    systemctl daemon-reload
    systemctl enable trustofdsign.service
    systemctl restart trustofdsign.service

systemd 开机启动Qt带gui程序_第1张图片

 

你可能感兴趣的:(QT,C++,qt,开发语言,linux)