Opened 2 days ago

Closed 27 hours ago

Last modified 27 hours ago

#19512 closed defect (limitation)

VR on Linux

Reported by: kyrylo.bisikalo@… Owned by: Tom Goddard
Priority: normal Milestone:
Component: VR Version:
Keywords: Cc:
Blocked By: Blocking:
Notify when closed: Platform: all
Project: ChimeraX

Description

The following bug report has been submitted:
Platform:        Linux-6.17.7-ba20.fc43.x86_64-x86_64-with-glibc2.39
ChimeraX Version: 1.10.1 (2025-07-24 20:15:27 UTC)
Description
Hi!
I am doing some testing on my personal machine, trying to figure out whether we can use our xisting linux workstations for VR work in chimera, as the Windows machine we had previously used for that has been retired by IT due to Win10 EOL..

I am running bazzite linux with nvidia proprietery drivers on a laptop with rtx 2050 and a Quest3 for this. I am aware that the setup is very far from ideal, but since this machine is able to run steamVR and some light VR applications, I was hopeful it would work for Chimera too.

I first tried to do this through Monado and OpenXR, which I now know is not going to work, as the OpenXR code is OS specific and it was mentioned in one of the tickets from a few years back that OpenXR was only implented with Windows in mind.

When I get into SteamVR and type "vr on" in chimera, I get a "ChimeraX loading" in my headset, but the following error in Chimera itself:
An error occurred in drawing the scene. Redrawing graphics is now stopped to avoid a continuous stream of error messages. To restart graphics use the command "graphics restart" after changing the settings that caused the error.



Traceback (most recent call last):
File "/usr/lib/ucsf-chimerax/lib/python3.11/site-packages/chimerax/core/updateloop.py", line 84, in draw_new_frame
view.draw(check_for_changes = False)
File "/usr/lib/ucsf-chimerax/lib/python3.11/site-packages/chimerax/graphics/view.py", line 188, in draw
self._draw_scene(camera, drawings)
File "/usr/lib/ucsf-chimerax/lib/python3.11/site-packages/chimerax/graphics/view.py", line 231, in _draw_scene
camera.set_render_target(vnum, r)
File "/usr/lib/ucsf-chimerax/lib/python3.11/site-packages/chimerax/vive/vr.py", line 964, in set_render_target
self._submit_eye_image('left', left_fb.openvr_texture, render)
File "/usr/lib/ucsf-chimerax/lib/python3.11/site-packages/chimerax/vive/vr.py", line 978, in _submit_eye_image
result = self._compositor.submit(eye, texture)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/ucsf-chimerax/lib/python3.11/site-packages/openvr/__init__.py", line 4460, in submit
openvr.error_code.CompositorError.check_error_value(error)
File "/usr/lib/ucsf-chimerax/lib/python3.11/site-packages/openvr/error_code/__init__.py", line 23, in check_error_value
raise error_class(error_value, message)
openvr.error_code.CompositorError_InvalidTexture

Please let me know if what I am doing is inherently cursed, or there is something we can try before getting a new Windows machine for our VR setup.

OpenGL version: 4.6 (Core Profile) Mesa 25.0.7-0ubuntu0.24.04.2
OpenGL renderer: Mesa Intel(R) Iris(R) Xe Graphics (ADL GT2)
OpenGL vendor: Intel

Python: 3.11.4
Locale: en_US.UTF-8
Qt version: PyQt6 6.8.1, Qt 6.8.2
Qt runtime version: 6.8.2
Qt platform: xcb

XDG_SESSION_TYPE=wayland
DESKTOP_SESSION=plasma
XDG_SESSION_DESKTOP=KDE
XDG_CURRENT_DESKTOP=KDE
DISPLAY=:0
WAYLAND_DISPLAY=wayland-0
Manufacturer: LENOVO
Model: 82UT
OS: Ubuntu 24.04
Architecture: 64bit 
Virtual Machine: docker
CPU: 20 12th Gen Intel(R) Core(TM) i7-12700H
Cache Size: 24576 KB
Memory:
	               total        used        free      shared  buff/cache   available
	Mem:            15Gi       6.2Gi       3.9Gi       1.7Gi       7.9Gi       9.2Gi
	Swap:          4.0Gi       401Mi       3.6Gi

Graphics:
	unknown

Installed Packages:
    alabaster: 1.0.0
    appdirs: 1.4.4
    asttokens: 3.0.0
    babel: 2.17.0
    beautifulsoup4: 4.13.3
    blockdiag: 3.0.0
    blosc2: 3.6.1
    build: 1.2.2.post1
    certifi: 2025.7.14
    cftime: 1.6.4.post1
    charset-normalizer: 3.4.2
    ChimeraX-AddCharge: 1.5.19
    ChimeraX-AddH: 2.2.7
    ChimeraX-AlignmentAlgorithms: 2.0.2
    ChimeraX-AlignmentHdrs: 3.6.1
    ChimeraX-AlignmentMatrices: 2.1
    ChimeraX-Alignments: 2.20.2
    ChimeraX-AlphaFold: 1.0.1
    ChimeraX-AltlocExplorer: 1.1.2
    ChimeraX-AmberInfo: 1.0
    ChimeraX-Aniso: 1.1.4
    ChimeraX-Arrays: 1.1
    ChimeraX-Atomic: 1.60.7
    ChimeraX-AtomicLibrary: 14.1.19
    ChimeraX-AtomSearch: 2.0.1
    ChimeraX-AxesPlanes: 2.4
    ChimeraX-BasicActions: 1.1.3
    ChimeraX-BILD: 1.0
    ChimeraX-BlastProtein: 3.0.0
    ChimeraX-Boltz: 1.0
    ChimeraX-BondRot: 2.0.4
    ChimeraX-BugReporter: 1.0.2
    ChimeraX-BuildStructure: 2.13.1
    ChimeraX-Bumps: 1.0
    ChimeraX-BundleBuilder: 1.5.1
    ChimeraX-ButtonPanel: 1.0.1
    ChimeraX-CageBuilder: 1.0.1
    ChimeraX-CellPack: 1.0
    ChimeraX-Centroids: 1.4
    ChimeraX-ChangeChains: 1.1
    ChimeraX-CheckWaters: 1.5
    ChimeraX-ChemGroup: 2.0.2
    ChimeraX-Clashes: 2.3
    ChimeraX-ColorActions: 1.0.5
    ChimeraX-ColorGlobe: 1.0
    ChimeraX-ColorKey: 1.5.8
    ChimeraX-CommandLine: 1.3
    ChimeraX-ConnectStructure: 2.0.1
    ChimeraX-Contacts: 1.0.1
    ChimeraX-Core: 1.10.1
    ChimeraX-CoreFormats: 1.2
    ChimeraX-coulombic: 1.4.5
    ChimeraX-Crosslinks: 1.0
    ChimeraX-Crystal: 1.0
    ChimeraX-CrystalContacts: 1.0.1
    ChimeraX-DataFormats: 1.2.4
    ChimeraX-Dicom: 1.2.7
    ChimeraX-DistMonitor: 1.4.2
    ChimeraX-DockPrep: 1.1.4
    ChimeraX-Dssp: 2.0
    ChimeraX-EMDB-SFF: 1.0
    ChimeraX-ESMFold: 1.0
    ChimeraX-FileHistory: 1.0.1
    ChimeraX-FunctionKey: 1.0.1
    ChimeraX-Geometry: 1.3
    ChimeraX-gltf: 1.0
    ChimeraX-Graphics: 1.4.1
    ChimeraX-Hbonds: 2.5.1
    ChimeraX-Help: 1.3
    ChimeraX-HKCage: 1.3
    ChimeraX-IHM: 1.1
    ChimeraX-ImageFormats: 1.2
    ChimeraX-IMOD: 1.0
    ChimeraX-IO: 1.0.3
    ChimeraX-ItemsInspection: 1.0.1
    ChimeraX-IUPAC: 1.0
    ChimeraX-KVFinder: 1.6.2
    ChimeraX-Label: 1.1.14
    ChimeraX-LinuxSupport: 1.0.1
    ChimeraX-ListInfo: 1.2.2
    ChimeraX-Log: 1.2
    ChimeraX-LookingGlass: 1.1
    ChimeraX-Maestro: 1.9.1
    ChimeraX-Map: 1.3
    ChimeraX-MapData: 2.0
    ChimeraX-MapEraser: 1.0.1
    ChimeraX-MapFilter: 2.0.1
    ChimeraX-MapFit: 2.0
    ChimeraX-MapSeries: 2.1.1
    ChimeraX-Markers: 1.0.1
    ChimeraX-Mask: 1.0.2
    ChimeraX-MatchMaker: 2.2.2
    ChimeraX-MCopy: 1.0
    ChimeraX-MDcrds: 2.10.1
    ChimeraX-MedicalToolbar: 1.1
    ChimeraX-Meeting: 1.0.1
    ChimeraX-MLP: 1.1.1
    ChimeraX-mmCIF: 2.16
    ChimeraX-MMTF: 2.2
    ChimeraX-ModelArchive: 1.0
    ChimeraX-Modeller: 1.5.19
    ChimeraX-ModelPanel: 1.5.1
    ChimeraX-ModelSeries: 1.0.1
    ChimeraX-Mol2: 2.0.3
    ChimeraX-Mole: 1.0
    ChimeraX-Morph: 1.0.2
    ChimeraX-MouseModes: 1.2
    ChimeraX-Movie: 1.0
    ChimeraX-MutationScores: 1.0
    ChimeraX-Neuron: 1.0
    ChimeraX-Nifti: 1.2
    ChimeraX-NMRSTAR: 1.0.2
    ChimeraX-NRRD: 1.2
    ChimeraX-Nucleotides: 2.0.3
    ChimeraX-OpenCommand: 1.14.1
    ChimeraX-OrthoPick: 1.0.1
    ChimeraX-PDB: 2.7.10
    ChimeraX-PDBBio: 1.0.1
    ChimeraX-PDBLibrary: 1.0.4
    ChimeraX-PDBMatrices: 1.0
    ChimeraX-PickBlobs: 1.0.1
    ChimeraX-Positions: 1.0
    ChimeraX-PresetMgr: 1.1.3
    ChimeraX-ProfileGrids: 1.1.3
    ChimeraX-PubChem: 2.2
    ChimeraX-ReadPbonds: 1.0.1
    ChimeraX-Registration: 1.1.2
    ChimeraX-RemoteControl: 1.0
    ChimeraX-RenderByAttr: 1.6.3
    ChimeraX-RenumberResidues: 1.1
    ChimeraX-ResidueFit: 1.0.1
    ChimeraX-RestServer: 1.3.1
    ChimeraX-RNALayout: 1.0
    ChimeraX-RotamerLibMgr: 4.0
    ChimeraX-RotamerLibsDunbrack: 2.0
    ChimeraX-RotamerLibsDynameomics: 2.0
    ChimeraX-RotamerLibsRichardson: 2.0
    ChimeraX-SaveCommand: 1.5.1
    ChimeraX-SchemeMgr: 1.0
    ChimeraX-SDF: 2.0.3
    ChimeraX-Segger: 1.0
    ChimeraX-Segment: 1.0.1
    ChimeraX-Segmentations: 3.5.7
    ChimeraX-SelInspector: 1.0
    ChimeraX-SeqView: 2.17.1
    ChimeraX-Shape: 1.1
    ChimeraX-Shell: 1.0.1
    ChimeraX-Shortcuts: 1.2.1
    ChimeraX-ShowSequences: 1.0.3
    ChimeraX-SideView: 1.0.1
    ChimeraX-SimilarStructures: 1.0.1
    ChimeraX-Smiles: 2.1.2
    ChimeraX-SmoothLines: 1.0
    ChimeraX-SpaceNavigator: 1.0
    ChimeraX-StdCommands: 1.19.1
    ChimeraX-STL: 1.0.1
    ChimeraX-Storm: 1.0
    ChimeraX-StructMeasure: 1.2.1
    ChimeraX-Struts: 1.0.1
    ChimeraX-Surface: 1.0.1
    ChimeraX-SwapAA: 2.0.1
    ChimeraX-SwapRes: 2.5.2
    ChimeraX-TapeMeasure: 1.0
    ChimeraX-TaskManager: 1.0
    ChimeraX-Test: 1.0
    ChimeraX-Toolbar: 1.2.3
    ChimeraX-ToolshedUtils: 1.2.4
    ChimeraX-Topography: 1.0
    ChimeraX-ToQuest: 1.0
    ChimeraX-Tug: 1.0.1
    ChimeraX-UI: 1.45.2
    ChimeraX-Umap: 1.0
    ChimeraX-uniprot: 2.3.1
    ChimeraX-UnitCell: 1.0.1
    ChimeraX-ViewDockX: 1.4.4
    ChimeraX-VIPERdb: 1.0
    ChimeraX-Vive: 1.1
    ChimeraX-VolumeMenu: 1.0.1
    ChimeraX-vrml: 1.0
    ChimeraX-VTK: 1.0
    ChimeraX-WavefrontOBJ: 1.0
    ChimeraX-WebCam: 1.0.2
    ChimeraX-WebServices: 1.1.5
    ChimeraX-Zone: 1.0.1
    colorama: 0.4.6
    comm: 0.2.2
    contourpy: 1.3.2
    coverage: 7.10.0
    cxservices: 1.2.3
    cycler: 0.12.1
    Cython: 3.0.12
    debugpy: 1.8.15
    decorator: 5.2.1
    distro: 1.9.0
    docutils: 0.21.2
    executing: 2.2.0
    filelock: 3.18.0
    fonttools: 4.59.0
    funcparserlib: 2.0.0a0
    glfw: 2.9.0
    grako: 3.16.5
    h5py: 3.14.0
    html2text: 2024.2.26
    idna: 3.10
    ihm: 2.2
    imagecodecs: 2024.6.1
    imagesize: 1.4.1
    iniconfig: 2.1.0
    ipykernel: 6.29.5
    ipython: 8.26.0
    ipywidgets: 8.1.7
    jedi: 0.19.1
    Jinja2: 3.1.6
    jupyter_client: 8.6.3
    jupyter_core: 5.8.1
    jupyterlab_widgets: 3.0.15
    kiwisolver: 1.4.8
    line_profiler: 4.2.0
    lxml: 5.3.1
    lz4: 4.3.2
    MarkupSafe: 3.0.2
    matplotlib: 3.10.1
    matplotlib-inline: 0.1.7
    msgpack: 1.1.0
    ndindex: 1.10.0
    nest-asyncio: 1.6.0
    netCDF4: 1.6.5
    networkx: 3.3
    nibabel: 5.2.0
    nptyping: 2.5.0
    numexpr: 2.11.0
    numpy: 1.26.4
    nvidia-nvjitlink-cu12: 12.9.86
    OpenMM: 8.2.0
    OpenMM-CUDA-12: 8.2.0
    openvr: 1.26.701
    packaging: 24.2
    ParmEd: 4.2.2
    parso: 0.8.4
    pep517: 0.13.1
    pexpect: 4.9.0
    pickleshare: 0.7.5
    pillow: 10.4.0
    pip: 25.0.1
    pkginfo: 1.11.1
    platformdirs: 4.3.8
    pluggy: 1.6.0
    prompt_toolkit: 3.0.51
    psutil: 7.0.0
    ptyprocess: 0.7.0
    pure_eval: 0.2.3
    py-cpuinfo: 9.0.0
    pycollada: 0.8
    pydicom: 2.4.4
    Pygments: 2.18.0
    pynmrstar: 3.3.5
    pynrrd: 1.0.0
    PyOpenGL: 3.1.9
    PyOpenGL-accelerate: 3.1.9
    pyopenxr: 1.1.4501
    pyparsing: 3.2.3
    pyproject_hooks: 1.2.0
    PyQt6: 6.8.1
    PyQt6-Qt6: 6.8.2
    PyQt6-WebEngine: 6.8.0
    PyQt6-WebEngine-Qt6: 6.8.2
    PyQt6_sip: 13.10.0
    pytest: 8.4.1
    pytest-cov: 6.2.1
    python-dateutil: 2.9.0.post0
    pytz: 2025.2
    pyzmq: 27.0.0
    qtconsole: 5.5.2
    QtPy: 2.4.3
    qtshim: 1.1
    RandomWords: 0.4.0
    requests: 2.32.3
    roman-numerals-py: 3.1.0
    scipy: 1.14.0
    setuptools: 78.1.0
    sfftk-rw: 0.8.1
    six: 1.16.0
    snowballstemmer: 3.0.1
    sortedcontainers: 2.4.0
    soupsieve: 2.7
    Sphinx: 8.2.3
    sphinx-autodoc-typehints: 3.1.0
    sphinxcontrib-applehelp: 2.0.0
    sphinxcontrib-blockdiag: 3.0.0
    sphinxcontrib-devhelp: 2.0.0
    sphinxcontrib-htmlhelp: 2.1.0
    sphinxcontrib-jsmath: 1.0.1
    sphinxcontrib-qthelp: 2.0.0
    sphinxcontrib-serializinghtml: 2.0.0
    stack-data: 0.6.3
    superqt: 0.7.1
    tables: 3.10.2
    tcia_utils: 1.5.1
    tifffile: 2025.3.13
    tinyarray: 1.2.4
    tornado: 6.5.1
    traitlets: 5.14.3
    typing_extensions: 4.14.1
    tzdata: 2025.2
    urllib3: 2.5.0
    wcwidth: 0.2.13
    webcolors: 24.11.1
    wheel: 0.45.1
    wheel-filename: 1.4.2
    widgetsnbextension: 4.0.14

Change History (3)

comment:1 by Eric Pettersen, 28 hours ago

Component: UnassignedVR
Owner: set to Tom Goddard
Platform: all
Project: ChimeraX
Status: newassigned
Summary: ChimeraX bug report submissionVR on Linux

Reported by Kyrylo Bisikalo

comment:2 by Tom Goddard, 27 hours ago

Resolution: limitation
Status: assignedclosed

Hi Kyrylo,

I don't think I have good news for you. I'd guess 99% of VR is being done on Windows. Although in theory it can work on Linux, it doesn't make sense for any developer to work on that since the audience is so small.

Unfortunately you are right that OpenXR uses operating specific calls to set up a session. The ChimeraX code for that is here (on github)

https://github.com/RBVI/ChimeraX/blob/a13c8178bc5d01debd2cafcc468f306d82839ae3/src/bundles/vive/src/openxr.py#L178

and in your ChimeraX installation in site-packages/chimerax/vive/openxr.py. If you are really crazy you could try to edit it to make the appropriate Linux OpenXR setup calls. I think it is these 4 lines of code (with Win32 and WGL in them) that need to be changed

gb = xr.GraphicsBindingOpenGLWin32KHR()
from OpenGL import WGL
gb.h_dc = WGL.wglGetCurrentDC()
gb.h_glrc = WGL.wglGetCurrentContext()

I didn't see any other reference to Windows in the ChimeraX OpenXR code.

In theory SteamVR should work too. I think it officially supports Linux. Your error message

openvr.error_code.CompositorError_InvalidTexture

is rather vague. Aha! I see in your bug report ChimeraX is using Mesa graphics.

OpenGL version: 4.6 (Core Profile) Mesa 25.0.7-0ubuntu0.24.04.2
OpenGL renderer: Mesa Intel(R) Iris(R) Xe Graphics (ADL GT2)
OpenGL vendor: Intel

That definitely won't work. It needs to be using your Nvidia graphics driver. If you fix whatever the problem is with ChimeraX not seeing your Nvidia graphics driver then SteamVR might work. ChimeraX should use the Nvidia driver if it is correctly installed on your computer. You can try the "nvidia-smi" shell command on your machine to see if it thinks the Nvidia driver is working. The Nvidia drivers have long been a dysfunctional nightmare on the Wayland winding system you are using. I don't know how to get an Nvidia driver working on Wayland. But when I have seen this on Ubuntu I logged in using an X11 windowing system session and then the Nvidia driver was working. You can see in ChimeraX what driver it is using with the ChimeraX "graphics driver" command.

Good luck! (You'll need it. Linux is pain unless you are an expert hacker.)

Tom

comment:3 by Tom Goddard, 27 hours ago

One more tip. I recall when I was using the Nvidia proprietary driver on the Wayland windowing system on Ubuntu the nvidia-smi command worked meaning the driver is correctly installed. But the problem was the Wayland windowing system did not operate with it so graphics applications did not see the driver. Maybe that has improved, my experience with that was 6 months ago. It might be possible to make Nvidia drivers work with Wayland if you search online.

Note: See TracTickets for help on using tickets.