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>
相关推荐
灯澜忆梦2 小时前
GO_并发编程---定时器
开发语言·后端·golang
-银雾鸢尾-2 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-2 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
大模型码小白3 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
段一凡-华北理工大学5 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
Ljwuhe5 小时前
C++——多态
开发语言·c++
心平气和量大福大6 小时前
C#-WPF-Window主窗体
开发语言·c#·wpf
从零开始的代码生活_7 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸7 小时前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
Quz8 小时前
QML 信号与槽:直接绑定与跨文件通信
qt·编程语言·设计