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
相关推荐
前行中的小猪2 分钟前
Qt 5 踩坑实录:多显示器跨屏拖拽导致窗口异常放大与 setGeometry 报错的深度解析与根治
qt·多显示器·高分辨率·多屏幕
想做小南娘,发现自己是女生喵2 小时前
QT项目实战第一周(嵌入式)
开发语言·qt
誰能久伴不乏3 小时前
【无标题】
c++·qt·机器人
金色熊族3 小时前
在Qt中使用asan检测内存泄漏(二)--检查依赖库的内存使用
linux·qt·asan
qq_401700414 小时前
Qt 组播(Multicast)实战详解
开发语言·qt
布莱克6051 天前
QtWidgets 与 QML:两大 UI 开发框架的全面对比
开发语言·c++·qt·ui·架构
qq_401700411 天前
Qt 实时大数据量存储:自己动手实现 TDMS 读写
数据库·qt
NiceBlueChai1 天前
Qt 跨线程传递多容器嵌套结构:一次 Release 实测
开发语言·qt
扶尔魔ocy1 天前
【QT android】模仿行车记录仪案例
android·qt
zhanghaha13142 天前
Qt 类本质就是 C++ 的类,只是 Qt 框架扩展了一套【QObject 对象模型】
qt