Наше приложение 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
обнаруживается и работает, как и ожидалось.
В чем проблема с этой конфигурацией? Есть ли другой способ автоматического запуска этого скрипта без входа в систему вручную? Заранее спасибо!