Executando um script que inicia outros aplicativos usando o serviço systemd

1

Nosso aplicativo C ++ Qt é executado graficamente sem X, especificando a opção -qws . Por causa disso, eu desinstalei e desativei o ambiente gráfico no BeagleBone Black. Agora, quando eu ligar a placa, acabo com a tela de login de texto padrão.

Quando eu efetuo login como root com uma senha vazia, posso executar um script que define algumas configurações para a tela sensível ao toque etc. e, em seguida, inicia o aplicativo. Isso funciona perfeitamente.

Agora, precisamos iniciar automaticamente esse aplicativo em cada inicialização, já que todo o pacote deve estar em funcionamento em algum gabinete industrial sem nenhum teclado ou mouse conectado. Para conseguir isso, criei um serviço systemd, mas infelizmente não funciona. Quando eu reinicio o sistema, nosso aplicativo aparece por uma fração de segundo, mas ele quase instantaneamente entra em colapso e volta para a tela de login.

Quando eu entro e tento iniciar o serviço, ele também não funciona. Isto é o que diz systemctl status ivt.service :

ivt.service - IVT Startup Routines
          Loaded: loaded (/lib/systemd/system/ivt.service; enabled)
          Active: failed (Result: exit-code) since Sat 2000-01-01 00:35:26 UTC; 1min 39s ago
         Process: 499 ExecStart=/usr/bin/ivtstartup.sh (code=exited, status=139)
        Main PID: 403 (code=exited, status=139)
          CGroup: name=systemd:/system/ivt.service

Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: Shutdown clients...
Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: Shutdown servers...
Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: Shutdown PaPort1 ...
Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: PaPort1 shutdown completed.
Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: SYSTEM-SHUTDOWN COMPLETE.
Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: Unload drivers...
Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: CSystemManager::UnloadServers PaPort1
Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: Unload drivers completed.
Jan 01 00:35:26 beaglebone systemd[1]: Failed to start IVT Startup Routines.
Jan 01 00:35:26 beaglebone systemd[1]: Unit ivt.service entered failed state

Este é o script que eu quero executar com o serviço (em /usr/bin/ivtstartup.sh ):

#!/bin/bash
ifconfig eth0 172.17.6.136 netmask 255.255.248.0 up
route add default gw 172.17.1.200
echo "nameserver 172.17.1.51" > /etc/resolv.conf
ln -s /dev/ttyO2 /dev/ttyM0
/home/root/testbg &
(
export TSLIB_TSDEVICE="/dev/input/touchscreen0";
export TSLIB_CALIBFILE="/etc/pointercal";
export QWS_MOUSE_PROTO="Tslib:/dev/input/touchscreen0";
bash -c '/home/root/testgui -qws';
)

E finalmente este é o serviço /etc/systemd/system/ivt.service :

[Unit]
Description=IVT Startup Routines

[Service]
Type=forking
ExecStart=/usr/bin/ivtstartup.sh

[Install]
WantedBy=multi-user.target

Quando eu faço o login e, em seguida, executo /usr/bin/ivtstartup.sh manualmente, tudo funciona. O aplicativo testbg é executado em segundo plano (usado para alguma comunicação serial, etc.) e o testgui é exibido e funciona como esperado.

Qual é o problema dessa configuração? Existe outra maneira de obter um início automático desse script sem fazer login manualmente? Obrigado antecipadamente!

    
por Robert 11.09.2014 / 09:15

0 respostas