首页 > 解决方案 > VcXsrv WSL X 服务器意外关闭。我需要禁用 GPU 吗?

问题描述

我正在尝试使用 pybullet 运行一些代码。我在 Windows 10 上,拥有最新的 vscode,并且我在带有 ubuntu 18.04 LTS 的 vscode 上使用 WSL 远程。我有一个 GTX 2070 显卡。我只是想看看这项工作,过去 3 个小时我一直在尝试修复它。

首先,这是我试图在 WSL 中运行的代码:

import numpy as np
import pybullet as pb 
physicsClient = pb.connect (pb.GUI)
#load plane
import pybullet_data
pb.setAdditionalSearchPath(pybullet_data.getDataPath())
planeId = pb.loadURDF('plane.urdf')
#load visual shape
visualShapeId = pb.createVisualShape(
    shapeType=pb.GEOM_MESH,
    fileName='random_urdfs/000/000.obj',
    rgbaColor=None,
    meshScale=[0.1, 0.1, 0.1])
collisionShapeId = pb.createCollisionShape(
    shapeType=pb.GEOM_MESH,
    fileName='random_urdfs/000/000_coll.obj',
    meshScale=[0.1, 0.1, 0.1])
multiBodyId = pb.createMultiBody(
    baseMass=1.0,
    baseCollisionShapeIndex=collisionShapeId, 
    baseVisualShapeIndex=visualShapeId,
    basePosition=[0, 0, 1],
    baseOrientation=pb.getQuaternionFromEuler([0, 0, 0]))

我没有收到任何错误,但 X 服务器窗口会弹出(黑色)并立即关闭。我读到您需要使用 WSL 禁用 GPU,但我害怕弄乱我的 PC。我只想在需要查看图形/使用 X 服务器时禁用它,而不是所有 WSL 应用程序。

这是我的 bash 脚本中显示的内容:

user@DESKTOP-######:~/program$ python3 openAI.py
pybullet build time: Sep 22 2020 00:54:31
startThreads creating 1 threads.
starting thread 0
started thread 0 
argc=2
argv[0] = --unused
argv[1] = --start_demo_name=Physics Server
ExampleBrowserThreadFunc started
X11 functions dynamically loaded using dlopen/dlsym OK!
X11 functions dynamically loaded using dlopen/dlsym OK!
Creating context
Failed to create GL 3.3 context ... using old-style GLX context
Indirect GLX rendering context obtained
Making context current
GL_VENDOR=NVIDIA Corporation
GL_RENDERER=GeForce RTX 2070 SUPER/PCIe/SSE2
GL_VERSION=1.4 (4.6.0 NVIDIA 451.67)
GL_SHADING_LANGUAGE_VERSION=(null)
pthread_getconcurrency()=0
Version = 1.4 (4.6.0 NVIDIA 451.67)
Vendor = NVIDIA Corporation
Renderer = GeForce RTX 2070 SUPER/PCIe/SSE2
Segmentation fault (core dumped)
user@DESKTOP-######:~/program$

标签: serverlinux-kernelubuntu-18.04windows-subsystem-for-linuxpybullet

解决方案


@Emilio,我使用以下过程完成了这项工作,无需对 GPU 进行任何更改:

我使用了与本教程相同的方式设置的 VcXsrv 应用程序:https ://jack-kawell.com/2020/06/12/ros-wsl2/其中至关重要的是未选中 Native openGL。

按照教程中的说明导出您的 IP 地址,但不要使用“export DISPLAY={your_ip_address}:0.0”,而是转到 VcXsrv 窗口(此时应为空白)并将 :0.0 替换为给出的任何显示数量。因此,对于 Display DESKTOP-1234AB:1.0,您将输入 'export DISPLAY={your_ip_address}:1.0'

在 linux 终端输入:export LIBGL_ALWAYS_INDIRECT=0

您可以通过输入以下内容来检查这是否已生效: glxinfo 应该打印出来:直接渲染:是

当你运行你的 python 程序时,它应该在 VcXsrv 窗口中打开。对我来说,没有可见的光标,但我仍然可以与对象交互,就好像我确实有一个光标一样。


推荐阅读