opengl WSL Ubuntu显示“错误:即使手动设置显示环境变量后,仍无法打开显示”

rlcwz9us  于 2022-11-04  发布在  其他
关注(0)|答案(2)|浏览(179)

我在WSL Ubuntu上使用g++,使用git克隆了GLFW repo,使用ccmake命令配置并生成二进制文件,然后使用“build”目录中的make最终创建了.a文件。(我不记得我到底安装了哪一个,因为我必须安装这么多。不管怎样,g++命令是有效的,所以我认为它是成功的)。之后,我在VS Code上做了一个项目,看起来像这样:

GLFW包含文件夹来自前面提到的克隆存储库,GLAD和KHR包含文件夹来自glad.dav1d.de,其中我将GL版本(在API下)设置为 3.3,将Profile设置为 Core
main.cpp中,我放了一段用于初始化GLFW的简单代码:


# include <iostream>

# include <glad/glad.h>

# include <GLFW/glfw3.h>

int main()
{
    // Initialize GLFW
    if (!glfwInit()) {
        std::cerr << "Failed to initialize GLFW" << std::endl;
        return 1;
    }
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    std::cout << "Success" << std::endl;

    return 0;
}

然后用下面这个命令来编译这个项目:g++ -Wall -I./include/ -L./lib/ src/*.{c,cpp} -lglfw3 -lGL -lX11 -lpthread -lXrandr -lXi -ldl -o main。没有任何警告或错误。运行可执行文件后,我得到错误消息,GLFW无法初始化。我有点困惑为什么会发生这种情况,所以我键入glxinfo命令,发现我的DISPLAY环境变量还没有设置。
我完全不知道这个变量是什么,也不知道它代表什么。在网上搜索了一下,我发现了export DISPLAY=:0.0export DISPLAY=1export DISPLAY=IP:0.0,但都不起作用。有什么办法可以解决这个问题吗?

ngynwnxp

ngynwnxp1#

Windows 10上的WSL不包括对GUI应用程序的支持。你可以用OpenGL/X库构建一个应用程序,当然,但运行它需要一个X服务器来实际显示它。
一般来说,你有3个选择。我相信所有这些都可以与OpenGL一起工作,尽管我还没有测试过它们中的每一个:

  • 支持的方法是将Windows 11与WSLg配合使用。Windows 11使用支持的WDDMv3.0驱动程序(适用于AMD、Intel和nVidia GPU),即装即用支持WSL 2中的硬件加速OpenGL。有关详细信息,请参阅Microsoft Docs
  • 在Windows 10的WSL上运行X服务器的“正常”方法是安装第三方X服务器,如VcXsrv。请参阅this Super User question了解该场景下OpenGL支持的一些详细信息。不过,我不认为这会是硬件加速。

在这种情况下,你需要手动配置DISPLAY变量来指向你的Windows主机。你会找到一些相当complicated directions的方法来实现这一点,但恕我直言,最简单的方法是通过mDNS

  • 在升级到Windows 11之前,当我需要X支持时,我使用了xrdp。这允许使用远程桌面协议和支持的应用程序(如内置的Windows远程桌面连接)访问WSL示例。我也不相信有一种方法可以使用RDP来硬件加速OpenGL。在我看来,这比设置第三方X服务器要容易得多。请参阅我的answer on Ask Ubuntu了解启用步骤。
webghufk

webghufk2#

WSL 2现在支持Windows 11上的GUI应用程序:https://learn.microsoft.com/en-us/windows/wsl/tutorials/gui-apps
我刚刚安装了GPU驱动程序,更新了WSL,现在它为我工作。

相关问题