UBUNTU20.04 配置以QT界面程序代替系统界面启动,以及如何在tty模式下以linuxfb形式启动

QT界面代替系统界面启动

xsessions配置

将QT程序直接当成ubuntu的桌面,需要替换掉/usr/share/xsessions下的原有桌面配置文件。

将原目录的ubuntu.desktop文件后缀改名,重新创建新文件myApp.desktop文件并添加内容

cpp 复制代码
[Desktop Entry]
Name=myapplication
Comment=auto start myapplication
Exec=/bin/bash /home/a/czk200/StartRun.sh #运行脚本
#Exec=/home/a/czk200/CZK #运行程序
Iocn=
Type=Application

QT配置

注意:此方法当QT崩溃时会跳转到登录界面,但是输入密码过后会反复显示登录界面,无法进入任何桌面,那是因为QT程序已经作为了ubuntu的当前桌面,而程序崩溃之后,脚本执行完毕,故ubuntu找不到该显示的桌面了,所以会无限显示登录页面,此时也可以通过Ctrl+Alt+F1~F3进入tty命令模式启动。

桌面模式下启动

QT启动配置脚本,注意权限问题

cpp 复制代码
#!/bin/bash

cd /home/a/czk200/
echo 123456 | sudo -S pwd

export DISPLAY=:0.0

ulimit -c unlimited
export LD_LIBRARY_PATH=/usr/lib/
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/plugins/
export QT_DEBUG_PLUGINS=1
#export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
#export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1

sudo chmod 777 CZK

./CZK

# 启动CZK方式

#1,图形界面模式启动
./CZK

tty模式启动

指定 linuxfb 这个选项告诉程序使用帧缓冲来渲染图形,而不是 X11 或 Wayland。linuxfb 是一个低级的显示方式,通常用于没有图形桌面的环境,或当你直接操作显示设备(比如嵌入式设备或没有 X11 的系统)时。

cpp 复制代码
#!/bin/bash

cd /home/a/czk200/
echo 123456 | sudo -S pwd

export DISPLAY=:0.0

ulimit -c unlimited
export LD_LIBRARY_PATH=/usr/lib/
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/plugins/
export QT_DEBUG_PLUGINS=1
#export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
#export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event1

# 启动 ./CZK
sudo chmod 777 CZK
sudo chmod 666 /dev/fb0
#gdb CZK

# 启动CZK方式

#2,tty模式启动
sudo chmod 666 /dev/fb0
./CZK --platform linuxfb:fb="/dev/fb0"

问题

1,出现qt.qpa.plugin:Could not load the Qt platform plugin "xcb"问题

XCB插件库指定路径问题

XCB库加载失败问题,有可能是由于XCB插件库指定路径问题,手动指定QT_QPA_PLATFORM_PLUGIN_PATH安装路径和QT_DEBUG_PLUGINS调试信息,根据调试信息查找问题。

cpp 复制代码
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/plugins/

export QT_DEBUG_PLUGINS=1

2,出现Cannot create window: no screens available

检查 framebuffer 设备是否存在

确保你的系统中有可用的 framebuffer 设备。可以通过以下命令查看:

cpp 复制代码
ls /dev/fb*

安装 framebuffer 相关的包

你可以尝试安装 framebuffer 所需的相关包,确保系统具备正确的图形支持:

cpp 复制代码
sudo apt-get install fbdev

设置环境变量

确保你已经为 Qt 设置了正确的平台插件路径。你可以通过以下命令设置环境变量:

cpp 复制代码
export LD_LIBRARY_PATH=/usr/lib/
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/lib/plugins/
export QT_DEBUG_PLUGINS=1

3,出现提示loaded library "/usr/lib/plugins/platforms/libqlinuxfb.so" Failed to open framebuffer /dev/fb0 (Permission denied) linuxfb: Failed to initialize screen问题

Framebuffer Permissions:

提示打开/dev/fb0设备失败由于权限问题,所以检查/dev/fb0权限

cpp 复制代码
sudo chmod 666 /dev/fb0

Input Device Permissions:

检查输入设备权限

cpp 复制代码
sudo chmod 666 /dev/input/event*
sudo chmod 666 /dev/input/mouse*

Running as Root:

检查运行程序权限问题

cpp 复制代码
sudo <your-application>
相关推荐
何朴尧16 分钟前
全局数据的处理
开发语言
Web极客码18 分钟前
如何在中将网络改为桥接模式并配置固定IP地址
开发语言·网络·ubuntu·php·虚拟机
方博士AI机器人35 分钟前
GNU Octave 基础教程(1):Ubuntu 22.04 与 Windows 11 安装 Octave 全流程
windows·ubuntu·octave
T风呤1 小时前
QT历史版本,5.15.2使用清华源半小时安装速成
开发语言·qt
晨曦5432101 小时前
针对经济学大数据的 Python 爬虫实践指南
开发语言·爬虫·python
上位机付工1 小时前
C#上位机实现报警语音播报
开发语言·c#·上位机·plc·运动控制卡·语音播报·报警播报
千千道1 小时前
QT 中使用 QSettings 读写 ini 配置文件
开发语言·qt
benben0442 小时前
Unity3D仿星露谷物语开发67之创建新的NPC
开发语言·游戏·ui·c#·游戏引擎
matdodo2 小时前
【大数据】java API 进行集群间distCP 报错unresolvedAddressException
java·大数据·开发语言
方博士AI机器人2 小时前
GNU Octave 基础教程(2):第一个 Octave 程序
ubuntu·数据分析·octave