1. 程式人生 > >Xorg下Qt應用自啟動方法

Xorg下Qt應用自啟動方法

By Toradex 胡珊逢

1). 簡介

Qt 作為嵌入式系統廣泛選擇的 GUI 框架,支援多種顯示平臺外掛,如常見的 xcb、linuxfb、Wayland、eglfs 等。Xcb 是基於 X 的外掛,允許 Qt 應用在 X 中執行,這被目前大部分桌面電腦上 Qt 應用所使用。除了顯示輸出功能外,X 還可以處理諸如觸控式螢幕、鍵盤等輸入事件,無需單獨採用第三方庫 tslib、libinput,X 為 Qt 應用提供標準的輸入、輸出環境。由於採用了 X,所以在 Qt 應用執行前,需要先啟動 X。接下來的內容,我們將針對 Toradex ARM嵌入式模組系統不同版本 BSP 介紹如何配置基於 X 的 Qt 自啟動方法。


2). 具體配置方法

a). Linux BSP v2.8b2 之前的 BSP

Toradex 已經為 Yocto/OpenEmbedded 提供現成的 recipe 用於編譯基於 X 的 Qt BSP angstrom-qt5-x11-image.bb。在 v2.8b2 之前的 BSP 中,qt5-x11-demo.service 用於啟動 qt5-x11-demo-init 指令碼,從而初始化 X 環境並直接載入 Qt 應用。使用者可以修改 qt5-x11-demo-init 中的 QTAPP 和 QTAPPSTART,將其指向其他 Qt 應用所在的目錄以及應用本身。qt5-x11-demo-init 同時也嘗試了觸控式螢幕的校準,通過執行 tslib.sh 、ts_calibrate、xinput_calibrator_once.sh。但是 xinput_calibrator_once.sh 同樣也需使用 X,但此時 X 並未啟動,所以預設的指令碼是無法使用 xinput_calibrator_once.sh 直接進行校準。


執行下面命令,手動校準電阻觸控式螢幕。

---------------------------------

[email protected]:~# set -e

[email protected]:~# Xorg &

[email protected]:~# xinput_calibrator

---------------------------------


校準完畢後,將 xinput_calibrator 校準資訊複製到 /etc/X11/xorg.conf.d/99-calibration.conf 檔案中。X 在啟動時會自動載入這些校準資料。

---------------------------------

Section "InputClass"

   Identifier "calibration"

   MatchProduct "stmpe-ts"

   Option "Calibration" "108 3958 608 3929"

   Option "SwapAxes" "0"

EndSection

---------------------------------


完成以上步驟後,qt5-x11-demo.service 才能啟動 Qt 應用,並正常使用觸控式螢幕裝置。


b). Linux BSP v2.8b2 之後的 BSP

直接使用指令碼啟動 X 和 Qt 應用存在一些限制,如上面的無法自動呼叫 xinput_calibrator  進行觸控式螢幕校準,或者在 Qt 應用啟動前執行其他的 X 應用。為解決上述問題,自 v2.8b2 起,Toradex 採用了 nodm 顯示管理工具來啟動 X。在 X 啟動後,逐一完成 /etc/X11/Xsession.d 目錄中的配置,包括觸控校準,最後為 90XWindowManager.sh。該指令碼將載入 /usr/bin/x-window-manager,在這裡使用者可以修改為您自己 Qt 應用所在的路徑以並啟動。


在 Yocto/OpenEmbedded recipe 中,你需要修改 x-window-simple-app_1.0.bb 檔案中的 INITIAL_PATH 和 X_APPLICATION,指向你自己的 Qt 應用。

---------------------------------

INITIAL_PATH ?= "/usr/share/qtsmarthome-1.0"

X_APPLICATION ?= "${INITIAL_PATH}/smarthome"

---------------------------------


採用這種方法,使用者無需手動執行 xinput_calibrator 完成校準。xinit 將會自動啟動 X,並按序執行位於  /etc/X11/Xsession.d 中的 X 客戶端程式。在這裡使用者可以新增自己的其他 X 應用。


5). 總結

自 v2.8b2 起,X 的啟動由 xinit 完成,使用者在是使用該新版本 BSP 需要修改原來自啟動方式,xinit 方便使用者啟動不同的 X 客戶端程式。