Kernel crashes (process dies) when calling env.render() in VLABench (dm_control / MuJoCo OpenGL context)
System / environment
- OS: Linux x86_64 (kernel
6.14.0-37-generic, glibc 2.39)
- Python: 3.10.19 (conda env)
- pip: 26.0.1
- VSCode: 1.108.2
- Jupyter extension: 2025.9.1
- Python extension: 2026.0.0
- Key packages:
dm_control==1.0.22
mujoco==3.2.2, mujoco-mjx==3.2.2
numpy==1.25.0
opencv-python-headless (cv2 version 4.13.0)
What I’m trying to do
Render an RGB image from a VLABench environment inside a Jupyter notebook.
Steps to reproduce
import os
from PIL import Image
from VLABench.envs import load_env
task = "select_fruit"
robot = "franka"
env = load_env(task, robot=robot, time_limit=1000)
env.reset()
image = env.render(camera_id=2, width=640, height=640)
Image.fromarray(image)
Expected behavior
env.render(...) returns a (H, W, 3) uint8 numpy array and the notebook continues running.
Actual behavior
The Jupyter kernel crashes / dies when executing env.render(...) (VSCode shows “The kernel crashed…”).
VSCode Jupyter log repeatedly shows:
Disposing session as kernel process died ExitCode: undefined
In earlier attempts (before the kernel started dying), I also observed:
FatalError: gladLoadGL error from dm_control.mujoco.engine.Physics.render(...)
Additionally, importing the dm_control viewer triggers an X11 warning:
GLFWError: (65550) b'X11: The DISPLAY environment variable is missing'
This machine is headless (no X11 display).
Debug info
In the current environment:
cv2.dilate exists (hasattr(cv2, "dilate") == True)
MUJOCO_GL and PYOPENGL_PLATFORM are not set at the process level:
MUJOCO_GL=None
PYOPENGL_PLATFORM=None
What I tried
Reinstalled OpenCV / switched to opencv-python-headless to avoid GUI dependencies.
Restarted the kernel / reran the notebook.
(Earlier) tried setting os.environ["MUJOCO_GL"]="egl" inside the notebook, but I may have set it after some imports.
Question
Is there a recommended / supported way to run VLABench rendering on a headless machine (e.g., EGL or OSMesa), and should VLABench enforce or document MUJOCO_GL / PYOPENGL_PLATFORM settings before importing dm_control / mujoco?
If useful, I can provide:
Full VSCode Jupyter output logs
pip freeze
GPU / driver info (nvidia-smi)
Why this likely happens (optional note you can keep or delete): MuJoCo rendering needs an OpenGL backend; on headless machines the default GLFW/X11 path often fails, and you typically need to force MUJOCO_GL=egl (GPU headless) or MUJOCO_GL=osmesa (CPU headless). :contentReference[oaicite:0]{index=0}
::contentReference[oaicite:1]{index=1}
Kernel crashes (process dies) when calling
env.render()in VLABench (dm_control / MuJoCo OpenGL context)System / environment
6.14.0-37-generic, glibc2.39)dm_control==1.0.22mujoco==3.2.2,mujoco-mjx==3.2.2numpy==1.25.0opencv-python-headless(cv2 version4.13.0)What I’m trying to do
Render an RGB image from a VLABench environment inside a Jupyter notebook.
Steps to reproduce
Expected behavior
env.render(...) returns a (H, W, 3) uint8 numpy array and the notebook continues running.
Actual behavior
The Jupyter kernel crashes / dies when executing env.render(...) (VSCode shows “The kernel crashed…”).
VSCode Jupyter log repeatedly shows:
Disposing session as kernel process died ExitCode: undefined
In earlier attempts (before the kernel started dying), I also observed:
FatalError: gladLoadGL error from dm_control.mujoco.engine.Physics.render(...)
Additionally, importing the dm_control viewer triggers an X11 warning:
GLFWError: (65550) b'X11: The DISPLAY environment variable is missing'
This machine is headless (no X11 display).
Debug info
In the current environment:
cv2.dilate exists (hasattr(cv2, "dilate") == True)
MUJOCO_GL and PYOPENGL_PLATFORM are not set at the process level:
MUJOCO_GL=None
PYOPENGL_PLATFORM=None
What I tried
Reinstalled OpenCV / switched to opencv-python-headless to avoid GUI dependencies.
Restarted the kernel / reran the notebook.
(Earlier) tried setting os.environ["MUJOCO_GL"]="egl" inside the notebook, but I may have set it after some imports.
Question
Is there a recommended / supported way to run VLABench rendering on a headless machine (e.g., EGL or OSMesa), and should VLABench enforce or document MUJOCO_GL / PYOPENGL_PLATFORM settings before importing dm_control / mujoco?
If useful, I can provide:
Full VSCode Jupyter output logs
pip freeze
GPU / driver info (nvidia-smi)
Why this likely happens (optional note you can keep or delete): MuJoCo rendering needs an OpenGL backend; on headless machines the default GLFW/X11 path often fails, and you typically need to force
MUJOCO_GL=egl(GPU headless) orMUJOCO_GL=osmesa(CPU headless). :contentReference[oaicite:0]{index=0}::contentReference[oaicite:1]{index=1}