Ubuntu22.04 Qt 调用shell 脚本启动程序,GLFW 初始化失败

一、脚本

复制代码
#!/bin/bash
#nohup ./FT2A  >/dev/null 2>&1 &

LOG=/opt/1.log

echo $1 >> $LOG
echo $2 >> $LOG
echo $3 >> $LOG
echo $4 >> $LOG
echo $5 >> $LOG


if [ "$5" = "launch" ]; then
    echo "执行安装操作..."

    #切换目录
    cd $1
    echo "cd 成功,当前目录: $(pwd)" >> $LOG
    
    #设置权限
    chmod 777 $1/$2
    
    # 执行并捕获退出码和输出
    export DISPLAY=:0

    #启动程序
    echo "准备执行: $1/$2" >> $LOG
    #"$1/$2" >> $LOG 2>&1

    export LD_LIBRARY_PATH=$PATH:$1
    sudo ./$2
    echo "=== 执行完毕 ===" >> $LOG

fi

二、检查当前会话

复制代码
nvidia@nvidia-desktop:/opt/AppLauncher/build/Linux$ echo $XDG_SESSION_TYPE
x11

确认是 X11 环境 ,排除了 Wayland 的问题。那 DISPLAY=:0 也设了,GLFW 还是初始化失败,说明问题出在更具体的地方。

三、排查

3.1. 确认 X Server 进程在跑

复制代码
ps aux | grep -E 'Xorg|X' | grep -v grep

3.2. 确认 OpenGL 是否可用

复制代码
glxinfo | grep "OpenGL" 2>&1 | head -5

如果 glxinfo 没装:

复制代码
sudo apt install mesa-utils
glxinfo | grep "OpenGL"

3.3. 确认 X11 连接是否正常

复制代码
xdpyinfo -display :0 2>&1 | head -10

发现:

复制代码
nvidia@nvidia-desktop:/opt/AppLauncher/build/Linux$ xdpyinfo -display :0 2>&1 | head -10
xdpyinfo:  unable to open display ":0".

四、解决

xdpyinfo 报 unable to open display ":0",说明 X Server 根本没有在 :0 上运行 ,所以不管怎么设 DISPLAY 都没用。

复制代码
# 查看 X Server 进程是否存在
ps aux | grep -E 'Xorg|Xwayland|X ' | grep -v grep

# 查看当前实际的 DISPLAY 值
echo $DISPLAY

# 查看当前登录会话信息
who

找到原因了。实际DISPLAY是 :1, 而不是 :0

把脚本里的

复制代码
export DISPLAY=:0

改为:

复制代码
export DISPLAY=:1
相关推荐
慧都产品智能化14 小时前
Qt 表格升级攻略:复用已有编辑器,减少重复开发
c++·qt·编辑器·qt6.3
ShineWinsu14 小时前
对于Qt:QTableWidget常见属性以及QTableWidgetItem类的解析
开发语言·c++·qt·gui·客户端·表格·qtablewidget
ShineWinsu15 小时前
对于Qt:QListWidget常见属性以及QListWidgetItem类的解析
开发语言·c++·qt·客户端·列表·qlistwidget·qlistwidgetitem
ShineWinsu21 小时前
对于Qt:QDial常见属性以及信号的解析
开发语言·c++·qt·gui·客户端·旋钮·qdial
宛 禾1 天前
Qt 事件系统完全指南:从事件循环到实战避坑
qt
敲上瘾2 天前
Qt Widgets入门:项目模板解析与Hello World
开发语言·数据库·c++·qt·ui·qt6.3
MOONICK2 天前
QT元数据
开发语言·qt
橙橙笔记3 天前
QT的学习第四部分
linux·qt·学习·音视频
sycmancia3 天前
Qml——信号连接、自定义信号
qt
奇树谦6 天前
Qt Quick 图片加载与 GPU 纹理机制详解:QImage、QQuickTextureFactory、QSGTexture 与异步加载
开发语言·qt·系统架构