Visual Studio - X11:缺少 DISPLAY 环境变量

Posted

技术标签:

【中文标题】Visual Studio - X11:缺少 DISPLAY 环境变量【英文标题】:Visual Studio - X11: The DISPLAY environment variable is missing 【发布时间】:2019-06-24 19:46:59 【问题描述】:

我正在使用 Visual Studio 2019 Enterprise 开发一个跨平台(Windows / Linux)x64 GUI 应用程序。

在这个 2019 版中,我们可以使用 Visual Studio调试平台(Windows - 本机)和 Linux - Ubuntu(在虚拟机中运行)。

你可以在这里看到它: https://devblogs.microsoft.com/cppblog/using-visual-studio-for-cross-platform-c-development-targeting-windows-and-linux/

所以,我按照本教程进行操作,并使用 Visual Studio 2019 IDE 在我的 Ubuntu 18 VM 中运行和调试了这个 GUI 示例应用程序。 完美!

现在,我尝试做我的自定义 GUI 应用程序:

为了做一个跨平台的 GUI,我使用的是 GLFW 3.3。

步骤:

    创建 Visual Studio CMake 项目

    编写 C++ 代码和 CMakeLists.txt

    添加两个 VS 调试配置(Windows x64 和 Linux x64)

    编译和链接(在两者上都可以 VS Windows 和 Linux 目标)

    运行(在 VS Windows 和 Linux 目标上都可以

但是……

当我在 Windows 设置中运行它时,一切正常...显示 GLFW 窗口...好! 当我在 Linux 调试(通过 Visual Studio)中运行它时,当 VS 调试器点击 glfwInit() 行时,我收到此错误:

Starting GLFW context, OpenGL 3.3

Glfw Error 65544: X11: The DISPLAY environment variable is missing

所以,当我选择 Linux 调试配置时我的 VM 中没有 GUI 窗口。

在互联网上搜索,我看到有必要对 Visual Studio 导出 launch.vs.json 文件中的 DISPLAY linux 环境变量。

你可以在这里看到它: https://docs.microsoft.com/en-us/cpp/build/get-started-linux-cmake?view=vs-2019

在我的虚拟机 Ubuntu 中,我得到了DISPLAY:0

然后,我写的launch.vs.json文件:

"export DISPLAY=:0;$debuggerCommand"

"export DISPLAY=:0.0;$debuggerCommand"

详情:

如果我手动进入我的 Ubuntu VM,然后双击编译的应用程序,它会显示 GLFW 窗口并且一切正常!

我的问题是:

如何使用 Visual Studio 2019 IDE 将 DISPLAY 环境变量导出到 Linux VM,以调试将在 Virtual Box (VM) 内运行的应用程序。

【问题讨论】:

【参考方案1】:

Microsoft C++ 团队的一些好人(感谢 Ion、Erika 和 Elisabeth)帮助我,我找到了解决方案。

问题与 Visual Studio 自动生成的“launch.json”文件有关。

什么“launch.json”属性我必须改变:

1- 设置"name": "helloworld"。默认值为" "

2- 设置"project": "CMakeLists.txt"。默认值为" "

3- 设置"projectTarget": "helloworld"。此属性不是由 VS 2019 自动创建的。

4- 设置"cwd": "$debugInfo.defaultWorkingDirectory"。默认值为"$debugInfo.defaultRemoteDirectory"

5- 在 pipeArgs 中添加"export DISPLAY=:0;"

6- 删除"processId: 0" 行。通过这一行,只有 root 用户可以在 Linux 上进行部署和调试。

7- 在 pipeArgs 中添加新行:"--tty=$debugInfo.tty"。此行不会在您创建 CMake 项目 VS2019 时自动生成

所以 pipeArgs 是:

"pipeArgs": [
          "/s",
          "$debugInfo.remoteMachineId",
          "/p",
          "$debugInfo.parentProcessId",
          "/c",
          "export DISPLAY=:0;$debuggerCommand",
          "--tty=$debugInfo.tty"
        ]

【讨论】:

以上是关于Visual Studio - X11:缺少 DISPLAY 环境变量的主要内容,如果未能解决你的问题,请参考以下文章

visual studio code 配置remote ssh X11Forwarding显示

visual studio2005 缺少模板

Visual Studio 由于缺少调试目标

MySQL安装总是失败,提示缺少Visual Studio 2013 Redistributable

Visual Studio 2013 社区版缺少哪些功能?

visual studio 2010:项目中缺少“ConfigurationGeneral”规则