Linux:Ubuntu18.04下開機自啟動QT圖形化界面

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 CompatibilityConditionPathExists=/etc/rc.localAfter=network.target[Service]Type=forkingExecStart=/etc/rc.local startTimeoutSec=0StandardOutput=ttyRemainAfterExit=yesSysVStartPriority=99User=當前用戶(hjx)Environment=DISPLAY=:0[Install]WantedBy=graphical.target

繼續附圖:

在這里插入圖片描述

在這里插入圖片描述

保存后退出

三、啟動服務查看啟動狀態

如果這里啟動失敗了需要回頭更改rc.local文件看看是不是有語法錯誤或者執行的腳本有沒有問題

sudo systemctl start rc-local.servicesudo 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.0Name=QRDecodeExec=/home/test/QRDecode   (這個是那個可執行文件的位置)StartupNotify=falseNoDisplay=trueType=ApplicationCategories=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=forkingExecStart=/usr/bin/qtdemo_x11.sh startExecStop=/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/shPRO_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" ];thenkillall -9 $PRO_UIfi#每次循環沉睡5ssleep 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.pswp.cn/web/43885.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/43885.shtml
英文地址,請注明出處:http://en.pswp.cn/web/43885.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

代碼能力弱,編程思維幾乎沒有,有些勉強能看懂,讓自己敲,一臉懵逼?

最近有幾個人問我,說自己代碼能力弱,編程思維幾乎也沒有,簡單的代碼,勉強能看懂,讓自己敲,就一臉懵逼,下一步該怎么學習? 10幾年前,這些問題,就像是一道道難以…

Redis數據結構和持久化

數據類型 String&#xff1a;Map<String,String> 命令格式 set key value(相同的key會覆蓋&#xff09; get key incr key decr key setex key seconds value seconds秒后失效 ttl key del key setnx ke value(if not exist) 應用場景 計數器 比如&#xff1a;訪問次…

1招搞定maven打包空間不足問題

目錄 一、工具應用問題 二 、使用效果 三、使用方法 四、練習手段 一、工具應用問題 使用maven的package功能打包失敗&#xff0c;報錯“Java heap space”錯誤。 二 、使用效果 修改IDEA中maven內存使用大小后&#xff0c;打包成功。 三、使用方法 點擊菜單“File->Set…

C++ 例外處理 try throw catch

例外處理 程式中可能會發生的錯誤有三種&#xff0c;分別是語法錯誤(syntax error) 、執行期間錯誤(runtime error) 及語意錯誤(semantic error) &#xff0c;其中編譯器會直接檢查出語法錯誤&#xff0c;如果含有語法錯誤的程式無法過編譯&#xff0c;例如 $ g u06.cpp u06.c…

【PythonRS】基于Python分塊處理大型遙感影像的方法

RSer工作時不可避免會用到大型的遙感影像,由于分辨率過高、區域過大、波段信息過多等原因,都會導致數據非常的大。這個時候我們在進行一些簡單的操作,如計算NDVI、二值化、分類等時,計算機的內存都會溢出。因此今天跟大家分享一下我平時分塊的方法,中間如何計算就按照自己…

Docker 使用基礎(3)—容器

&#x1f3ac;慕斯主頁&#xff1a;修仙—別有洞天 ??今日夜電波&#xff1a;秒針を噛む—ずっと真夜中でいいのに。 0:34━━━━━━?&#x1f49f;──────── 4:20 &#x1f504; ?? ? …

let/const/var的區別及理解

在JavaScript中&#xff0c;let、const 和 var 是用來聲明變量的關鍵字&#xff0c;但它們之間在作用域、變量提升、重復聲明等方面存在區別&#xff0c;詳細情況如下: 1. let、const、var 的區別 (1) 塊級作用域 let 和 const&#xff1a;具有塊級作用域&#xff0c;由 {} 包…

百數教學秘籍:三步走,輕松規劃你的自動化計劃任務

通過設定任務計劃&#xff0c;用戶可以輕松安排指定的功能插件或數據助手在特定時間自動執行&#xff0c;有效提高工作效率&#xff0c;還確保了數據的及時更新和處理。任務計劃在應用啟動時自動啟動并在后臺運行&#xff0c;無需用戶持續監控&#xff0c;為用戶帶來極大的便利…

oracle哪些后臺進程不能殺?

oracle 有很多的后臺進程&#xff0c;在遇到特殊情況的時候如鎖表&#xff0c;如果等待的是一個后臺進程&#xff0c;那這時就需要考量是不是能殺掉這個后臺進程&#xff1f;殺掉這個后臺進程會不會引起實例崩潰&#xff1f;本著實踐出真知&#xff0c;本文針對oracle 11g&…

游戲開黑語音-使用云服務器部署teamspeak服務(系統Ubuntu 20.04 LTS)

目錄 前置物品服務器調整及部署1.重裝系統2.換源3.下載teamspeak服務端并部署 連接服務器參考 前置物品 一臺云服務器&#xff08;系統&#xff1a;Ubuntu 20.04 LTS) 服務器調整及部署 1.重裝系統 在騰訊云官網的主機控制臺內&#xff0c;選擇重裝系統 (由于之前為了快點和…

【刷題匯總 -- 最長回文子串、買賣股票的最好時機(一)、[NOIP2002 普及組] 過河卒】

C日常刷題積累 今日刷題匯總 - day0101、最長回文子串1.1、題目1.2、思路1.3、程序實現 2、買賣股票的最好時機(一)2.1、題目2.2、思路2.3、程序實現2.4、程序實現 -- 優化 3、[NOIP2002 普及組] 過河卒3.1、題目3.2、思路3.3、程序實現 -- dp 4、題目鏈接 今日刷題匯總 - day0…

Excel中用VBA實現Outlook發送當前工作簿

Excel中用VBA實現Outlook發送當前工作簿&#xff0c;首先按AltF11打開VBA編輯器&#xff0c;插入模塊&#xff0c;并在工具-引用中勾選 Microseft Outlook .0 Object Library(其中為你Microseft Outlook的版本號。 Sub 發送郵件() 保存當前excel ThisWorkbook.Save讓excel連接…

Linux 入門教程 by 程序員魚皮

本文作者&#xff1a;程序員魚皮 免費編程學習 - 編程導航網&#xff1a;https://www.code-nav.cn 大家好&#xff0c;我是魚皮。 前兩天我學編程的老弟小阿巴過生日&#xff0c;我問他想要什么禮物。 本來以為他會要什么游戲機、Q 幣卡、鼠標鍵盤啥的&#xff0c;結果小阿巴…

模擬防止重復提交

gitee地址&#xff08;需要自取&#xff09;AopProxy重復提交: 防止重復提交 (gitee.com) RestController public class SubmissionController {Autowiredprivate SubmissionService submissionService;private static Jedis jedis new Jedis("localhost",6379);pr…

短視頻矩陣:批量發布的秘密揭秘

在數字化時代&#xff0c;短視頻已經成為一種廣受歡迎的媒體形式。無論是用于品牌推廣、產品營銷還是個人創作&#xff0c;短視頻都提供了一種直觀、生動的方式來吸引觀眾的注意力。然而&#xff0c;有效地制作、管理和發布短視頻對于許多創作者和企業來說是一個挑戰。 為此&am…

什么是 C 語言中的宏定義?

&#x1f345;關注博主&#x1f397;? 帶你暢游技術世界&#xff0c;不錯過每一次成長機會&#xff01; &#x1f4d9;C 語言百萬年薪修煉課程 通俗易懂&#xff0c;深入淺出&#xff0c;匠心打磨&#xff0c;死磕細節&#xff0c;6年迭代&#xff0c;看過的人都說好。 文章目…

解決 Yarn 運行時的 Node.js 版本問題:一個詳盡的指南

引言 Yarn 是一個流行的 JavaScript 包管理器&#xff0c;它與 Node.js 緊密集成&#xff0c;用于管理項目依賴。然而&#xff0c;在開發過程中&#xff0c;開發者可能會遇到 Node.js 版本不兼容的問題&#xff0c;這會導致 Yarn 運行時出錯。本文將提供一個詳細的指南&#x…

動態規劃之數字三角形模型+最長上升子序列模型

首先&#xff0c;我們從集合角度重新看待DP&#xff1a; 直接看題&#xff1a;https://www.acwing.com/problem/content/1029/ 就是取紙條的原題&#xff0c;我們令f[i1,j1,i2,j2]表示從(1,1),(1,1)分別走到(i1,j1),(i2,j2)的路徑的max i1j1i2j2&#xff0c;于是我們可以把狀…

機器學習 | 對K-Means聚類假設的研究演示及實踐示例

我們在Scikit-learn對K-means假設的調查中探索了揭示算法優勢和局限性的場景。我們研究了K-means對不正確的聚類大小的敏感性&#xff0c;它在各向異性分布中面臨的困難&#xff0c;它在不同的聚類方差中面臨的困難&#xff0c;以及使用合成數據集的大小不均勻的聚類問題。我們…

準備工作+1、請求和響應+2、模型和管理站點

Django快速入門——創建一個基本的投票應用程序 準備工作1、創建虛擬環境2、安裝django 1、請求和響應&#xff08;1&#xff09;創建項目&#xff08;2&#xff09;用于開發的簡易服務器&#xff08;3&#xff09;創建投票應用&#xff08;4&#xff09;編寫第一個視圖1、編寫…