web-dev-qa-db-ja.com

起動時にwestonの上でQt / waylandアプリケーションを起動します

起動時に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インスタンスでアプリケーションを起動する必要があります。

2
mozcelikors

通常、それは特定のttyでWestonを起動することではなく、WaylandとWestonの適切なインスタンスにルーティングする環境変数を設定することです。これらの変数は、XWaylandを必要とするアプリケーションの場合、WAYLAND_DISPLAYDISPLAYなどです。

通常、/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経由で機能します。

3
filbranden

@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

0
cengique