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>
相关推荐
9***P3346 小时前
PHP代码覆盖率
开发语言·php·代码覆盖率
CoderYanger6 小时前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
jllllyuz7 小时前
Matlab实现基于Matrix Pencil算法实现声源信号角度和时间估计
开发语言·算法·matlab
多多*7 小时前
Java复习 操作系统原理 计算机网络相关 2025年11月23日
java·开发语言·网络·算法·spring·microsoft·maven
p***43487 小时前
Rust网络编程模型
开发语言·网络·rust
ᐇ9597 小时前
Java集合框架深度实战:构建智能教育管理与娱乐系统
java·开发语言·娱乐
梁正雄8 小时前
1、python基础语法
开发语言·python
强化学习与机器人控制仿真8 小时前
RSL-RL:开源人形机器人强化学习控制研究库
开发语言·人工智能·stm32·神经网络·机器人·强化学习·模仿学习
百***48078 小时前
【Golang】slice切片
开发语言·算法·golang
q***92518 小时前
Windows上安装Go并配置环境变量(图文步骤)
开发语言·windows·golang