天天看點

【原創】ubuntu下圖形程式自啟動的幾種方法

版權聲明:本文為本文為部落客原創文章,轉載請注明出處。如有問題,歡迎指正。部落格位址: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應用程式。

  1. 安裝openbox:
sudo apt-get install openbox
           
  1. 配置登入管理器lightdm自動登入
  2. /etc/lightdm/lightdm.conf

    中指定

    autologin-session

    使用

    openbox

    視窗管理器:
    [Seat:*]
    autologin-user=work
    autologin-session=openbox
               
  3. /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.

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/

本文版權歸作者和部落格園共有,歡迎轉載,但必須給出原文連結,并保留此段聲明,否則保留追究法律責任的權利。

繼續閱讀