使用 Weston/Wayland 合成器下的 systemd 在 Linux 启动时打开图形程序

使用 Weston/Wayland 合成器下的 systemd 在 Linux 启动时打开图形程序

需求:在 Weston 合成器中启动时打开一个程序

我尝试过的方法:创建低优先级的 SysV 初始化脚本

什么有效: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。在这种设计中,已经为您设置了适当的环境变量。

相关内容