1

Наше приложение C++ Qt графически работает без X, указав ключ -qws . Из-за этого я удалил и отключил графическое окружение на BeagleBone Black. Теперь, когда я включаю плату, я получаю стандартный текстовый экран входа в систему.

Когда я вхожу в систему как root с пустым паролем, я могу запустить скрипт, который устанавливает некоторые настройки для сенсорного экрана и т.д., А затем запускает наше приложение. Это работает без нареканий.

Теперь нам нужно автоматически запускать это приложение при каждой загрузке, так как предполагается, что весь комплект будет дежурным в каком-то промышленном шкафу без какой-либо клавиатуры или мыши. Для этого я создал сервис systemd, но, к сожалению, он не работает. Когда я перезагружаю систему, наше приложение появляется на долю секунды, но почти мгновенно сворачивается и возвращается к экрану входа в систему.

Когда я вхожу в систему и пытаюсь запустить службу, она также не работает. Вот что говорит 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

Это скрипт, который я хочу выполнить со службой (в /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';
)

И, наконец, это сервис /etc/systemd/system/ivt.service:

[Unit]
Description=IVT Startup Routines

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

[Install]
WantedBy=multi-user.target

Когда я вхожу в систему и запускаю /usr/bin/ivtstartup.sh вручную, все работает. Приложение testbg работает в фоновом режиме (используется для некоторой последовательной связи и т.д.), И testgui обнаруживается и работает, как и ожидалось.

В чем проблема с этой конфигурацией? Есть ли другой способ автоматического запуска этого скрипта без входа в систему вручную? Заранее спасибо!

0