在 Weston/Wayland 合成器下使用 systemd 在 Linux 中啟動時開啟圖形程序

在 Weston/Wayland 合成器下使用 systemd 在 Linux 中啟動時開啟圖形程序

想要的:在 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.在該設計中,已經為您設定了正確的環境變數。

相關內容