Abra el programa gráfico en Linux al arrancar usando systemd bajo un compositor Weston/Wayland

Abra el programa gráfico en Linux al arrancar usando systemd bajo un compositor Weston/Wayland

El deseo:abrir un programa al arrancar en un compositor Weston

lo que he probado: creación de un script de inicio SysV con baja prioridad

Que funciona: Weston se inicia, pero mi programa no.

Hola, estoy trabajando en un programa en un entorno integrado. El programa está basado en Qt y me gustaría que se ejecute cuando se inicie el dispositivo. Este dispositivo utiliza una distribución similar a Debian, con la excepción de que cuando arranca, arranca directamente en un compositor Weston, en lugar de un inicio de sesión/escritorio.

Lo que he hecho hasta ahora es crear un /etc/init.dscript estándar (que se muestra a continuación) que inicia mi programa usando start-stop-daemony tiene un simple interruptor de inicio y parada. Esto funciona si se llama manualmente; sin embargo, el uso da update-rc.d appService defaultscomo resultado que el programa no se inicie en el arranque.

Si intento iniciar manualmente el servicio que genera automáticamente ( systemctl start appService), recibo un error XDG_RUNTIME_DIR. ¿¿¿Qué??? ¿Por qué X se interpone en mi camino?

Al investigar el archivo .service que systemd genera automáticamente (también se muestra a continuación), el programa desea ejecutar antes de multi-user.targetalcanzar el nivel de ejecución.

La secuencia de comandos

#!/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

El archivo de servicio:

[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

Si intento iniciar manualmente el servicio ( systemctl start appService), recibo un error XDG_RUNTIME_DIR. ¿¿¿Qué??? ¿Por qué X se interpone en mi camino?

¿Cómo puedo arreglar este script? Quiero que se inicie después de que se inicie el compositor Weston.

Respuesta1

X11 requiere que se configuren algunas variables de entorno para que las aplicaciones se inicien correctamente en X11. ¿Ha confirmado qué variables de entorno deben configurarse para iniciar aplicaciones en Weston?

En mi experiencia, una mejor opción para aplicaciones gráficas de inicio automático es utilizar la función de "aplicaciones de inicio" del entorno de escritorio que systemd. En ese diseño, las variables de entorno adecuadas ya estarán configuradas para usted.

información relacionada