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显示