启动时在 weston 之上启动 Qt/wayland 应用程序

启动时在 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 实例上启动应用程序。

答案1

通常,这不是在特定的 tty 上启动 Weston,而是设置环境变量,将您路由到 Wayland 和 Weston 的正确实例。这些变量WAYLAND_DISPLAY甚至适用于DISPLAY需要 XWayland 的应用程序。

/etc/profile.d/weston.sh您通常可以通过获取诸如(或在某些情况下)之类的文件来获得所需的正确环境wayland_env.sh。这通常是在您登录 shell 时为您完成的,但 systemd 作业不会启动 shell,因此它们不会设置这些变量。

也许尝试这样的事情onyx-start

#!/bin/sh
. /etc/profile.d/weston.sh
exec /path/to/QtApp

您拥有的服务单位应该与此合作。

(如果仍然不起作用,请列出有关您的环境的更多详细信息,例如您正在使用的 Linux 发行版、 的内容weston.service、 的输出、或systemctl status weston.service的内容以及是否通过 SSH 启动 QtApp 而不启动新的 Weston,也许获取环境配置文件后,如果由于任何原因未在这些连接上设置这些变量。)weston.shwayland_env.sh

答案2

要添加@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

相关内容