起動時にQtアプリケーションを起動したいのですが。アプリケーションは、weston/waylandデスクトップの機能の一部を使用するため、westonが起動した直後に、westonの上で起動する必要があります。通常、私はSSHを使用してターゲットプラットフォームに接続し、次のコマンドを使用してアプリケーションを起動します。
systemctl stop weston
weston --tty=1
./QtApp
Westonを終了せず、TTYで開始しないと、次のエラーが発生します。
Failed to create display
私がやろうとしたことは、起動スクリプトを設定してそれをsystemdに統合することです。
[Unit]
Description = Onyx Service
After = weston.service
Type = forking
[Service]
ExecStart = /bin/bash /opt/onyx-start
[Install]
WantedBy = multi-user.target
ただし、ご想像のとおり、これは機能しません。 TTYオプションで起動されていない既存のwestonインスタンスでアプリケーションを起動する必要があります。
通常、それは特定のttyでWestonを起動することではなく、WaylandとWestonの適切なインスタンスにルーティングする環境変数を設定することです。これらの変数は、XWaylandを必要とするアプリケーションの場合、WAYLAND_DISPLAY
やDISPLAY
などです。
通常、/etc/profile.d/weston.sh
(または場合によってはwayland_env.sh
)などのファイルを入手することで、必要な適切な環境を取得できます。これは通常、シェルにログインしたときに行われますが、systemdジョブではシェルを起動しないので、これらの変数は設定されません。
たぶんonyx-start
で次のようなことを試してください:
#!/bin/sh
. /etc/profile.d/weston.sh
exec /path/to/QtApp
あなたが持っているサービスユニットはそれで動作するはずです。
(それでも機能しない場合は、使用しているLinuxディストリビューション、weston.service
の内容、systemctl status weston.service
の出力、weston.sh
の内容など、環境に関する詳細をリストしてくださいまたはwayland_env.sh
そして、何らかの理由でこれらの変数がこれらの接続で設定されていない場合、おそらく環境プロファイルファイルをソースした後、QtAppの起動は新しいWestonを起動せずにSSH経由で機能します。
@filbrandenの回答に追加するには、/etc/profile.d/weston.sh
またはwayland_env.sh
はもう配布されていないので、次のスクリプトでうまくいきました。
#!/bin/bash
weston &
sleep 5s # could be less
export WAYLAND_DISPLAY=wayland-0
export DISPLAY=:1
exec /path/to/myapp