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

news2025/2/24 15:16:45

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

  • Chapter1 Linux:Ubuntu18.04下开机自启动QT图形化界面
    • 一、创建rc.local文件
    • 二、建立rc-local.service文件
    • 三、启动服务查看启动状态
    • 四、重启
  • Chapter2 将QT应用作为开机自启动(Linux系统)
    • 方法一:
    • 方法二:
  • Chapter3 linux 自启程序日志,嵌入式ARM平台基于Linux配置应用程序开机自启动
    • 1).简介
    • 2).准备
    • 3).使用Systemd方式配置开机自启动
    • 4). Qt应用开机启动配置
    • 5).其他应用开机自启动方法
  • Chapter4 linux下qt程序开机自启动与关闭方法
    • 设置自启动
    • 1、在/etc/xdg/autostart/目录下新建test.desktop
    • 2、赋予权限 sudo chmod 777 test.desktop
    • 3、编辑test.desktop
    • 4、在/home/wzq/qt下 sudo touch test.sh
    • 5、sudo vim test.sh(进程守护)
    • 关闭自启动
    • 结果验证


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文件

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 

附图,让大家更理解:
在这里插入图片描述

在这里插入图片描述

添加可执行权限:

sudo chmod +x /etc/rc.local

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

sudo chmod +x start.sh

二、建立rc-local.service文件

 sudo vim /etc/systemd/system/rc-local.service

输入如下内容:

[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文件看看是不是有语法错误或者执行的脚本有没有问题

sudo systemctl start rc-local.service

sudo systemctl status rc-local.service

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

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的启动配置文件,代码:

cd /usr/share/applications

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

  [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目录下。

cp -f QRDecode.desktop  /etc/xdg/autostart

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

reboot -n

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

[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配置文件

$ systemctl --system daemon-reload

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

# systemctl status xxx.service

# systemctl start xxx.service

# systemctl stop xxx.service

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

# systemctl enable xxx.service

# systemctl disable xxx.service

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

d).部署测试


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

$ cp gpiointtest /usr/bin

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

$ 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文件如下:



[Service]

Type=forking

ExecStart=/usr/bin/qtdemo_x11.sh start

ExecStop=/usr/bin/qtdemo_x11.sh stop


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


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

$ 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"文件里面并保存

$ 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

打开终端,输入:

sudo touch /etc/xdg/autostart/test.desktop

test 是自己起的名字,自己定义什么名字都ok。你可以在图形界面打开这个autostart文件夹可以看到里面有个test.desktop文件。
创建完之后有的可以在终端直接显示这个文件夹,如:

ncu@ncu:/etc/xdg/autostart:$

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

ncu@ncu:cd /etc/xdg/autostart

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

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

ncu@ncu:/etc/xdg/autostart:$ sudo chmod 777 test.desktop

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

3、编辑test.desktop

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

[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(进程守护)

添加以下内容:

#! /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、根据脚本名称搜索脚本执行的进程;

ps -ef|grep **********

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

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

kill -9 24853

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

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

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文件设置在这里插入图片描述
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1902176.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ePTFE膜(膨体聚四氟乙烯膜)应用前景广阔 本土企业技术水平不断提升

ePTFE膜(膨体聚四氟乙烯膜)应用前景广阔 本土企业技术水平不断提升 ePTFE膜全称为膨体聚四氟乙烯膜,指以膨体聚四氟乙烯(ePTFE)为原材料制成的薄膜。ePTFE膜具有耐化学腐蚀、防水透气性好、耐候性佳、耐磨、抗撕裂等优…

跟着峰哥学java 第四天 商品分类 前后端显示

1.后端 1.1mybatis-plus分页查询配置 在商品热卖数据中,只让其显示八条数据 将要使用分页 也就是service.page方法 此时需要配置 mp拦截器 Configuration public class MybatisPlusConfig {Beanpublic PaginationInterceptor paginationInterceptor() {return …

基于Echarts进行图表组件的封装

什么是Echarts 是一个使用js实现的开源可视库,提供了多种图表,但是当我们在项目中进行使用的时候可能就是需要进行一系列的相关配置如: 标题,类型,x轴,y轴等,当我们使用较为频繁的时候就容易导…

[数据结构] 基于交换的排序 冒泡排序快速排序

标题:[数据结构] 基于交换的排序 冒泡排序&&快速排序 水墨不写bug (图片来源于网络) 目录 (一)冒泡排序 优化后实现: (二)快速排序 I、实现方法: &#…

Adobe Photoshop 2024 v25.5.1 中文激活版下载以及安装方法教程

软件介绍 Adobe Photoshop 2024 v25.5.1 是Adobe公司的最新版图像处理软件,它提供了强大的图像编辑工具和智能自动化功能,包括图像修复、色彩校正和滤镜效果,以满足专业人士和业余爱好者的需求。这款软件还支持矢量图形设计和实时协作&#…

【程序人生】来CSDN五周年了,简单总结下初心、收获、未来憧憬

最近CSDN站内私信说,已经创作五周年了。想想确实应该写一点东西,总结一下初心是什么、经历了什么、收获了什么、现状怎么样、未来会如何规划写文章这件事。算是我自己的一份总结,也许也可以给一些刚上大学的年轻朋友参考一下,坚持…

【Linux】进程创建和终止 | slab分配器

进程创建 fork 1.fork 之后发生了什么 将给子进程分配新的内存块和内核数据结构(形成了新的页表映射)将父进程部分数据结构内容拷贝至子进程添加子进程到系统进程列表当中fork 返回,开始调度器调度 这样就可以回答之前返回两个值&#xff1f…

Autosar Dcm配置-0x85服务配置及使用-基于ETAS软件

文章目录 前言Dcm配置DcmDsdDcmDsp代码实现总结前言 0x85服务用来控制DTC设置的开启和关闭。某OEM3.0架构强制支持0x85服务,本文介绍ETAS工具中的配置 Dcm配置 DcmDsd 配置0x85服务 此处配置只在扩展会话下支持(具体需要根据需求决定),两个子服务Disable为0x02,Enable…

3.pwn 函数调用流程,调用约定

前置准备 pop: Pop指令的作用是弹栈,将栈顶的数据弹出到寄存器,然后栈顶指针向下移动一个单位。 具体来说:如pop rax,作用就是mov rax[rsp];add rsp 8; push: Push指令的作用就是压栈,将栈顶指针向上移动一个单位的距离&#xf…

38 IO流

目录 C语言的输入和输出流是什么CIO流stringstream的简单介绍 1. C语言的输入与输出 C语言中我们用到的最频繁的输出方式是scanf和printf,scanf:从标准输入设备(键盘)读取数据,并将值存在变量中。printf:…

【MySQL】锁(黑马课程)

【MySQL】锁 0. 锁的考察点1. 概述1. 锁的分类1.1 属性分类1.2 粒度分类 2. 全局锁2.1 全局锁操作2.2.1 备份问题 3. 表级锁3.1 表锁3.2 语法3.3 表共享读锁(读锁)3.4 表独占写锁(写锁)3.5 元数据锁(meta data lock, MDL)3.6 意向…

第5章 认证授权:需求分析,Security介绍(OAuth2,JWT),用户认证,微信扫码登录,用户授权

1 模块需求分析 1.1 什么是认证授权 截至目前,项目已经完成了课程发布功能,课程发布后用户通过在线学习页面点播视频进行学习。如何去记录学生的学习过程呢?要想掌握学生的学习情况就需要知道用户的身份信息,记录哪个用户在什么…

AIGC专栏12——EasyAnimateV3发布详解 支持图文生视频 最大支持960x960x144帧视频生成

AIGC专栏12——EasyAnimateV3发布详解 支持图&文生视频 最大支持960x960x144帧视频生成 学习前言项目特点生成效果相关地址汇总项目主页Huggingface体验地址Modelscope体验地址源码下载地址 EasyAnimate V3详解技术储备Diffusion Transformer (DiT)Hybrid Motion ModuleU-V…

智慧校园-教职工管理系统总体概述

在当今信息化时代,智慧校园教职工管理系统成为了提升教育机构管理效能的重要工具。该系统巧妙融合了先进的信息技术,为教职工的日常管理带来了一场静悄悄的革命。它不仅是一个信息存储库,记录着每位教职工从加入到离开的完整职业轨迹&#xf…

笔记12:if语句编程练习(打印输出三个数据中的最小值)

输入三个数,分别放入变量x,y,z中 打印输入数据中最小的那一个数 解决方案1 定义中间变量 t 1.比较x和y的大小关系,将较小的值赋值给t 2.比较t和z的大小关系,将较小的值赋值给t 3.t 中保存的就是3个数中的较小值 &am…

限时免费!国产Sora快手可灵Web网页端及全新功能上线!国货之光!

大家好,我是程序员X小鹿,前互联网大厂程序员,自由职业2年,也一名 AIGC 爱好者,持续分享更多前沿的「AI 工具」和「AI副业玩法」,欢迎一起交流~ 快手可灵(Kling)这回是真的出息了&…

Python爬取股票信息-并进行数据可视化分析,绘股票成交量柱状图

为了使用Python爬取股票信息并进行数据可视化分析,我们可以使用几个流行的库:requests 用于网络请求,pandas 用于数据处理,以及 matplotlib 或 seaborn 用于数据可视化。 步骤 1: 安装必要的库 首先,确保安装了以下P…

Hack The Box -- Blazorized

一、准备工作 端口扫描 详细扫描 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-06-30 21:39 EDT Nmap scan report for 10.10.11.22 Host is up (0.26s latency).PORT STATE SERVICE VERSION 53/tcp open domain Simple DNS Plus 80/tcp op…

海外发稿: 秘鲁-区块链新闻媒体通稿宣发

秘鲁媒体单发 随着全球化的不断深入,海外发稿已经成为众多企业宣传推广的重要方式之一。而在海外发稿的选择中,秘鲁媒体的地位尤为重要。秘鲁作为南美洲的重要国家之一,拥有众多知名媒体平台,包括diariodelcusco、serperuano、el…

非堆成加密是公私钥使用

对称加密学习-CSDN博客 加密算法学习-CSDN博客 非对称加密算法使用一对密钥,包括一个公钥和一个私钥,它们是数学上相关联的,但公钥可以公开分享,而私钥必须保密。以下是使用非对称加密算法的一般步骤: 密钥生成&…