The Want: abrindo um programa na inicialização em um compositor de Weston
O que eu tentei : criar um script de init do SysV com baixa prioridade
O que funciona : o Weston é lançado, mas meu programa não
Olá, estou trabalhando em um programa em um ambiente incorporado. O programa é baseado em Qt, e gostaria que fosse executado quando o dispositivo for inicializado. Este dispositivo usa uma distro do tipo Debian, com a exceção de que, quando é inicializado, ele é inicializado diretamente para um compositor Weston, em vez de um login / desktop.
O que eu fiz até agora foi criado um script padrão /etc/init.d
(mostrado abaixo) que inicia meu programa usando start-stop-daemon
e tem um simples alternar start-stop. Isso funciona se chamado manualmente, no entanto, usando update-rc.d appService defaults
resulta no programa não iniciar na inicialização.
Se eu tentar iniciar manualmente o serviço gera automaticamente ( systemctl start appService
), recebo um erro XDG_RUNTIME_DIR. O que??? Por que o X está atrapalhando?
Investigando o arquivo .service que o systemd gera automaticamente (também mostrado abaixo), o programa deseja executar antes que o nível de execução multi-user.target
seja atingido.
O script
#!/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
O arquivo de serviço:
[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
Se eu tentar iniciar manualmente o serviço ( systemctl start appService
), receberei um erro XDG_RUNTIME_DIR. O que??? Por que o X está atrapalhando?
Como posso corrigir esse script? Eu quero que seja lançado após o lançamento do compositor de Weston