Linux:Ubuntu18.04下开机自启动QT图形化界面

Linux:Ubuntu18.04下开机自启动QT图形化界面


XServer启动的时候会调用

/etc/X11/Xsession.d/55gnome-session_gnomerc

这个脚本的内容就是检测

$HOME/.gnomerc是否存在,如果存在就调用 。

我们将开机启动脚本写在这里就行了。

vim ~/.gnomerc

#!/bin/bash

cd /home/be/PMS_C/env

./run.sh &

总结:

1、没有GUI的程序可以直接写在/etc/rc.local中。

2、有GUI的程序必须等xServer启动后,再启动才能正常运行。

而ubuntu使用的是gnome,所以在这里我们使用.gnomerc文件。

Chapter1 Linux:Ubuntu18.04下开机自启动QT图形化界面

原文链接:https://blog.csdn.net/m0_57431812/article/details/132228123

困扰了一天的时间,终于解决,好了,废话不多说,直接上干货。

一、创建rc.local文件

bash 复制代码
sudo vim /etc/rc.local

#!/bin/sh -e

#如果运行不了的话试试把第一行的sh改为bash

# rc.local

#

echo "自启动成功" > /usr/local/test.log
# 这里写要自动运行的命令或者脚本   

#上面echo命令是运行创建普通文件信息,与QT图形界面无关,下述命令为运行程序命令

#举例:bash  /home/path/to/my/application/start.sh &

#/home/path/to/my/application/这个是你想要运行的程序路径,最后一定要加上&表示程序

exit 0 

附图,让大家更理解:

添加可执行权限:

bash 复制代码
sudo chmod +x /etc/rc.local

如果在里面运行了脚本记得给脚本也添加可执行权限(在脚本所在文件夹下打开终端)

bash 复制代码
sudo chmod +x start.sh

二、建立rc-local.service文件

bash 复制代码
 sudo vim /etc/systemd/system/rc-local.service

输入如下内容:

bash 复制代码
[Unit]

Description=/etc/rc.local Compatibility

ConditionPathExists=/etc/rc.local

After=network.target

[Service]

Type=forking

ExecStart=/etc/rc.local start

TimeoutSec=0

StandardOutput=tty

RemainAfterExit=yes

SysVStartPriority=99

User=当前用户(hjx)

Environment=DISPLAY=:0

[Install]

WantedBy=graphical.target

继续附图:

保存后退出

三、启动服务查看启动状态

如果这里启动失败了需要回头更改rc.local文件看看是不是有语法错误或者执行的脚本有没有问题

bash 复制代码
sudo systemctl start rc-local.service

sudo systemctl status rc-local.service

如果启动一切无误且状态正常的话使能开机自启动

bash 复制代码
sudo systemctl enable rc-local.service

附图

如果查看状态和我一样的话,就说明程序启动成功了

四、重启

电脑重启后就会自动执行,跳出QT图形运行界面 ,成功!

Chapter2 将QT应用作为开机自启动(Linux系统)

原文链接:https://blog.csdn.net/ice_masters/article/details/113358662

今天介绍,如何将一个Qt程序,在开机启动时显示。

方法一:

一种是在开机启动文件添加应用路径:一般会有rc-local.service服务的话,在系统的/etc/rc.local文档中,将我们要开启设置或者启动的程序或者命令行放进去。(编写格式要求,和shell中是一样的。)

另外关于如何将系统中的rc-local.service服务开启,我会在另一篇文章中写。

方法二:

另一种,是把qt应用程序,作为开启后桌面的一个应用,也可以说是在linux中添加应用程序到applications列表。

(至于是否必须是有桌面管理,或者前提是有图形桌面,这个具体要求,需要再斟酌一下。)

1.打开终端,切换到root账户,然后在/usr/share/applications目录下创建一个名为QRDecode的启动配置文件,代码:

bash 复制代码
cd /usr/share/applications

2.使用touche命令创建一个以.desktop结尾的文件。

内容如下

bash 复制代码
  [Desktop Entry]

    Version=1.0

    Name=QRDecode

    Exec=/home/test/QRDecode   (这个是那个可执行文件的位置)

    StartupNotify=false

    NoDisplay=true

    Type=Application

    Categories=System;Utility;Archiving;

3.将这个QRDecode.desktop文件拷贝到/etc/xdg/autostart目录下。

bash 复制代码
cp -f QRDecode.desktop  /etc/xdg/autostart

4.重启就能显示那个qt程序了。

bash 复制代码
reboot -n

介绍一下关于.destop文件每个配置节点的意义:

bash 复制代码
[Desktop Entry]    必填,表明该文件是一个Desktop Entry文件,节点意思十分明显,桌面入口。Desktop Entry实际上是一个文件标准,该标准由FreeDesktop.org制定;
Comment    这是应用程序的描述,通常会在搜索应用程序的界面看到这个描述(鼠标放到应用程序图标上时);
Comment[zh_CN]    同样的作用,表明使用中文。同理,[]里面可以书写多国语言;
Exec    必填,应用程序启动的指令,可以带上参数运行,实际上这与在终端的启动指令是一样的;
GenericName    应用程序通用名称,他会显示在搜索结果以及非搜索结果中;
MimeType    可选,熟悉web开发的人员应当十分熟悉,这是表明映射;
Name    必填,该值定义了应用程序的名称,这个设置同理可以使用Name[en]等字样,在不同的语言环境下面,会使用对应的Name值;
StartupNotify    可选,该值是bool值([true | false]),这个设置只有在Type类型是application的时候才有意义;
Terminal   可选,该值也是bool值([true | false]) ,并且只有在Type为application时有意义,该值指出了相关应用程序(Exec值)是否需要在终端中运行;
Type    必填,这是一个枚举值,它定义了desktop文件的类型。常见的数值是Application和Link。Application表示当前文件指向一个应用程序,而Link表明当前文件指向一个URL,即链接文件;
Categories    可选,只有在Type类型是Application时才有意义。Categories的值表明了相关应用程序在菜单中显示的类别。
Icon 可选,该值定义了当前desktop文件在应用程序浏览器中所显示的图标,如果该值给定的是一个绝对路径,那么该路径下的图标将会被直接使用,反之,linux系统将使用Icon Theme Specifacation在系统指定的图标目录下定位所需要使用的图标文件。

tips:下面是参考的链接,对参数讲述的更加细致。
在linux中添加应用程序到applications列表
ubuntu/linux桌面添加快捷方式

Chapter3 linux 自启程序日志,嵌入式ARM平台基于Linux配置应用程序开机自启动

https://blog.csdn.net/weixin_35559171/article/details/116659352

By Toradex秦海

1).简介

平台设备采用Embedded Linux操作系统进行开发已经越来越成为主流,本文就着重说明在EmbeddedLinux下配置应用程序开机自启动的方法,并就基于Qt的应用程序卡机自启动脚本的配置进一步说明。

本文所演示的平台来自于ToradexColibriiMX6嵌入式平台,基于NXP iMX6系列核心为Cotrex-A9的ARM处理器。

2).准备

a模块Embedded Linux开发上手指南请参考。

b).本文使用的启动应用程序为如下两个,分别为一个console application和Qt Application,功能都是简单的GPIO控制。

3).使用Systemd方式配置开机自启动

a). systemd是当前Linux主流用于系统和服务管理的组件,同时也取代了过去的SysVinit系统,关于systemd的介绍请见。

b). System使用以 ".service"结尾的unit配置文件来管控一个进程,Service文件一般存放于"/etc/systemd/system/"或者 "/lib/systemd/system/"目录下,并可以通过systemctl命令来启动,使能或者关闭等操作,比如:


#重新加载 systemdunit配置文件

bash 复制代码
$ systemctl --system daemon-reload

#查看一个service的状态,启动和停止这个service(本次启动有效)

bash 复制代码
# systemctl status xxx.service

# systemctl start xxx.service

# systemctl stop xxx.service

#使能或关闭一个service(下次启动有效)

bash 复制代码
# systemctl enable xxx.service

# systemctl disable xxx.service

c).以systemd方式开机启动本文第二章节的console application的 service示例文件如下,关于console application的说明请参考,只是文章是基于imx7的,对于imx6 GPIO的号码需要修改。

d).部署测试


#首先将编译好的gpiointtest二进制程序复制到imx6模块对应目录

bash 复制代码
$ cp gpiointtest /usr/bin

#然后将service文件复制的imx6模块对应目录,并使能service

bash 复制代码
$ cp gpioint_demo.service /etc/systemd/system

$ systemctl --system daemon-reload

$ systemctl enable gpioint_demo.service

#最后重新启动后,在串口打印log信息中可以看到service已经启动的信息

......

[OK] Started gpiointtest service, GPIO interrupt and output control.

......

#此时在载板上面配合按键和LED,可以发现程序已经在后台正常工作了

e).因为通过systemd启动的进程都是以daemon状态运行,即在后台运行,没有终端或界面显示,因此如果要启动一个有GUI的程序,就要通过一个启动脚本,这个在后面针对Qt程序开机启动章节有进一步介绍。

4). Qt应用开机启动配置

a).本章节介绍Qt Application基于上述systemd开机自启动方法,因为service进程都是后台进程,因此启动如Qt应用这样的GUI应用程序,除了service文件,还需要一个启动脚本来配合。

b).以systemd方式开机启动本文第二章节的Qt application的 service示例文件如下,关于此Qt application的说明请参考。

c).配合使用的脚本程序根据调用的显示模块不同而不同,下面分别示例基于framebuffer和X11显示:

./基于framebuffer(此处使用linuxfb,也可以换为eglfs)和tslib的启动脚本 "qtdemo.sh"请参考如下:

./目前Qt5的主要版本已经支持直接基于X11显示,因此也可以基于X11配置脚本,下面基于X11启动上述Qt应用的启动脚本示例如下:

不过为了配合这个脚本,要略微改动下service文件如下:


bash 复制代码
[Service]

Type=forking

ExecStart=/usr/bin/qtdemo_x11.sh start

ExecStop=/usr/bin/qtdemo_x11.sh stop

另外,如果配合使用电阻式触摸屏,发现校准不对,在Qt程序启动后,可以在调试串口下进行如下操作理由xinput来校准并保存校准数据:


#首先运行下面校准程序,通过点击在屏幕上的校准点进行校准

bash 复制代码
$ xinput_calibrator

#校准结束后,将打印信息中Section "InputClass"开始到EndSection部分复制出来,类似如下

Section "InputClass"

Identifier"calibration"

MatchProduct"stmpe-ts"

Option"Calibration""3724 183 3686 323"

Option"SwapAxes""0"

EndSection

#创建如下文件,然后将上面的信息复制到"99-calibration.conf"文件里面并保存

bash 复制代码
$ mkdir /etc/X11/xorg.conf.d

$ cd /etc/X11/xorg.conf.d

$ vi 99-calibration.conf

#重启后,校准数据会自动生效了,此时自动启动的Qt程序触摸应该可以正常使用了


5).其他应用开机自启动方法

除了使用systemd,也有一些其他方法创建应用开机自启动下面逐一介绍

a). Shells

当通过串口,SSH或者图形界面进行login操作的时候,/etc/profile文件以及/etc/profile.d目录下的所有脚本文件都会被执行,因此也可以在此目录下创建基于login的一些开机自启动操作,不过此方法不太适合启动大型应用,更适合做一些环境变量配置等小任务。

b).图形化界面方式

当登录图形化界面时候,lxsession会话管理器可以通过下面两种方式自动启动应用程序:

./LXDE lxsession专用方法,位于 /etc/xdg/lxsession/LXDE/autostart文件和~/.config/lxsession/LXDE/autostart文件里面的条目会被解析。

Chapter4 linux下qt程序开机自启动与关闭方法

原文链接:https://blog.csdn.net/weixin_51512325/article/details/115352201

设置自启动

由于项目要求Qt的程序实现开机自动启动功能,本人在网上找了一下,成功运行,在这里分享一下。

首先说一下我自己的配置:Ubuntu 18.04 ,Qt4.5.0(其他版本也可)

1、在/etc/xdg/autostart/目录下新建test.desktop

打开终端,输入:

bash 复制代码
sudo touch /etc/xdg/autostart/test.desktop

test 是自己起的名字,自己定义什么名字都ok。你可以在图形界面打开这个autostart文件夹可以看到里面有个test.desktop文件。

创建完之后有的可以在终端直接显示这个文件夹,如:

bash 复制代码
ncu@ncu:/etc/xdg/autostart:$

我的就没显示。。。。。如果没显示,你可以使用cd命令打开:

bash 复制代码
ncu@ncu:cd /etc/xdg/autostart

随后会出现和上面一样的命令行。

2、赋予权限 sudo chmod 777 test.desktop

bash 复制代码
ncu@ncu:/etc/xdg/autostart:$ sudo chmod 777 test.desktop

然后会让你输入root权限,输入就ok。

3、编辑test.desktop

我很简单,直接在图形界面文件夹里双击打开test.desktop这个文件。然后在其中输入以下内容:

bash 复制代码
[Desktop Entry]
Type=Application
Name=test
Exec=/home/wzq/qt/test.sh   ///执行的脚本路径

执行的脚本路径其实可以直接改成你要运行的程序路径,路径获取可以打开qt然后跑一下你编写的程序,中止后最后的就是你的路径。我记得我的好像是****** with code 0.还是什么的,******就是路径。然后保存退出。

上面的步骤已经可以达到自启动要求了,我就是这样做的,重启之后确实可以自启动。

也可以在脚本里写入:

4、在/home/wzq/qt下 sudo touch test.sh

就是先在终端用cd命令打开qt文件夹(具体根据你的路径来),然后和1步骤类似创建出这个test.sh文件。

5、sudo vim test.sh(进程守护)

添加以下内容:

bash 复制代码
#! /bin/sh
  
PRO_UI=PingTechRZHY
while true; do
NUM_UI=`ps aux | grep ${PRO_UI} | grep -v grep |wc -l`
cd /home/wzq/qt/LIHYSB/V2/build-PingTechRZHY-Desktop_Qt_5_9_0_GCC_64bit-Debug  //qt程序路径
        if [ "${NUM_UI}" -lt "1" ];then
            #如果不存在就重新启动
             ./PingTechRZHY -c 1 &
        elif [ "${NUM_UI}" -gt "1" ];then
            killall -9 $PRO_UI
        fi
	        #每次循环沉睡5s
        sleep 5
done

重启linux验证。

关闭自启动

我用的笨办法,如下:

1、根据脚本名称搜索脚本执行的进程;

bash 复制代码
ps -ef|grep **********

*******就是你的脚本进程,然后会出现类似下面的语句,

2、根据进程ID杀掉进程;

bash 复制代码
kill -9 24853

这样自启动的程序就暂时关闭了。

清除自启动

如果你不想要这个自启动功能了,把.desktop文件从/etc/xdg/autostart文件夹中删除就可以了。

bash 复制代码
ncu@ncu:$ cd /etc/xdg/autostart
ncu@ncu: cd /etc/xdg/autostart:$ sudo rm -rf test.desktop
ncu@ncu:$ //输入root密码

这样就可以了。

结果验证

  1. reboot之后的运行界面,自动启动自定义App
  2. myqt.desktop文件设置
相关推荐
宁zz4 小时前
乌班图安装jenkins
运维·jenkins
CoderIsArt4 小时前
QT中已知4个坐标位置求倾斜平面与倾斜角度
qt·平面
大丈夫立于天地间4 小时前
ISIS协议中的数据库同步
运维·网络·信息与通信
cg50174 小时前
Spring Boot 的配置文件
java·linux·spring boot
暮云星影5 小时前
三、FFmpeg学习笔记
linux·ffmpeg
rainFFrain5 小时前
单例模式与线程安全
linux·运维·服务器·vscode·单例模式
GalaxyPokemon5 小时前
Muduo网络库实现 [九] - EventLoopThread模块
linux·服务器·c++
mingqian_chu5 小时前
ubuntu中使用安卓模拟器
android·linux·ubuntu
__lost6 小时前
Pysides6 Python3.10 Qt 画一个时钟
python·qt