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密碼
這樣就可以了。
結果驗證
- reboot之后的運行界面,自動啟動自定義App
- myqt.desktop文件設置