版權聲明:本文為本文為部落客原創文章,轉載請注明出處。如有問題,歡迎指正。部落格位址:https://www.cnblogs.com/wsg1100/
@
目錄
- 0.前言
- 1.帶桌面環境的自動啟動
- 1.1Ubuntu
- 1.2 openbox
- 2.使用登入管理器啟動應用
- 2.1 視窗管理器
- 2.2 登入管理器
- 2.2.1 沒有視窗管理啟動應用程式
- 2.2.2 登入管理器自動登入配置
- 2.3 xorg
- 2.3.1 xinit(startx)
- 2.3.2 xserverrc
- 2.3.3沒有視窗管理器啟動應用程式
在嵌入式的場合通常會讓Linux隻執行某一個特定的人機互動應用程式,比如一個QT應用,本文講述了在Ubuntu環境下如何配置應用自啟動,希望對你有所幫助。
該方法由桌面去啟動qt程式,這裡說的桌面指視窗管理器如xface、gnome、kde等。
以Ubuntu 圖形界面作為例子(這裡使用Ubuntu16.04,基于gnome開發)如下:
在目前使用者
home
下建立
autostart
目錄:
mkdir -p ~/.config/autostart
建立一個
**.desktop
的檔案如下:
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/;
該方法可以達到自動啟動應用程式的效果,但在一些比如嵌入式應用環境,Ubuntu桌面環境也不需要的時候該方法就不适合,原因在于Ubuntu桌面環境太龐大,占用資源過多。
Openbox 是一個輕量級、可高度定制以及支援大量标準的視窗管理器,幾乎無備援軟體,僅是一個視窗管理器,比較适合嵌入式應用環境。讓登入管理器來啟動openbox、QT應用程式,或者Openbox啟動QT應用程式。
- 安裝openbox:
sudo apt-get install openbox
- 配置登入管理器lightdm自動登入
- 在
中指定/etc/lightdm/lightdm.conf
使用autologin-session
視窗管理器:openbox
[Seat:*] autologin-user=work autologin-session=openbox
-
下建立Qt程式app.desktop檔案(也可由openbox去啟動):/usr/share/xsessions/
[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.
被
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
指令啟動.
作者:wsg1100
出處:http://www.cnblogs.com/wsg1100/
本文版權歸作者和部落格園共有,歡迎轉載,但必須給出原文連結,并保留此段聲明,否則保留追究法律責任的權利。