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>
相关推荐
r_oo_ki_e_21 小时前
java22--常用类
java·开发语言
AI小怪兽21 小时前
轻量、实时、高精度!MIE-YOLO:面向精准农业的多尺度杂草检测新框架 | MDPI AgriEngineering 2026
开发语言·人工智能·深度学习·yolo·无人机
码农小韩21 小时前
基于Linux的C++学习——循环
linux·c语言·开发语言·c++·算法
CoderCodingNo1 天前
【GESP】C++五级/四级练习(双指针/数学) luogu-P1147 连续自然数和
开发语言·c++·算法
IT=>小脑虎1 天前
PHP零基础衔接进阶知识点【详解版】
开发语言·学习·php
你怎么知道我是队长1 天前
C语言---位域
c语言·开发语言
zhyf1191 天前
零刻AI Max395(Ubuntu 24.04)AMD 显卡监控工具(amdgpu_top)部署手册
linux·运维·ubuntu
Z1Jxxx1 天前
日期日期日期
开发语言·c++·算法
Learner1 天前
Python函数
开发语言·python
_李小白1 天前
【Android FrameWork】延伸阅读:AMS 的 handleApplicationCrash
android·开发语言·python