server - 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$
解决方案
@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 窗口中打开。对我来说,没有可见的光标,但我仍然可以与对象交互,就好像我确实有一个光标一样。
推荐阅读
- sql - 如何加入带有时间条件的 SQL (Teradata) 查询?
- pandas - 将分组对象填充到扩展数据框中
- c# - 将 datetime2 数据类型转换为 datetime 数据类型导致超出范围的值异常
- c# - 初始化 Google Protobuf RepeatedField 集合
- javascript - 按钮在具有 ng-click 的 div 内不起作用
- android - Android:build.gradle:无法解决:com.github.Yalantis:Context-Menu.Android:1.1.4
- django - Django + 传统 MongoDB
- python - 如何将列表转换为字典形式?
- telegram-bot - 即时更改电报机器人名称
- node.js - 如何读取 csv 文件并将其存储在对象数组中?