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.d
script estándar (que se muestra a continuación) que inicia mi programa usando start-stop-daemon
y tiene un simple interruptor de inicio y parada. Esto funciona si se llama manualmente; sin embargo, el uso da update-rc.d appService defaults
como 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.target
alcanzar 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.