Откройте графическую программу в Linux при загрузке с помощью systemd в редакторе Weston/Wayland

Откройте графическую программу в Linux при загрузке с помощью systemd в редакторе Weston/Wayland

Желание:открытие программы при загрузке в Weston Compositor

Что я пробовал: создание сценария инициализации SysV с низким приоритетом

Что работает: Уэстон запускается, но моя программа нет

Здравствуйте, я работаю над программой во встроенной среде. Программа основана на Qt, и я хочу, чтобы она запускалась при загрузке устройства. Это устройство использует дистрибутив, подобный Debian, за исключением того, что при загрузке оно загружается прямо в Weston compositor, а не в login/desktop.

Что я сделал до сих пор, так это создал стандартный /etc/init.dскрипт (показан ниже), который запускает мою программу с помощью start-stop-daemonи имеет простой переключатель старт-стоп. Это работает, если вызывать вручную, однако использование update-rc.d appService defaultsприводит к тому, что программа не запускается при загрузке.

Если я пытаюсь вручную запустить службу автоматически генерирует ( systemctl start appService), я получаю ошибку XDG_RUNTIME_DIR. Что??? Почему X мне мешает?

Исследуя файл .service, который systemd автоматически генерирует (также показан ниже), можно увидеть, что программа хочет запуститься до 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 compositor

решение1

X11 требует установки некоторых переменных среды для корректного запуска приложений в X11. Вы подтвердили, какие переменные среды необходимо установить для запуска приложений в Weston?

По моему опыту, лучшим выбором для автозапуска графических приложений будет использование функции "автозапуска приложений" среды рабочего стола, чем systemd. В этом дизайне правильные переменные среды будут уже установлены для вас.

Связанный контент