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
相关推荐
zhanghaha131411 小时前
Qt 中的类是什么?保姆级详解(新手版)
qt
看看我呀看看我13 小时前
基于Qt的虚拟键盘
c++·qt·qt5·qt6.3
kaixin_learn_qt_ing13 小时前
Qt抽屉窗体实现demo
开发语言·qt
huanbailu18 小时前
Qt 跨线程信号槽:connect 返回 true 但槽函数不执行的坑
开发语言·c++·qt·信号槽·跨线程·元类型
Quz21 小时前
QML SplitView:可拖拽分隔面板与自定义 Handle
qt
Quz21 小时前
QML SplitView 进阶:嵌套布局与状态持久化
qt
时间的拾荒人21 小时前
Qt 显示类控件详解:从 QLabel 到 QCalendarWidget 的实战指南
开发语言·qt·面试
kaixin_learn_qt_ing1 天前
Qt插件机制demo示例
qt
Quz1 天前
QML Flickable:内容滚动与边界行为
qt
Quz1 天前
QML Flipable:卡片翻转与登录设置
qt