Weston/Wayland コンポジターの下で systemd を使用して Linux の起動時にグラフィカル プログラムを開く

Weston/Wayland コンポジターの下で systemd を使用して Linux の起動時にグラフィカル プログラムを開く

欲しいもの:Weston コンポジターで起動時にプログラムを開く

私が試したこと: 優先度の低いSysV initスクリプトを作成する

何が効果的か: ウェストンは起動するが、私のプログラムは起動しない

こんにちは。私は組み込み環境でプログラムに取り組んでいます。このプログラムは 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 でアプリを正しく起動するには、いくつかの環境変数を設定する必要があります。Weston でアプリを起動するために設定する必要がある環境変数を確認しましたか?

私の経験では、グラフィカル アプリを自動起動するには、 よりもデスクトップ環境の「スタートアップ アプリ」機能を使用する方が適していますsystemd。その設計では、適切な環境変数がすでに設定されています。

関連情報