Qt应用程序在linux嵌入式系统上自动运行;xcb";错误

Qt应用程序在linux嵌入式系统上自动运行;xcb";错误,linux,bash,qt,embedded-linux,Linux,Bash,Qt,Embedded Linux,我为基于Cortex imx6的微型计算机开发了Qt软件。在这个平台上,我已经安装了Linux,并为此做了准备 联阿援助团 Linux colibri-imx6 4.1.35-v2.7b1+gc1177831f5a1#11 SMP周二6月20日 13:05:01 CEST 2017 armv7l armv7l armv7l GNU/Linux 我想在系统启动期间运行我的应用程序,但我有一个问题。我为此写了一个基本服务: /etc/init.d/panel service.sh: #!/bin/s

我为基于Cortex imx6的微型计算机开发了Qt软件。在这个平台上,我已经安装了Linux,并为此做了准备

联阿援助团

Linux colibri-imx6 4.1.35-v2.7b1+gc1177831f5a1#11 SMP周二6月20日 13:05:01 CEST 2017 armv7l armv7l armv7l GNU/Linux

我想在系统启动期间运行我的应用程序,但我有一个问题。我为此写了一个基本服务:

/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
#!/bin/sh

echo "Script is already run"
/home/root/panel
/home/root/panel.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
#!/bin/sh

echo "Script is already run"
/home/root/panel
重新启动设备后,我遇到一个错误:

QML调试已启用。只能在安全的环境中使用。这 应用程序无法启动,因为它无法找到或加载Qt “”中的平台插件“xcb”

可用的平台插件有:eglfs、minimal、minimagegl、offscreen

重新安装应用程序可能会解决此问题。 /介质/SD卡/panel.sh:第11行:410中止面板

/主/根/面板

这很奇怪,因为我的应用程序不使用libxcb。所以

ldd面板

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) 
我试图将脚本添加到
/etc/profile.d
中,但出现了相同的错误,在系统加载期间我将自动登录设置为root,但没有其他结果。当我在从终端加载全部系统后运行应用程序或服务时,一切正常,应用程序启动,所以我有所有必要的库。我不知道为什么重启后它不能启动

在调用脚本和完全系统加载时,env中的时间不同。 脚本调用时刻:

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
系统加载后:

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

我可以设置系统启动期间未设置的QT env变量吗?

您的
/home/root/panel.sh中的标题错误,更正如下。另外,它的导入主要是为了确保
env
设置
$PATH
变量。 您可以在脚本中通过向脚本显式添加所需的路径进行更正,例如:

#!/bin/bash
PATH=$PATH:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

echo "Script is already run"
/home/root/panel

在我的例子中,重点是使用
export
在bash脚本中设置Qt
env
变量。 下面是我的脚本的最新版本:

#!/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

它工作起来很有魅力。:)

您正在使用哪个用户从终端开始。。我想不是根吧?什么是默认shell?为什么脚本头是
\bin/sh
。。我假设它应该是
#/bin/bash
。。或者无论您的
bash
shell的路径是什么?我在终端中使用root权限启动服务或bash脚本,它工作正常。你有一个权利,在头是错误的,但我仍然有相同的错误。检查<代码> SH -版本< /代码>以确保<代码> SH 实际上使用<代码> BASH < /代码> GNU BASH,版本4.3.46(1)-版本(ARM PokyLinux NGUEABI)版权(C)2013免费软件基金会,公司许可证GPLV3+:GNU GPL版本3或更高版本,这是免费软件;您可以自由更改和重新分发它。在法律允许的范围内,不存在任何担保。