I develop software in Qt for a microcomputer based on Cortex imx6. On this platform, I have installed Linux prepared for this uP and Qt.
uname -a
Linux colibri-imx6 4.1.35-v2.7b1+gc1177831f5a1 #11 SMP Tue Jun 20 13:05:01 CEST 2017 armv7l armv7l armv7l GNU/Linux
I want to run my app during system startup and I have a problem with this. I wrote a basic service for this:
/etc/init.d/panel-service.sh:
#!/bin/sh
### BEGIN INIT INFO
# Provides: panel-service.sh
# Required-Start: $remote_fs $syslog $all
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Service to autorun app during system starting.
### END INIT INFO
### START config here:
BUSAGE="usage: $0 {start|stop}";
### END config here.
usage(){
echo $USAGE >&2
}
start(){
echo "Start panel service"
sh /home/root/panel.sh
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
*)
usage
exit 1
;;
esac
/home/root/panel.sh:
#!/bin/sh echo "Script is already run" /home/root/panel
After rebooting my device, I got an error:
QML debugging is enabled. Only use this in a safe environment. This application failed to start because it could not find or load the Qt platform plugin “xcb” in “”.
Available platform plugins are: eglfs, minimal, minimalegl, offscreen.
Reinstalling the application may fix this problem. /media/sdcard/panel.sh: line 11: 410 Aborted panel
/home/root/panel
It’s strange, because my app don’t use libxcb.so…
ldd panel
libudev.so.1 => /lib/libudev.so.1 (0x76ea0000) libblkid.so.1 => /lib/libblkid.so.1 (0x76e5c000) libQt5Quick.so.5 => /usr/lib/libQt5Quick.so.5 (0x76b56000) libQt5Widgets.so.5 => /usr/lib/libQt5Widgets.so.5 (0x76645000) libQt5Gui.so.5 => /usr/lib/libQt5Gui.so.5 (0x761d4000) libQt5Qml.so.5 => /usr/lib/libQt5Qml.so.5 (0x75e84000) libQt5Network.so.5 => /usr/lib/libQt5Network.so.5 (0x75d34000) libQt5Core.so.5 => /usr/lib/libQt5Core.so.5 (0x7587b000) libpthread.so.0 => /lib/libpthread.so.0 (0x75853000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x7570d000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x756e1000) libc.so.6 => /lib/libc.so.6 (0x755a5000) /lib/ld-linux-armhf.so.3 (0x76edc000) libuuid.so.1 => /lib/libuuid.so.1 (0x75592000) libGLESv2.so.2 => /usr/lib/libGLESv2.so.2 (0x75499000) libm.so.6 => /lib/libm.so.6 (0x7541b000) libharfbuzz.so.0 => /usr/lib/libharfbuzz.so.0 (0x7539b000) libz.so.1 => /lib/libz.so.1 (0x75379000) libpng16.so.16 => /usr/lib/libpng16.so.16 (0x75341000) libicui18n.so.57 => /usr/lib/libicui18n.so.57 (0x75148000) libicuuc.so.57 => /usr/lib/libicuuc.so.57 (0x74feb000) libdl.so.2 => /lib/libdl.so.2 (0x74fd8000) libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0x74ed9000) librt.so.1 => /lib/librt.so.1 (0x74ec2000) libGAL.so => /usr/lib/libGAL.so (0x74dbe000) libEGL.so.1 => /usr/lib/libEGL.so.1 (0x74d9e000) libVSC.so => /usr/lib/libVSC.so (0x74cdc000) libpcre.so.1 => /usr/lib/libpcre.so.1 (0x74c8d000) libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x74c07000) libicudata.so.57 => /usr/lib/libicudata.so.57 (0x7337b000)
I tried to add script to /etc/profile.d with the same error and I set auto log on root during system loading, but with no other results. When I run app or service after full system load from terminal, everything works fine and the app starts, so I have all of the necessary libraries. I don’t know why it doesn’t start after reboot.
Differents in env between time, when script is call and full system load. Script call moment:
CONSOLE=/dev/console TERM=linux SHELL=/bin/sh OLDPWD=/ INIT_VERSION=sysvinit-2.88 PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin RUNLEVEL=5 runlevel=5 PWD=/media/sdcard VERBOSE=no PREVLEVEL=N previous=N fbmem=24M HOME=/ SHLVL=2 fec_mac=00:14:2d:4a:4a:cb enable_wait_mode=off _=/usr/bin/env
After system load:
HZ=100 SHELL=/bin/sh TERM=linux HUSHLOGIN=FALSE USER=root PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin:/sbin QT_QPA_EGLFS_FORCE888=1 PWD=/home/root EDITOR=vi QT_QPA_EGLFS_PHYSICAL_WIDTH=154 QT_QPA_PLATFORM=eglfs PS1=u@h:w$ QT_QPA_EGLFS_FORCEVSYNC=1 SHLVL=1 HOME=/home/root LOGNAME=root QT_QPA_EGLFS_PHYSICAL_HEIGHT=85 _=/usr/bin/env
Can I set QT env variables which aren’t set during system starting?
Advertisement
Answer
In my case the point is to set Qt env variables in bash script using export.
Below last version of my script:
#!/bin/bash PATH=$PATH:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin export QT_QPA_EGLFS_FORCE888=1 export QT_QPA_EGLFS_PHYSICAL_WIDTH=154 export QT_QPA_PLATFORM=eglfs export QT_QPA_EGLFS_FORCEVSYNC=1 export QT_QPA_EGLFS_PHYSICAL_HEIGHT=85 export QT_PLUGIN_PATH=/usr/lib/qt5/plugins echo "Script is already run" cd /home/root/ panel
It work like a charm. š