想要的:在 Weston 合成器中啟動時打開程序
我嘗試過的:建立低優先權的SysV init腳本
什麼有效:Weston 啟動,但我的程式沒有啟動
你好,我正在嵌入式環境中開發一個程式。該程式基於 Qt,我希望它在設備啟動時運行。該設備使用類似 Debian 的發行版,但啟動時會直接啟動到 Weston 合成器,而不是登入/桌面。
到目前為止,我所做的是創建一個標準/etc/init.d
腳本(如下所示),該腳本使用啟動我的程式start-stop-daemon
並具有簡單的啟動-停止切換。如果手動呼叫的話,這是可行的,但是,使用update-rc.d appService defaults
結果會導致程式無法在引導時啟動。
如果我嘗試手動啟動自動產生的服務 ( systemctl start appService
),我會收到 XDG_RUNTIME_DIR 錯誤。什麼?為什麼 X 會妨礙我?
調查 systemd 自動產生的 .service 檔案(如下所示),程式希望在multi-user.target
達到運行等級之前執行。
劇本
#!/bin/sh
DIR="/home/root"
DAEMON=$DIR/appname
DAEMON_OPTS=""
DAEMON_NAME="APP"
PIDFILE=/var/run/$DAEMON_NAME.pid
DAEMON_USER="root"
case "$1" in
start)
echo "Starting $DAEMON_NAME"
ifconfig eth1 192.168.1.233
start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --exec $DAEMON -- $DAEMON_OPTS
;;
stop)
echo "Stopping $DAEMON_NAME"
start-stop-daemon --stop --pidfile $PIDFILE --retry 10
;;
*)
echo "Usage: /etc/init.d/appService {start|stop}"
exit 1
;;
esac
exit 0
服務文件:
[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/init.d/appService
Before=multi-user.target
Before=multi-user.target
Before=multi-user.target
Before=graphical.target
Before=shutdown.target
Before=umountnfs.service
Before=rng-tools.service
Before=thermal-zone-init.service
Before=gdbserverproxy.service
After=dropbear.service
After=tiipclad-daemon.service
After=telnetd.service
After=rc.pvr.service
After=uim-sysfs.service
After=alignment.service
Conflicts=shutdown.target
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
ExecStart=/etc/init.d/appService start
ExecStop=/etc/init.d/appService stop
如果我嘗試手動啟動服務( systemctl start appService
),我會收到 XDG_RUNTIME_DIR 錯誤。什麼?為什麼 X 會妨礙我?
我該如何修復這個腳本?我想在 Weston 合成器啟動後啟動它
答案1
X11需要設定一些環境變數才能使應用程式在X11下正常啟動。您是否確認需要設定哪些環境變數才能在 Weston 下啟動應用程式?
根據我的經驗,對於自動啟動圖形應用程式來說,使用桌面環境的「啟動應用程式」功能比systemd
.在該設計中,已經為您設定了正確的環境變數。