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".

四、解决

xdpyinfounable 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 Design Studio(QDS)4.8.2项目文件结构详解
开发语言·qt·qt creator·qds·项目文件结构·qtc
qq_401700416 小时前
Qt窗体大小控制从resize到自适应
开发语言·qt
Quz6 小时前
QML SwipeView:手势翻页与自定义指示器
qt
Quz6 小时前
QML TabBar组件与容器索引的绑定
qt
励志不掉头发的内向程序员8 小时前
【LibreCAD 2D架构】鼠标点下的坐标为什么会被“吸”走?LibreCAD 对象捕捉系统解析
开发语言·c++·qt·学习·系统架构
charlie11451419118 小时前
现代Qt开发之图像处理进阶:像素操作与格式转换
开发语言·图像处理·qt
Jackson_GJH21 小时前
Qt 右键自定义菜单的实现
开发语言·c++·qt
老赵的博客1 天前
c++ 之观察者模式
c++·qt
Quz1 天前
QML TabBar 自定义样式与动态标签
qt