在嵌入式系统中运行Qt程序通常需要一些特别的配置,尤其是在没有标准图形环境的情况下。本文将详细介绍如何在Rockchip RK3568平台上配置和运行Qt程序,以及如何解决一些常见的问题。
ssh/adb 运行界面应用不需要x11转发
使用Linux Framebuffer (fbdev)
Qt可以配置为使用Linux Framebuffer作为后端来显示界面。这不需要X11支持,但可能不支持Qt的一些高级功能。要使用Framebuffer,可以设置环境变量:
export QT_QPA_PLATFORM=linuxfb
使用EGLFS
EGLFS是一个适用于嵌入式系统的Qt平台插件,它使用OpenGL ES来渲染图形界面。要使用EGLFS,可以设置环境变量:
export QT_QPA_PLATFORM=eglfs
使用Wayland
如果RK3568系统上安装了Wayland,并且Qt支持Wayland,可以使用Wayland作为显示后端。设置环境变量:
export QT_QPA_PLATFORM=wayland
Qt平台插件参数
QT_QPA_PLATFORM环境变量支持多种参数,包括:
linuxfb
: 使用Linux Framebuffer。eglfs
: 使用EGL Full Screen。wayland
: 使用Wayland。xcb
: 使用X Window System。minimal
: 最小化后端。offscreen
: 无显示后端。vnc
: 通过VNC协议远程显示。
Qt程序无法连接到X服务器
最终解决办法:
如果Qt程序无法连接到X11服务器,需要设置DISPLAY环境变量,并检查X权限和服务器状态:
export DISPLAY=:0 export QT_QPA_PLATFORM=linuxfb # 这样adb 和 ssh都可以执行qt程序,饼显示到display 桌面上。 # xhost +SI:localuser:<root>
OpenGL驱动问题
如果遇到OpenGL驱动问题,可以尝试禁用OpenGL加速或配置Qt使用OpenGL ES驱动:
export QT_OPENGL=software
关闭Google Chrome的密钥环密码提示
要关闭Google Chrome的新密钥环密码提示,可以修改Chrome的启动配置文件:
sudo vi/usr/share/applications/google-chrome.desktop
在文件中添加--password-store=basic
到Chrome的启动命令:
Exec=/usr/bin/google-chrome-stable --password-store=basic %U
完整的/usr/share/applications/google-chrome.desktop
echo "[Desktop Entry] Version=1.0 Name=Google Chrome Exec=/usr/bin/google-chrome-stable --password-store=basic --homepage www.baidu.com %U Terminal=false X-MultipleArgs=false Type=Application Icon=google-chrome Categories=Network;WebBrowser; MimeType=text/html;text/xml;application/xhtml_xml;image/webp;x-scheme-handler/http;x-scheme-handler/https;x-scheme-handler/ftp; Actions=new-window;new-private-window; [Desktop Action new-window] Name=New Window Exec=/usr/bin/google-chrome-stable --password-store=basic --homepage www.baidu.com TargetEnvironment=Unity [Desktop Action new-private-window] Name=New Incognito Window Exec=/usr/bin/google-chrome-stable --password-store=basic --incognito --homepage www.baidu.com TargetEnvironment=Unity" | tee /usr/share/applications/google-chrome.desktop
这将使Chrome的密码存储方式更改为基本模式,不再提示输入新密钥环密码。
总结
在嵌入式系统中ssh/adb 运行Qt程序可能需要一些额外的步骤和调试。本文提供了一些常见问题的解决方案,Linux平台上顺利运行Qt程序。