我有一個使用systemd啓動進程的嵌入式Linux主板。我還有一個用Qt編寫的GUI,我可以從命令行啓動,並使用主板的觸摸屏或按鈕進行交互。要啓動應用程序,我通常做:使用systemd自動啓動的Qt GUI實例不會響應輸入
ssh [email protected]
cd ~/
./gui
我想這使用SystemD自動啓動,所以我寫的,看起來像這樣一個服務文件:
[Unit]
Description=The Qt Gui
After=dropbear.service systemd-logind.service
ConditionFileIsExecutable=/home/user/gui
[Service]
ExecStart=/home/user/gui
Restart=on-abort
[Install]
WantedBy=multi-user.target
當董事會靴子我見該systemd日誌,它是dropbear SSH服務後馬上開始我的GUI:
[ OK ] Started Dropbear SSH2 daemon.
Starting The Qt Gui...
[ OK ] Started The Qt Gui.
如果我引導並運行「PS」後SSH連接到電路板,我可以看到我的進程啓動(如果我殺了它它按照預期重新開始特德從systemd):
196 root 26868 S /home/user/gui
的systemctl狀態輸出看起來OK我,看到最後一行 'ARM生成' 是我的代碼qDebug()print語句:
gui.service - The Qt Gui
Loaded: loaded (/etc/systemd/system/gui.service; enabled)
Active: active (running) since Tue, 2012-11-20 21:30:20 UTC; 4min 35s ago
Main PID: 196 (gui)
CGroup: name=systemd:/system/gui.service
└ 196 /home/user/gui
Nov 20 21:30:20 systemd[1]: Starting The Qt Gui...
Nov 20 21:30:20 systemd[1]: Started The Qt Gui.
Nov 20 21:30:22 gui[196]: ARM build
不過我根本無法與使用systemd啓動的GUI實例進行交互!如果我從命令行啓動輔助實例的次數少於按下按鈕或觸摸屏,並且GUI在屏幕上彈出並按預期工作。是什麼賦予了?我已經在服務文件中嘗試了'Type = forking',這也沒有幫助。關於這裏有什麼問題的任何想法?我怎樣才能讓systemd啓動我的Qt GUI,就像我從命令行執行一樣?謝謝 -
也許這可能涉及到不同的工作目錄。您應該檢查是否使用與systemd相同的工作目錄,您的應用程序仍然具有良好的行爲,可以通過命令行啓動。 –
問題可能是因爲您在登錄時啓動它,但尚未正確設置所有內容。我曾經遇到過一個問題,Qt在登錄時自動啓動時沒有在KDE中創建一個托盤圖標,因爲它在系統托盤可用之前啓動。你能安排程序在登錄後10-20秒開始嗎? – sashoalm