版權聲明:本文爲本文爲博主原創文章,轉載請註明出處。若有問題,歡迎指正。博客地址:https://www.cnblogs.com/wsg1100/
@前端
在嵌入式的場合一般會讓Linux只執行某一個特定的人機交互應用程序,本文講述了在Ubuntu環境下如何配置應用自啓動,但願對你有所幫助。linux
該方法由桌面去啓動qt程序,這裏說的桌面指窗口管理器如xface、gnome、kde等。web
以Ubuntu 圖形界面做爲例子(這裏使用Ubuntu16.04,基於gnome開發)以下:chrome
在當前用戶home
下建立autostart
目錄:shell
mkdir -p ~/.config/autostart
建立一個**.desktop
的文件以下:ubuntu
cat > ~/.config/autostart/Qt_test.desktop << EOF [Desktop Entry] Type=Application Exec=/home/Qt_test EOF
有關desktop的條目含義能夠參看https://specifications.freedesktop.org/desktop-entry-spec/latest/;bash
該方法能夠達到自動啓動應用程序的效果,但在一些好比嵌入式應用環境,Ubuntu桌面環境也不須要的時候該方法就不適合,緣由在於Ubuntu桌面環境太龐大,佔用資源過多。服務器
Openbox 是一個輕量級、可高度定製以及支持大量標準的窗口管理器,幾乎無冗餘軟件,僅是一個窗口管理器,比較適合嵌入式應用環境。讓登陸管理器來啓動openbox、QT應用程序,或者Openbox啓動QT應用程序。session
sudo apt-get install openbox
配置登陸管理器lightdm自動登陸app
在/etc/lightdm/lightdm.conf
中指定autologin-session
使用openbox
窗口管理器:
[Seat:*] autologin-user=work autologin-session=openbox
在/usr/share/xsessions/
下建立Qt程序app.desktop文件(也可由openbox去啓動):
[Desktop Entry] Name=qt app Comment=This session exec qt app Exec=app-path/app [arg] TryExec=app-path/app [arg] Icon= Type=Application
保存後重啓。
附:openbox一些界面配置
安裝完成後, 你應該把默認的配置文件 rc.xml , menu.xml , 和 autostart 和environment 複製~/.config/openbox:
$ mkdir -p ~/.config/openbox $ cp /etc/xdg/openbox/{rc.xml,menu.xml,autostart,environment} ~/.config/openbox
注意: 不要用 root 進行以上操做,應使用普通用戶。
這四個文件組成了 Openbox 配置的基礎。每個文件是配置的獨立的部分,它們的功能是:
rc.xml
本文件是配置文件.用於定義鍵盤快捷鍵, 主題, 虛擬桌面等。
menu.xml
本文件定義了在桌面用鼠標擊鍵時顯示的菜單。它定義了程序啓動器和快捷方式。
autostart
本文件在 Openbox 啓動時讀取。包含了一些須要啓動的程序,一般用來定義許多環境變量、
啓動面板/dock、設置壁紙或者執行其餘啓動腳本等等。細節看 Openbox Wiki.
menu.xml
被 openbox-session
啓動時調用。它包含了在 Openbox 上下文中定義的變量。任何你想對 Openbox 自己可見以及從菜單啓動的程序須要的變量都放在這裏。
讓Openbox做爲一個單獨的窗口管理器運行,把如下內容加入~/.xinitrc
:
exec openbox-session
若是想在命令行下啓動 Openbox , 用 xinit :
$ xinit /usr/bin/openbox-session
登陸管理器又稱顯示管理器,可直接由顯示管理器啓動咱們的應用程序。
簡要說明一下與桌面環境相關的幾個東西:
咱們熟悉的GNOME、KDE、Xface...;使用這些桌面環境應該儘可能使用對應的登陸管理器來啓動。
窗口管理和X11 須要登陸管理器來啓動:
GDM-GNOME登陸管理器;
SDDM - 基於QML的顯示管理器和KDM的後繼者; 推薦用於 Plasma和 LXQt;
XDM - X顯示管理器,支持XDMCP;
LightDM - 跨桌面顯示管理器,可使用任何工具包中編寫的各類前端,Ubuntu16.04默認使用該管理器。
這些桌面管理器都可安裝,安裝後只需用systemd 啓動該服便可,例如在Ubuntu16.04上安裝sddm,並啓用相應的systemd服務:
sudo apt-get install sddm
而後設置開機啓動,固然須要先關閉自帶的LightDM服務:
sudo systemctl disable lightdm.service sudo systemctl enable sddm.service
啓用sddm後/etc/systemd/system/display-manager.service
應該連接到/usr/lib/systemd/system/sddm.service
登陸管理器如何啓動窗口管理的?
大多數登陸管理器會從/usr/share/xsessions/
讀取可用的.desktop
文件,在安裝各類窗口管理器時會在/usr/share/xsessions/
下生成對應的desktop文件,好比ubuntu自帶的ubuntu.desktop
文件,它的配置以下:
[Desktop Entry] Name=Ubuntu Comment=This session logs you into Ubuntu Exec=gnome-session --session=ubuntu TryExec=untiy Icon= Type=Application DesktopNames=Unity X-Ubuntu-Gettext-Domain=gnome-session-3.0
能夠在沒有任何桌面或窗口管理的狀況下啓動應用程序,例如要啓動google-chrome
只需在/usr/share/xsessions/
下建立web-browser.desktop
文件以下:
[Desktop Entry] Name=Web Browser Comment=Use a web browser as your session Exec=/usr/bin/google-chrome --auto-launch-at-startup TryExec=/usr/bin/google-chrome --auto-launch-at-startup Icon=google-chrome Type=Application
這能知足自動啓動Qt應用需求,systemd啓動登陸管理器,登陸管理器登陸後去啓動QT應用程序。這裏還須要設置登陸管理器自動登陸配置,達到自動啓動目的。
缺點:不易調試。
登陸管理器與用戶會話相關的配置文件/var/lib/AccountsService/user/$USER
,使用窗口管理器登陸對應的用戶後會使用該配置文件中的設置,好比桌面背景圖等,ubuntu的背景圖配置就是配置這個文件,下面是一個本機上的示例(加了一些註釋):
[com.canonical.indicator.sound.AccountsService] PlayerName='' Timestamp=0 Title='' Artist='' Album='' ArtUrl='' PlayerIcon=<('themed', <['application-default-icon', 'application-default', 'application']>)> [InputSource0] xkb=us #鍵盤類型 [User] XSession=ubuntu #會話名稱 Language=en_GB.UTF-8 #語言 Background=/home/work/Pictures/backgroundDefault.jpg #桌面背景 SystemAccount=false
這裏使用Ubuntu 16.04自帶的lightdm說明,其餘登陸管理器自行查詢相關文檔:
啓用lightdm使用systemctl,以便啓動時啓動:
sudo systemctl enable lightdm.service sudo systemctl start lightdm.service
LightDM
能夠經過修改其配置文件/etc/lightdm/lightdm.conf
來配置,編輯該文件,配置這些行:
[Seat:*] autologin-user = username
username必須是該autologin 羣組的一員才能在不輸入密碼的狀況下自動登陸:
#groupadd -r autologin #gpasswd -a username autologin
LightDM
使用~/.dmrc
用戶指定的會話登陸爲自動登陸。要覆蓋此文件須要在/etc/lightdm/lightdm.conf
中指定autologin-session
:
[Seat:*] autologin-user = username autologin-session = session
有效session
名稱列表能夠經過列出X 的會話/usr/share/xsessions/*.desktop
和Wayland的列表/usr/share/wayland-sessions/*.desktop
來找到。
查看當前系統啓動了哪些會話窗口:
loginctl
X.Org 項目提供了 X 窗口系統的開源實現。開發工做是在freedesktop.org 社區的通力合做下完成。X.Org 組織是非盈利教育機構。Xorg 在 Linux 中很是流行,已經成爲linux圖形用戶程序的必備條件,因此大部分發行版都提供了它.
用戶一般須要選擇安裝某個 窗口管理器 或 桌面環境以配合使用 X。
若是不用登錄管理器啓動 X顯示服務,可使用xinit
手動啓動Xorg顯示服務。
執行xinit
和startx
時,它們將尋找~/.xinitrc
做爲shell腳本運行以啓動客戶端程序。
若是~/.xinitrc
不存在,startx將
運行默認值/etc/X11/xinit/xinitrc
(默認的xinitrc啓動一個Twm,xorg-xclock和Xterm環境),ubuntu安裝後的/etc/X11/xinit/xinitrc
文件以下:
#!/bin/bash . /etc/X11/Xsession
xserverrc 文件是負責啓動X服務器的shell腳本,運行startx
和xinit
執行~/.xserverrc
,若是~/.xserverrc
不存在startx
會用/etc/X11/xinit/xserverrc
,內容以下:
#!/bin/sh exec /usr/bin/X -nolisten tcp "$@"
啓動X11, -nolisten tcp
禁用X11的抽象套接字。
要運行Xorg,直接執行:
$startx
若是配置了xserverrrc:
$xinit -- :1
注意:當另外一個X服務器已經啓動時,xinit不處理多個顯示。對於必須經過附加指定顯示,這裏是以上。-- :display_number display_number 1
要退出X,直接運行窗口管理器的退出功能,若是沒有窗口管理器,執行:
$ pkill -15 Xorg
pkill將終止全部正在運行的X實例,要專門終止當前虛擬終端上的窗口管理器:
$ pkill -15 -t tty「$ XDG_VTNR」Xorg
能夠在沒有窗口管理器的狀況下僅啓動特定應用程序,儘管這極可能僅適用於以全屏模式顯示的單個應用程序。例如~/.xinitrc
:
... exec Qt_tese
缺點:非自動啓動,而是手動輸入startx
命令啓動.